From 39b715f32a44c136271aecf2c3e28704cbf9e546 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 29 Nov 2013 11:56:49 +1000 Subject: Set all attached section properties before emitting change signals. If we have bindings to the section properties, e.g. implementing manual section header creation, we want previousSection, section and nextSection to be set before emitting the change signals to prevent different results each time the binding is run. Change-Id: Id3a0b4a53419681f35102c9e7c620b5c6112ebb0 Reviewed-by: Martin Jones --- .../qquicklistview/data/listview-sections.qml | 25 ++++++++++++++++++++++ .../quick/qquicklistview/tst_qquicklistview.cpp | 2 ++ 2 files changed, 27 insertions(+) (limited to 'tests/auto/quick/qquicklistview') diff --git a/tests/auto/quick/qquicklistview/data/listview-sections.qml b/tests/auto/quick/qquicklistview/data/listview-sections.qml index d5b8a4400d..e9fb83910a 100644 --- a/tests/auto/quick/qquicklistview/data/listview-sections.qml +++ b/tests/auto/quick/qquicklistview/data/listview-sections.qml @@ -1,6 +1,7 @@ import QtQuick 2.0 Rectangle { + property bool sectionsInvalidOnCompletion width: 240 height: 320 color: "#ffffff" @@ -9,6 +10,26 @@ Rectangle { id: myDelegate Item { id: wrapper + + function validateInitialSections() { + var invalid = false + if (index == 0) { + invalid |= wrapper.ListView.previousSection != "" + } + if (index == model.count - 1) { + invalid |= wrapper.ListView.nextSection != "" + } + if (index % 5 == 0 && index > 0) { + invalid |= wrapper.ListView.previousSection != Number(wrapper.ListView.section) - 1 + } else if ((index + 1) % 5 == 0 && index < model.count - 1) { + invalid |= wrapper.ListView.nextSection != Number(wrapper.ListView.section) + 1 + } else if (index > 0 && index < model.count - 1) { + invalid |= wrapper.ListView.previousSection != wrapper.ListView.section + invalid |= wrapper.ListView.nextSection != wrapper.ListView.section + } + sectionsInvalidOnCompletion |= invalid + } + objectName: "wrapper" height: ListView.previousSection != ListView.section ? 40 : 20; width: 240 @@ -49,6 +70,10 @@ Rectangle { visible: wrapper.ListView.previousSection != wrapper.ListView.section ? true : false Text { text: wrapper.ListView.section } } + ListView.onPreviousSectionChanged: validateInitialSections() + ListView.onNextSectionChanged: validateInitialSections() + ListView.onSectionChanged: validateInitialSections() + Component.onCompleted: validateInitialSections() } } ] diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index fb0b1c95ca..d888ba2b5c 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -1956,6 +1956,8 @@ void tst_QQuickListView::sections(const QUrl &source) QCOMPARE(next->text().toInt(), (i+1)/5); } + QVERIFY(!listview->property("sectionsInvalidOnCompletion").toBool()); + QSignalSpy currentSectionChangedSpy(listview, SIGNAL(currentSectionChanged())); // Remove section boundary -- cgit v1.2.3