diff options
Diffstat (limited to 'tests/auto/quick/qquicklistview')
8 files changed, 818 insertions, 244 deletions
diff --git a/tests/auto/quick/qquicklistview/BLACKLIST b/tests/auto/quick/qquicklistview/BLACKLIST index d259c11219..8cf8a57eee 100644 --- a/tests/auto/quick/qquicklistview/BLACKLIST +++ b/tests/auto/quick/qquicklistview/BLACKLIST @@ -5,3 +5,6 @@ osx #QTBUG-53863 [populateTransitions] opensuse-42.1 +#QTBUG-65964 +[QTBUG_34576_velocityZero] +osx-10.11 ci diff --git a/tests/auto/quick/qquicklistview/data/addoncompleted.qml b/tests/auto/quick/qquicklistview/data/addoncompleted.qml new file mode 100644 index 0000000000..57265cb2c0 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/addoncompleted.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.9 + +Rectangle { + width: 640 + height: 480 + color: "green" + + ListModel { + id: listModel + ListElement { name: "a" } + ListElement { name: "b" } + ListElement { name: "c" } + ListElement { name: "d" } + ListElement { name: "e" } + ListElement { name: "f" } + ListElement { name: "g" } + ListElement { name: "h" } + ListElement { name: "i" } + ListElement { name: "j" } + } + + ListView { + anchors.fill: parent + model: listModel + objectName: "view" + + delegate: Rectangle { + height: 15 + width: 15 + color: "blue" + objectName: name + Component.onCompleted: { + if (name.length === 1 && listModel.get(index + 1).name.length === 1) { + for (var i = 0; i < 10; ++i) + listModel.insert(index + 1, {name: name + i}); + } + } + } + } +} diff --git a/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml b/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml new file mode 100644 index 0000000000..af35c29143 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/appendDuringScrollDown.qml @@ -0,0 +1,28 @@ +import QtQuick 2.6 + +ListView { + width: 320; height: 240 + focus: true + delegate: Text { + height: 40; width: parent.width + text: model.text + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + highlight: Rectangle { color: "red" } + model: ListModel { + ListElement { text: "0" } + ListElement { text: "1" } + ListElement { text: "2" } + ListElement { text: "3" } + ListElement { text: "4" } + ListElement { text: "5" } + ListElement { text: "6" } + ListElement { text: "7" } + ListElement { text: "8" } + ListElement { text: "9" } + } + + readonly property Item topItem: itemAt(0, contentY) + onTopItemChanged: model.append({ "text": "new" }) +} diff --git a/tests/auto/quick/qquicklistview/data/qtbug34576.qml b/tests/auto/quick/qquicklistview/data/qtbug34576.qml new file mode 100644 index 0000000000..f407d8ebe3 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/qtbug34576.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.7 + +Rectangle { + id: root + width: 320 + height: 240 + color: "black" + + property int current: list.currentIndex + property int horizontalVelocityZeroCount: 0 + + ListView { + id: list + objectName: "list" + anchors.fill: parent + + focus: true + + orientation: ListView.Horizontal + + snapMode: ListView.SnapToItem + flickableDirection: Flickable.HorizontalFlick + + model: 10 + delegate: Item { + width: root.width / 3 + height: root.height + Rectangle { + anchors.centerIn: parent + width: 50 + height: 50 + color: list.currentIndex === index ? "red" : "white" + } + } + + onHorizontalVelocityChanged: { + if (list.horizontalVelocity === 0.0) + root.horizontalVelocityZeroCount++ + } + + } + + Rectangle { + color: "red" + width: 50 + height: 50 + anchors.left: parent.left + anchors.bottom: parent.bottom + + MouseArea { + anchors.fill: parent + onClicked: { + list.currentIndex--; + } + } + } + + Rectangle { + color: "red" + width: 50 + height: 50 + anchors.right: parent.right + anchors.bottom: parent.bottom + + MouseArea { + anchors.fill: parent + onClicked: { + list.currentIndex++; + } + } + } +} + diff --git a/tests/auto/quick/qquicklistview/data/qtbug61537_modelChangesAsync.qml b/tests/auto/quick/qquicklistview/data/qtbug61537_modelChangesAsync.qml new file mode 100644 index 0000000000..0dc9e6fdb5 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/qtbug61537_modelChangesAsync.qml @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 + +Item { + visible: true + width: 640 + height: 480 + + property ListView listView + + Loader { + id: loader + anchors.fill: parent + asynchronous: true + sourceComponent: comp + + onStatusChanged: { + if (status == Loader.Ready) { + // Assign the listview to the root prop late, so + // that the c++ part doesn't start before everything is ready. + listView = item.listView + } + } + } + + Component { + id: comp + Item { + property alias listView: listView + + ListView { + id: listView + + model: ListModel { + id: listModel + ListElement { title: "one" } + ListElement { title: "two" } + } + + anchors.fill: parent + orientation: ListView.Horizontal + + delegate: Item { + id: delegateRoot + objectName: "delegate" + + width: 200 + height: 200 + + Component.onCompleted: { + if (index === listModel.count - 1) { + // Add a new item while the outer Loader is still incubating async. If the new model item + // incubates using e.g QQmlIncubator::AsynchronousIfNested, it will also be loaded async, which + // is not currently supported (the item will not be added to the listview, or end up the wrong + // position, depending on its index and the current state of the refill/layout logic in + // QQuickListView). + // We add the new item here at the last delegates Component.onCompleted to hit the point in time + // when the listview is not expecting any more async items. In that case, the item will only be + // added to the list of visible items if incubated synchronously, which gives us something we + // can test for in the auto-test. + listModel.insert(0, {title: "zero"}); + } + } + + Rectangle { + anchors.fill: parent + border.width: 1 + Text { + anchors.centerIn: parent + text: index + } + } + } + } + } + } +} diff --git a/tests/auto/quick/qquicklistview/data/qtbug63974.qml b/tests/auto/quick/qquicklistview/data/qtbug63974.qml new file mode 100644 index 0000000000..1e0afa54f8 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/qtbug63974.qml @@ -0,0 +1,34 @@ +import QtQuick 2.6 + +ListView { + id: table + height: 200 + width: 100 + + headerPositioning: ListView.OverlayHeader + header: Rectangle { + width: table.width + height: 20 + color: "red" + z: 100 + } + + footerPositioning: ListView.OverlayFooter + footer: Rectangle { + width: table.width + height: 20 + color: "blue" + z: 200 + } + + model: 30 + delegate: Rectangle { + height: 20 + width: table.width + color: "lightgray" + Text { + text: "Item " + index + anchors.centerIn: parent + } + } +} diff --git a/tests/auto/quick/qquicklistview/randomsortmodel.cpp b/tests/auto/quick/qquicklistview/randomsortmodel.cpp index 7c4bd5111c..7375fe0dbe 100644 --- a/tests/auto/quick/qquicklistview/randomsortmodel.cpp +++ b/tests/auto/quick/qquicklistview/randomsortmodel.cpp @@ -74,14 +74,14 @@ QVariant RandomSortModel::data(const QModelIndex& index, int role) const void RandomSortModel::randomize() { - const int row = QRandomGenerator::bounded(mData.count()); + const int row = QRandomGenerator::global()->bounded(mData.count()); int random; bool exists = false; // Make sure we won't end up with two items with the same weight, as that // would make unit-testing much harder do { exists = false; - random = QRandomGenerator::bounded(mData.count() * 10); + random = QRandomGenerator::global()->bounded(mData.count() * 10); QList<QPair<QString, int> >::ConstIterator iter, end; for (iter = mData.constBegin(), end = mData.constEnd(); iter != end; ++iter) { if ((*iter).second == random) { diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 511a95f04f..8bc5575e34 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -254,10 +254,18 @@ private slots: void QTBUG_50105(); void keyNavigationEnabled(); + void QTBUG_61269_appendDuringScrollDown(); + void QTBUG_61269_appendDuringScrollDown_data(); void QTBUG_50097_stickyHeader_positionViewAtIndex(); + void QTBUG_63974_stickyHeader_positionViewAtIndex_Contain(); void itemFiltered(); void releaseItems(); + void QTBUG_34576_velocityZero(); + void QTBUG_61537_modelChangesAsync(); + + void addOnCompleted(); + private: template <class T> void items(const QUrl &source); template <class T> void changed(const QUrl &source); @@ -286,7 +294,7 @@ private: if (m_view) { if (QString(QTest::currentTestFunction()) != testForView) { delete m_view; - m_view = 0; + m_view = nullptr; } else { m_view->setSource(QUrl()); return m_view; @@ -324,7 +332,7 @@ class TestObject : public QObject Q_PROPERTY(int cacheBuffer READ cacheBuffer NOTIFY changedCacheBuffer) public: - TestObject(QObject *parent = 0) + TestObject(QObject *parent = nullptr) : QObject(parent), mError(true), mAnimate(false), mInvalidHighlight(false) , mCacheBuffer(0) {} @@ -353,7 +361,7 @@ public: int mCacheBuffer; }; -tst_QQuickListView::tst_QQuickListView() : m_view(0) +tst_QQuickListView::tst_QQuickListView() : m_view(nullptr) { } @@ -363,7 +371,7 @@ void tst_QQuickListView::init() if (m_view && QString(QTest::currentTestFunction()) != testForView) { testForView = QString(); delete m_view; - m_view = 0; + m_view = nullptr; } #endif qmlRegisterType<QAbstractItemModel>(); @@ -376,7 +384,7 @@ void tst_QQuickListView::cleanupTestCase() #ifdef SHARE_VIEWS testForView = QString(); delete m_view; - m_view = 0; + m_view = nullptr; #endif } @@ -400,16 +408,16 @@ void tst_QQuickListView::items(const QUrl &source) qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->forceLayout(); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QMetaObject::invokeMethod(window->rootObject(), "checkProperties"); QTRY_VERIFY(!testObject->error()); - QTRY_VERIFY(listview->highlightItem() != 0); + QTRY_VERIFY(listview->highlightItem() != nullptr); QTRY_COMPARE(listview->count(), model.count()); QTRY_COMPARE(window->rootObject()->property("count").toInt(), model.count()); listview->forceLayout(); @@ -420,10 +428,10 @@ void tst_QQuickListView::items(const QUrl &source) for (int i = 0; i < model.count(); ++i) { QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); QQuickText *number = findItem<QQuickText>(contentItem, "textNumber", i); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(i)); } @@ -445,7 +453,7 @@ void tst_QQuickListView::items(const QUrl &source) QMetaObject::invokeMethod(window->rootObject(), "checkProperties"); QTRY_VERIFY(!testObject->error()); QTRY_VERIFY(listview->currentItem()); - QTRY_VERIFY(listview->highlightItem() != 0); + QTRY_VERIFY(listview->highlightItem() != nullptr); // set an empty model and confirm that items are destroyed T model2; @@ -484,21 +492,21 @@ void tst_QQuickListView::changed(const QUrl &source) qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->forceLayout(); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); // Force a layout, necessary if ListView is completed before VisualDataModel. listview->forceLayout(); model.modifyItem(1, "Will", "9876"); QQuickText *name = findItem<QQuickText>(contentItem, "textName", 1); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(1)); QQuickText *number = findItem<QQuickText>(contentItem, "textNumber", 1); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(1)); delete testObject; @@ -526,10 +534,10 @@ void tst_QQuickListView::inserted(const QUrl &source) qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); model.insertItem(1, "Will", "9876"); @@ -537,10 +545,10 @@ void tst_QQuickListView::inserted(const QUrl &source) QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item QQuickText *name = findItem<QQuickText>(contentItem, "textName", 1); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(1)); QQuickText *number = findItem<QQuickText>(contentItem, "textNumber", 1); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(1)); // Confirm items positioned correctly @@ -555,10 +563,10 @@ void tst_QQuickListView::inserted(const QUrl &source) QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item name = findItem<QQuickText>(contentItem, "textName", 0); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(0)); number = findItem<QQuickText>(contentItem, "textNumber", 0); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(0)); QTRY_COMPARE(listview->currentIndex(), 1); @@ -625,9 +633,9 @@ void tst_QQuickListView::inserted_more(QQuickItemView::VerticalLayoutDirection v QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); if (verticalLayoutDirection == QQuickItemView::BottomToTop) { listview->setVerticalLayoutDirection(verticalLayoutDirection); @@ -698,10 +706,10 @@ void tst_QQuickListView::inserted_more(QQuickItemView::VerticalLayoutDirection v } QTRY_COMPARE(item->y(), pos); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); number = findItem<QQuickText>(contentItem, "textNumber", i); - QVERIFY(number != 0); + QVERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(i)); } @@ -820,9 +828,9 @@ void tst_QQuickListView::insertBeforeVisible() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); listview->setCacheBuffer(cacheBuffer); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -864,7 +872,7 @@ void tst_QQuickListView::insertBeforeVisible() QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i))); QTRY_COMPARE(item->y(), i*20.0 + itemsOffsetAfterMove); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -933,19 +941,19 @@ void tst_QQuickListView::removed(const QUrl &source, bool /* animated */) QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); model.removeItem(1); QTRY_COMPARE(window->rootObject()->property("count").toInt(), model.count()); QQuickText *name = findItem<QQuickText>(contentItem, "textName", 1); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(1)); QQuickText *number = findItem<QQuickText>(contentItem, "textNumber", 1); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(1)); // Confirm items positioned correctly @@ -962,10 +970,10 @@ void tst_QQuickListView::removed(const QUrl &source, bool /* animated */) QTRY_COMPARE(window->rootObject()->property("count").toInt(), model.count()); name = findItem<QQuickText>(contentItem, "textName", 0); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(0)); number = findItem<QQuickText>(contentItem, "textNumber", 0); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(0)); // Confirm items positioned correctly @@ -1033,7 +1041,7 @@ void tst_QQuickListView::removed(const QUrl &source, bool /* animated */) model.removeItem(20); QTRY_COMPARE(listview->currentIndex(), 20); - QTRY_VERIFY(listview->currentItem() != 0); + QTRY_VERIFY(listview->currentItem() != nullptr); // remove item before current, but visible listview->setCurrentIndex(8); @@ -1117,9 +1125,9 @@ void tst_QQuickListView::removed_more(const QUrl &source, QQuickItemView::Vertic QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); if (verticalLayoutDirection == QQuickItemView::BottomToTop) { listview->setVerticalLayoutDirection(verticalLayoutDirection); @@ -1165,10 +1173,10 @@ void tst_QQuickListView::removed_more(const QUrl &source, QQuickItemView::Vertic pos = -item0->height() - pos; QTRY_COMPARE(item->y(), pos); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); number = findItem<QQuickText>(contentItem, "textNumber", i); - QVERIFY(number != 0); + QVERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(i)); } @@ -1299,9 +1307,9 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); listview->setVerticalLayoutDirection(verticalLayoutDirection); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -1323,7 +1331,7 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou model.addItem("New", "1"); listview->forceLayout(); QTRY_COMPARE(listview->count(), 1); - QVERIFY(listview->currentItem() != 0); + QVERIFY(listview->currentItem() != nullptr); QCOMPARE(listview->currentIndex(), 0); delete testObject; @@ -1357,9 +1365,9 @@ void tst_QQuickListView::moved(const QUrl &source, QQuickItemView::VerticalLayou QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); // always need to wait for view to be painted before the first move() QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -1397,10 +1405,10 @@ void tst_QQuickListView::moved(const QUrl &source, QQuickItemView::VerticalLayou pos = -item->height() - pos; QTRY_COMPARE(item->y(), pos); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); number = findItem<QQuickText>(contentItem, "textNumber", i); - QVERIFY(number != 0); + QVERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(i)); // current index should have been updated @@ -1587,7 +1595,7 @@ void tst_QQuickListView::multipleChanges(bool condensed) QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); for (int i=0; i<changes.count(); i++) { @@ -1628,16 +1636,16 @@ void tst_QQuickListView::multipleChanges(bool condensed) QQuickText *name; QQuickText *number; QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count(); for (int i=0; i < model.count() && i < itemCount; ++i) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i))); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); number = findItem<QQuickText>(contentItem, "textNumber", i); - QVERIFY(number != 0); + QVERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(i)); } @@ -1835,7 +1843,7 @@ void tst_QQuickListView::swapWithFirstItem() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // ensure content position is stable @@ -1862,7 +1870,7 @@ void tst_QQuickListView::enforceRange() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(listview->preferredHighlightBegin(), 100.0); QTRY_COMPARE(listview->preferredHighlightEnd(), 100.0); @@ -1870,7 +1878,7 @@ void tst_QQuickListView::enforceRange() QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); // view should be positioned at the top of the range. QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", 0); @@ -1878,10 +1886,10 @@ void tst_QQuickListView::enforceRange() QTRY_COMPARE(listview->contentY(), -100.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", 0); - QTRY_VERIFY(name != 0); + QTRY_VERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(0)); QQuickText *number = findItem<QQuickText>(contentItem, "textNumber", 0); - QTRY_VERIFY(number != 0); + QTRY_VERIFY(number != nullptr); QTRY_COMPARE(number->text(), model.number(0)); // Check currentIndex is updated when contentItem moves @@ -1921,7 +1929,7 @@ void tst_QQuickListView::enforceRange_withoutHighlight() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); qreal expectedPos = -100.0; @@ -1962,10 +1970,10 @@ void tst_QQuickListView::spacing() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // Confirm items positioned correctly @@ -2020,10 +2028,10 @@ void tst_QQuickListView::sections(const QUrl &source) QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -2120,10 +2128,10 @@ void tst_QQuickListView::sectionsDelegate() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -2229,30 +2237,30 @@ void tst_QQuickListView::sectionsDragOutsideBounds() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setCacheBuffer(cacheBuffer); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // QTBUG-17769 // Drag view up beyond bounds - QTest::mousePress(window, Qt::LeftButton, 0, QPoint(20,20)); + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(20,20)); QTest::mouseMove(window, QPoint(20,0)); QTest::mouseMove(window, QPoint(20,-50)); QTest::mouseMove(window, QPoint(20,-distance)); - QTest::mouseRelease(window, Qt::LeftButton, 0, QPoint(20,-distance)); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(20,-distance)); // view should settle back at 0 QTRY_COMPARE(listview->contentY(), 0.0); - QTest::mousePress(window, Qt::LeftButton, 0, QPoint(20,0)); + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(20,0)); QTest::mouseMove(window, QPoint(20,20)); QTest::mouseMove(window, QPoint(20,70)); QTest::mouseMove(window, QPoint(20,distance)); - QTest::mouseRelease(window, Qt::LeftButton, 0, QPoint(20,distance)); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(20,distance)); // view should settle back at 0 QTRY_COMPARE(listview->contentY(), 0.0); @@ -2274,13 +2282,13 @@ void tst_QQuickListView::sectionsDelegate_headerVisibility() window->show(); QVERIFY(QTest::qWaitForWindowExposed(window.data())); window->requestActivate(); - QTest::qWaitForWindowActive(window.data()); + QVERIFY(QTest::qWaitForWindowActive(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // ensure section header is maintained in view @@ -2309,9 +2317,9 @@ void tst_QQuickListView::sectionsPositioning() window->rootObject()->setProperty("sectionPositioning", QVariant(int(QQuickViewSection::InlineLabels | QQuickViewSection::CurrentLabelAtStart | QQuickViewSection::NextLabelAtEnd))); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); for (int i = 0; i < 3; ++i) { @@ -2467,10 +2475,10 @@ void tst_QQuickListView::sectionPropertyChange() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); @@ -2531,10 +2539,10 @@ void tst_QQuickListView::sectionDelegateChange() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView *>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QQUICK_VERIFY_POLISH(listview); @@ -2577,9 +2585,9 @@ void tst_QQuickListView::sectionsItemInsertion() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); for (int i = 0; i < 3; ++i) { @@ -2635,9 +2643,9 @@ void tst_QQuickListView::currentIndex_delayedItemCreation() qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QSignalSpy spy(listview, SIGNAL(currentItemChanged())); //QCOMPARE(listview->currentIndex(), 0); @@ -2662,7 +2670,7 @@ void tst_QQuickListView::currentIndex() for (int i = 0; i < 30; i++) initModel.addItem("Item" + QString::number(i), QString::number(i)); - QQuickView *window = new QQuickView(0); + QQuickView *window = new QQuickView(nullptr); window->setGeometry(0,0,240,320); QQmlContext *ctxt = window->rootContext(); @@ -2675,9 +2683,9 @@ void tst_QQuickListView::currentIndex() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // currentIndex is initialized to 20 @@ -2766,7 +2774,7 @@ void tst_QQuickListView::noCurrentIndex() for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), QString::number(i)); - QQuickView *window = new QQuickView(0); + QQuickView *window = new QQuickView(nullptr); window->setGeometry(0,0,240,320); QQmlContext *ctxt = window->rootContext(); @@ -2778,9 +2786,9 @@ void tst_QQuickListView::noCurrentIndex() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // current index should be -1 at startup @@ -2818,10 +2826,10 @@ void tst_QQuickListView::keyNavigation() window->rootContext()->setContextProperty("testObject", testObject); window->setSource(testFileUrl("listviewtest.qml")); window->show(); - QTest::qWaitForWindowActive(window); + QVERIFY(QTest::qWaitForWindowActive(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); @@ -2829,7 +2837,7 @@ void tst_QQuickListView::keyNavigation() QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); window->requestActivate(); - QTest::qWaitForWindowActive(window); + QVERIFY(QTest::qWaitForWindowActive(window)); QTRY_COMPARE(qGuiApp->focusWindow(), window); QTest::keyClick(window, forwardsKey); @@ -2931,13 +2939,13 @@ void tst_QQuickListView::itemList() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "view"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQmlObjectModel *model = window->rootObject()->findChild<QQmlObjectModel*>("itemModel"); - QTRY_VERIFY(model != 0); + QTRY_VERIFY(model != nullptr); QTRY_COMPARE(model->count(), 3); QTRY_COMPARE(listview->currentIndex(), 0); @@ -2970,13 +2978,13 @@ void tst_QQuickListView::itemListFlicker() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "view"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQmlObjectModel *model = window->rootObject()->findChild<QQmlObjectModel*>("itemModel"); - QTRY_VERIFY(model != 0); + QTRY_VERIFY(model != nullptr); QTRY_COMPARE(model->count(), 3); QTRY_COMPARE(listview->currentIndex(), 0); @@ -3035,13 +3043,13 @@ void tst_QQuickListView::cacheBuffer() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); - QTRY_VERIFY(listview->delegate() != 0); + QTRY_VERIFY(contentItem != nullptr); + QTRY_VERIFY(listview->delegate() != nullptr); QTRY_VERIFY(listview->model() != 0); - QTRY_VERIFY(listview->highlight() != 0); + QTRY_VERIFY(listview->highlight() != nullptr); // Confirm items positioned correctly int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count(); @@ -3060,8 +3068,8 @@ void tst_QQuickListView::cacheBuffer() // items will be created one at a time for (int i = itemCount; i < qMin(itemCount+10,model.count()); ++i) { - QVERIFY(findItem<QQuickItem>(listview, "wrapper", i) == 0); - QQuickItem *item = 0; + QVERIFY(findItem<QQuickItem>(listview, "wrapper", i) == nullptr); + QQuickItem *item = nullptr; while (!item) { bool b = false; controller.incubateWhile(&b); @@ -3095,11 +3103,11 @@ void tst_QQuickListView::cacheBuffer() QCOMPARE(item->y(), qreal(i*20)); } - QVERIFY(findItem<QQuickItem>(listview, "wrapper", 32) == 0); + QVERIFY(findItem<QQuickItem>(listview, "wrapper", 32) == nullptr); // ensure buffered items are created for (int i = 32; i < qMin(41,model.count()); ++i) { - QQuickItem *item = 0; + QQuickItem *item = nullptr; while (!item) { qGuiApp->processEvents(); // allow refill to happen bool b = false; @@ -3138,9 +3146,9 @@ void tst_QQuickListView::positionViewAtBeginningEnd() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); listview->setContentY(100); @@ -3198,9 +3206,9 @@ void tst_QQuickListView::positionViewAtIndex() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); window->rootObject()->setProperty("enforceRange", enforceRange); @@ -3278,16 +3286,16 @@ void tst_QQuickListView::resetModel() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QTRY_COMPARE(listview->count(), model.rowCount()); for (int i = 0; i < model.rowCount(); ++i) { QQuickText *display = findItem<QQuickText>(contentItem, "displayText", i); - QTRY_VERIFY(display != 0); + QTRY_VERIFY(display != nullptr); QTRY_COMPARE(display->text(), strings.at(i)); } @@ -3300,7 +3308,7 @@ void tst_QQuickListView::resetModel() for (int i = 0; i < model.rowCount(); ++i) { QQuickText *display = findItem<QQuickText>(contentItem, "displayText", i); - QTRY_VERIFY(display != 0); + QTRY_VERIFY(display != nullptr); QTRY_COMPARE(display->text(), strings.at(i)); } } @@ -3447,11 +3455,11 @@ void tst_QQuickListView::QTBUG_9791() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); - QTRY_VERIFY(listview->delegate() != 0); + QTRY_VERIFY(contentItem != nullptr); + QTRY_VERIFY(listview->delegate() != nullptr); QTRY_VERIFY(listview->model() != 0); QMetaObject::invokeMethod(listview, "fillModel"); @@ -3480,7 +3488,7 @@ void tst_QQuickListView::QTBUG_33568() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); // we want to verify that the change animates smoothly, rather than jumping into place QSignalSpy spy(listview, SIGNAL(contentYChanged())); @@ -3497,7 +3505,7 @@ void tst_QQuickListView::QTBUG_33568() void tst_QQuickListView::manualHighlight() { - QQuickView *window = new QQuickView(0); + QQuickView *window = new QQuickView(nullptr); window->setGeometry(0,0,240,320); QString filename(testFile("manual-highlight.qml")); @@ -3506,10 +3514,10 @@ void tst_QQuickListView::manualHighlight() qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(listview->currentIndex(), 0); QTRY_COMPARE(listview->currentItem(), findItem<QQuickItem>(contentItem, "wrapper", 0)); @@ -3549,9 +3557,9 @@ void tst_QQuickListView::QTBUG_11105() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // Confirm items positioned correctly @@ -3586,9 +3594,9 @@ void tst_QQuickListView::initialZValues() qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QVERIFY(listview->currentItem()); QTRY_COMPARE(listview->currentItem()->z(), listview->property("itemZ").toReal()); @@ -3602,7 +3610,7 @@ void tst_QQuickListView::initialZValues() QVERIFY(listview->highlightItem()); QTRY_COMPARE(listview->highlightItem()->z(), listview->property("highlightZ").toReal()); - QQuickText *sectionItem = 0; + QQuickText *sectionItem = nullptr; QTRY_VERIFY(sectionItem = findItem<QQuickText>(contentItem, "section")); QTRY_COMPARE(sectionItem->z(), listview->property("sectionZ").toReal()); } @@ -3640,16 +3648,16 @@ void tst_QQuickListView::header() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); listview->setVerticalLayoutDirection(verticalLayoutDirection); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); - QQuickText *header = 0; + QQuickText *header = nullptr; QTRY_VERIFY(header = findItem<QQuickText>(contentItem, "header")); QCOMPARE(header, listview->headerItem()); @@ -3719,7 +3727,7 @@ void tst_QQuickListView::header() QVERIFY(QTest::qWaitForWindowExposed(window)); listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); listview->setVerticalLayoutDirection(verticalLayoutDirection); @@ -3806,10 +3814,10 @@ void tst_QQuickListView::header_delayItemCreation() qApp->processEvents(); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQuickText *header = findItem<QQuickText>(contentItem, "header"); QVERIFY(header); @@ -3829,13 +3837,13 @@ void tst_QQuickListView::headerChangesViewport() window->setSource(testFileUrl("headerchangesviewport.qml")); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); - QQuickText *header = 0; + QQuickText *header = nullptr; QTRY_VERIFY(header = findItem<QQuickText>(contentItem, "header")); QCOMPARE(header, listview->headerItem()); @@ -3876,14 +3884,14 @@ void tst_QQuickListView::footer() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); listview->setVerticalLayoutDirection(verticalLayoutDirection); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQuickText *footer = findItem<QQuickText>(contentItem, "footer"); QVERIFY(footer); @@ -4065,14 +4073,14 @@ void tst_QQuickListView::extents() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); listview->setVerticalLayoutDirection(verticalLayoutDirection); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQuickItem *header = findItem<QQuickItem>(contentItem, "header"); QVERIFY(header); @@ -4163,10 +4171,10 @@ void tst_QQuickListView::resetModel_headerFooter() qApp->processEvents(); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QQuickItem *header = findItem<QQuickItem>(contentItem, "header"); QVERIFY(header); @@ -4206,9 +4214,9 @@ void tst_QQuickListView::resizeView() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // Confirm items positioned correctly @@ -4283,9 +4291,9 @@ void tst_QQuickListView::resizeViewAndRepaint() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // item at index 10 should not be currently visible @@ -4318,9 +4326,9 @@ void tst_QQuickListView::sizeLessThan1() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // Confirm items positioned correctly @@ -4342,10 +4350,10 @@ void tst_QQuickListView::QTBUG_14821() qApp->processEvents(); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); listview->decrementCurrentIndex(); QCOMPARE(listview->currentIndex(), 99); @@ -4370,9 +4378,9 @@ void tst_QQuickListView::resizeDelegate() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QCOMPARE(listview->count(), model.rowCount()); @@ -4383,7 +4391,7 @@ void tst_QQuickListView::resizeDelegate() for (int i = 0; i < 16; ++i) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QCOMPARE(item->y(), i*20.0); } @@ -4395,7 +4403,7 @@ void tst_QQuickListView::resizeDelegate() for (int i = 0; i < 11; ++i) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QTRY_COMPARE(item->y(), i*30.0); } @@ -4409,7 +4417,7 @@ void tst_QQuickListView::resizeDelegate() for (int i = 5; i < 16; ++i) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QCOMPARE(item->y(), i*30.0); } @@ -4421,7 +4429,7 @@ void tst_QQuickListView::resizeDelegate() for (int i = 5; i < 11; ++i) { QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QTRY_COMPARE(item->y(), 150 + (i-5)*20.0); } @@ -4451,15 +4459,15 @@ void tst_QQuickListView::resizeFirstDelegate() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); - QQuickItem *item = 0; + QQuickItem *item = nullptr; for (int i = 0; i < model.count(); ++i) { item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QCOMPARE(item->y(), i*20.0); } @@ -4474,7 +4482,7 @@ void tst_QQuickListView::resizeFirstDelegate() for (int i = 1; i < model.count(); ++i) { item = findItem<QQuickItem>(contentItem, "wrapper", i); - QVERIFY(item != 0); + QVERIFY(item != nullptr); QTRY_COMPARE(item->y(), (i-1)*20.0); } @@ -4523,7 +4531,7 @@ void tst_QQuickListView::repositionResizedDelegate() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *positioner = findItem<QQuickItem>(window->rootObject(), "positioner"); @@ -4615,7 +4623,7 @@ void tst_QQuickListView::QTBUG_16037() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "listview"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QVERIFY(listview->contentHeight() <= 0.0); @@ -4660,13 +4668,13 @@ void tst_QQuickListView::indexAt_itemAt() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); - QQuickItem *item = 0; + QQuickItem *item = nullptr; if (index >= 0) { item = findItem<QQuickItem>(contentItem, "wrapper", index); QVERIFY(item); @@ -4681,29 +4689,24 @@ void tst_QQuickListView::indexAt_itemAt() void tst_QQuickListView::incrementalModel() { QScopedPointer<QQuickView> window(createView()); - QSKIP("QTBUG-30716"); IncrementalModel model; QQmlContext *ctxt = window->rootContext(); ctxt->setContextProperty("testModel", &model); window->setSource(testFileUrl("displaylist.qml")); - qApp->processEvents(); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); - listview->forceLayout(); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); - - listview->forceLayout(); - QTRY_COMPARE(listview->count(), 20); + QTRY_VERIFY(contentItem != nullptr); + QTRY_COMPARE(listview->count(), 35); listview->positionViewAtIndex(10, QQuickListView::Beginning); - - listview->forceLayout(); - QTRY_COMPARE(listview->count(), 25); + QTRY_COMPARE(listview->count(), 45); } void tst_QQuickListView::onAdd() @@ -4820,17 +4823,17 @@ void tst_QQuickListView::rightToLeft() window->show(); QVERIFY(QTest::qWaitForWindowExposed(window.data())); - QVERIFY(window->rootObject() != 0); + QVERIFY(window->rootObject() != nullptr); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "view"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQmlObjectModel *model = window->rootObject()->findChild<QQmlObjectModel*>("itemModel"); - QTRY_VERIFY(model != 0); + QTRY_VERIFY(model != nullptr); QTRY_COMPARE(model->count(), 3); QTRY_COMPARE(listview->currentIndex(), 0); @@ -4869,12 +4872,12 @@ void tst_QQuickListView::test_mirroring() QScopedPointer<QQuickView> windowA(createView()); windowA->setSource(testFileUrl("rightToLeft.qml")); QQuickListView *listviewA = findItem<QQuickListView>(windowA->rootObject(), "view"); - QTRY_VERIFY(listviewA != 0); + QTRY_VERIFY(listviewA != nullptr); QScopedPointer<QQuickView> windowB(createView()); windowB->setSource(testFileUrl("rightToLeft.qml")); QQuickListView *listviewB = findItem<QQuickListView>(windowB->rootObject(), "view"); - QTRY_VERIFY(listviewA != 0); + QTRY_VERIFY(listviewA != nullptr); qApp->processEvents(); QList<QString> objectNames; @@ -4937,9 +4940,9 @@ void tst_QQuickListView::margins() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QCOMPARE(listview->contentY(), -30.); @@ -5008,7 +5011,7 @@ void tst_QQuickListView::marginsResize() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "listview"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); @@ -5147,7 +5150,7 @@ void tst_QQuickListView::snapToItem() QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); @@ -5156,7 +5159,7 @@ void tst_QQuickListView::snapToItem() QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); // confirm that a flick hits an item boundary flick(window, flickStart, flickEnd, 180); @@ -5207,7 +5210,7 @@ void tst_QQuickListView::snapOneItemResize_QTBUG_43555() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QSignalSpy currentIndexSpy(listview, SIGNAL(currentIndexChanged())); @@ -5410,7 +5413,7 @@ void tst_QQuickListView::asynchronous() QQuickItem *rootObject = qobject_cast<QQuickItem*>(window->rootObject()); QVERIFY(rootObject); - QQuickListView *listview = 0; + QQuickListView *listview = nullptr; while (!listview) { bool b = false; controller.incubateWhile(&b); @@ -5419,8 +5422,8 @@ void tst_QQuickListView::asynchronous() // items will be created one at a time for (int i = 0; i < 8; ++i) { - QVERIFY(findItem<QQuickItem>(listview, "wrapper", i) == 0); - QQuickItem *item = 0; + QVERIFY(findItem<QQuickItem>(listview, "wrapper", i) == nullptr); + QQuickItem *item = nullptr; while (!item) { bool b = false; controller.incubateWhile(&b); @@ -5507,7 +5510,7 @@ void tst_QQuickListView::snapOneItem() QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->setOrientation(orientation); listview->setLayoutDirection(layoutDirection); @@ -5516,7 +5519,7 @@ void tst_QQuickListView::snapOneItem() QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QSignalSpy currentIndexSpy(listview, SIGNAL(currentIndexChanged())); @@ -5580,7 +5583,7 @@ void tst_QQuickListView::snapOneItemCurrentIndexRemoveAnimation() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QTRY_COMPARE(listview->currentIndex(), 0); @@ -5603,7 +5606,7 @@ void tst_QQuickListView::attachedProperties_QTBUG_32836() qApp->processEvents(); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *header = listview->headerItem(); QVERIFY(header); @@ -5632,7 +5635,7 @@ void tst_QQuickListView::unrequestedVisibility() for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), QString::number(i)); - QQuickView *window = new QQuickView(0); + QQuickView *window = new QQuickView(nullptr); window->setGeometry(0,0,240,320); QQmlContext *ctxt = window->rootContext(); @@ -5886,7 +5889,7 @@ void tst_QQuickListView::populateTransitions() QTRY_COMPARE(item->x(), 0.0); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -5921,7 +5924,7 @@ void tst_QQuickListView::populateTransitions() QTRY_COMPARE(item->x(), 0.0); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -5939,7 +5942,7 @@ void tst_QQuickListView::populateTransitions() QTRY_COMPARE(item->x(), 0.0); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -5984,7 +5987,7 @@ void tst_QQuickListView::sizeTransitions() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // the following will start the transition @@ -6047,9 +6050,9 @@ void tst_QQuickListView::addTransitions() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); if (contentY != 0) { @@ -6128,7 +6131,7 @@ void tst_QQuickListView::addTransitions() QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i))); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -6243,9 +6246,9 @@ void tst_QQuickListView::moveTransitions() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QQuickText *name; if (contentY != 0) { @@ -6313,7 +6316,7 @@ void tst_QQuickListView::moveTransitions() QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i))); QTRY_COMPARE(item->y(), i*20.0 + itemsOffsetAfterMove); name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -6446,9 +6449,9 @@ void tst_QQuickListView::removeTransitions() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); if (contentY != 0) { @@ -6527,7 +6530,7 @@ void tst_QQuickListView::removeTransitions() QCOMPARE(item->x(), 0.0); QCOMPARE(item->y(), contentY + (i-firstVisibleIndex) * 20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -6658,9 +6661,9 @@ void tst_QQuickListView::displacedTransitions() QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QList<QPair<QString,QString> > expectedDisplacedValues = expectedDisplacedIndexes.getModelDataValues(model); @@ -6742,7 +6745,7 @@ void tst_QQuickListView::displacedTransitions() QCOMPARE(item->x(), 0.0); QCOMPARE(item->y(), i * 20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -6878,9 +6881,9 @@ void tst_QQuickListView::multipleTransitions() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); if (contentY != 0) { @@ -6950,7 +6953,7 @@ void tst_QQuickListView::multipleTransitions() QTRY_COMPARE(item->x(), 0.0); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -7035,9 +7038,9 @@ void tst_QQuickListView::multipleDisplaced() QVERIFY(QTest::qWaitForWindowExposed(window)); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); model.moveItems(12, 8, 1); @@ -7059,7 +7062,7 @@ void tst_QQuickListView::multipleDisplaced() QTRY_COMPARE(item->x(), 0.0); QTRY_COMPARE(item->y(), i*20.0); QQuickText *name = findItem<QQuickText>(contentItem, "textName", i); - QVERIFY(name != 0); + QVERIFY(name != nullptr); QTRY_COMPARE(name->text(), model.name(i)); } @@ -7128,10 +7131,10 @@ void tst_QQuickListView::flickBeyondBounds() QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QTRY_VERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); // Flick view up beyond bounds @@ -7240,10 +7243,10 @@ void tst_QQuickListView::destroyItemOnCreation() QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QCOMPARE(window->rootObject()->property("createdIndex").toInt(), -1); @@ -7261,13 +7264,13 @@ void tst_QQuickListView::parentBinding() window->setSource(testFileUrl("parentBinding.qml")); window->show(); - QTest::qWaitForWindowExposed(window.data()); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *contentItem = listview->contentItem(); - QVERIFY(contentItem != 0); + QVERIFY(contentItem != nullptr); QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", 0); @@ -7297,7 +7300,7 @@ void tst_QQuickListView::accessEmptyCurrentItem_QTBUG_30227() window->setSource(testFileUrl("emptymodel.qml")); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); listview->forceLayout(); QMetaObject::invokeMethod(window->rootObject(), "remove"); @@ -7313,7 +7316,7 @@ void tst_QQuickListView::delayedChanges_QTBUG_30555() window->setSource(testFileUrl("delayedChanges.qml")); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QCOMPARE(listview->count(), 10); @@ -7332,7 +7335,7 @@ void tst_QQuickListView::outsideViewportChangeNotAffectingView() window->setSource(testFileUrl("outsideViewportChangeNotAffectingView.qml")); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); window->show(); QVERIFY(QTest::qWaitForWindowExposed(window.data())); @@ -7366,7 +7369,7 @@ void tst_QQuickListView::testProxyModelChangedAfterMove() window->setSource(testFileUrl("proxytest.qml")); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); window->show(); QVERIFY(QTest::qWaitForWindowExposed(window.data())); @@ -7386,7 +7389,7 @@ void tst_QQuickListView::typedModel() QCOMPARE(listview->count(), 6); - QQmlListModel *listModel = 0; + QQmlListModel *listModel = nullptr; listview->setModel(QVariant::fromValue(listModel)); QCOMPARE(listview->count(), 0); @@ -7400,10 +7403,10 @@ void tst_QQuickListView::displayMargin() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QQuickItem *content = listview->contentItem(); - QVERIFY(content != 0); + QVERIFY(content != nullptr); QQuickItem *item0 = findItem<QQuickItem>(content, "delegate", 0); QVERIFY(item0); @@ -7416,7 +7419,7 @@ void tst_QQuickListView::displayMargin() QCOMPARE(delegateVisible(item14), true); // the 15th item should be outside the end margin - QVERIFY(findItem<QQuickItem>(content, "delegate", 14) == 0); + QVERIFY(findItem<QQuickItem>(content, "delegate", 14) == nullptr); // the first delegate should still be within the begin margin listview->positionViewAtIndex(3, QQuickListView::Beginning); @@ -7436,13 +7439,13 @@ void tst_QQuickListView::negativeDisplayMargin() QQuickItem *listview = window->rootObject(); QQuickListView *innerList = findItem<QQuickListView>(window->rootObject(), "innerList"); - QVERIFY(innerList != 0); + QVERIFY(innerList != nullptr); QTRY_COMPARE(innerList->property("createdItems").toInt(), 11); QCOMPARE(innerList->property("destroyedItem").toInt(), 0); QQuickItem *content = innerList->contentItem(); - QVERIFY(content != 0); + QVERIFY(content != nullptr); QQuickItem *item = findItem<QQuickItem>(content, "delegate", 0); QVERIFY(item); @@ -7509,7 +7512,7 @@ void tst_QQuickListView::QTBUG_35920() QQuickListView *listview = qobject_cast<QQuickListView *>(window->rootObject()); QVERIFY(listview); - QTest::mousePress(window.data(), Qt::LeftButton, 0, QPoint(10,0)); + QTest::mousePress(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(10,0)); for (int i = 0; i < 100; ++i) { QTest::mouseMove(window.data(), QPoint(10,i)); if (listview->isMoving()) { @@ -7526,7 +7529,7 @@ void tst_QQuickListView::QTBUG_35920() QCOMPARE(listview->contentY(), contentY); } } - QTest::mouseRelease(window.data(), Qt::LeftButton, 0, QPoint(10,100)); + QTest::mouseRelease(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(10,100)); } Q_DECLARE_METATYPE(Qt::Orientation) @@ -7960,12 +7963,12 @@ void tst_QQuickListView::roundingErrors() // QTBUG-37339: drag an item and verify that it doesn't // get prematurely released due to rounding errors - QTest::mousePress(window.data(), Qt::LeftButton, 0, viewPos); + QTest::mousePress(window.data(), Qt::LeftButton, Qt::NoModifier, viewPos); for (int i = 0; i < 150; i += 5) { QTest::mouseMove(window.data(), viewPos - QPoint(i, 0)); QVERIFY(item); } - QTest::mouseRelease(window.data(), Qt::LeftButton, 0, QPoint(0, 36)); + QTest::mouseRelease(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(0, 36)); // maintain position relative to the right edge listview->setLayoutDirection(Qt::RightToLeft); @@ -8346,7 +8349,7 @@ void tst_QQuickListView::contentHeightWithDelayRemove() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); const int initialCount(listview->count()); const int eventualCount(initialCount + countDelta); @@ -8375,7 +8378,7 @@ void tst_QQuickListView::QTBUG_48044_currentItemNotVisibleAfterTransition() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = window->rootObject()->findChild<QQuickListView*>(); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); // Expand 2nd header listview->setProperty("transitionsDone", QVariant(false)); @@ -8468,6 +8471,49 @@ void tst_QQuickListView::keyNavigationEnabled() QCOMPARE(listView->currentIndex(), 1); } +void tst_QQuickListView::QTBUG_61269_appendDuringScrollDown_data() +{ + QTest::addColumn<QQuickListView::SnapMode>("snapMode"); + + QTest::newRow("NoSnap") << QQuickListView::NoSnap; + QTest::newRow("SnapToItem") << QQuickListView::SnapToItem; + QTest::newRow("SnapOneItem") << QQuickListView::SnapOneItem; +} + +void tst_QQuickListView::QTBUG_61269_appendDuringScrollDown() // AKA QTBUG-62864 +{ + QFETCH(QQuickListView::SnapMode, snapMode); + + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("appendDuringScrollDown.qml")); + window->show(); + window->requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(window.data())); + + QQuickListView *listView = qobject_cast<QQuickListView *>(window->rootObject()); + listView->setSnapMode(snapMode); + QQuickItem *highlightItem = listView->highlightItem(); + QVERIFY(listView); + QCOMPARE(listView->isKeyNavigationEnabled(), true); + listView->setHighlightMoveVelocity(400); + listView->setHighlightMoveDuration(-1); // let it animate + listView->setFocus(true); + QVERIFY(listView->hasActiveFocus()); + qreal highlightYLimit = listView->height() - highlightItem->height(); // should be 200 + + for (int i = 1; i < 15; ++i) { + QTest::keyClick(window.data(), Qt::Key_Down); + + // Wait for the highlight movement animation to finish. + QTRY_COMPARE(highlightItem->y(), 40.0 * i); + + // As we scroll down, the QML will append rows to its own model. + // Make sure the highlighted row and highlight item stay within the view. + // In QTBUG-62864 and QTBUG-61269, it would go off the bottom. + QVERIFY(highlightItem->y() - listView->contentY() <= highlightYLimit); + } +} + void tst_QQuickListView::QTBUG_48870_fastModelUpdates() { StressTestModel model; @@ -8481,7 +8527,7 @@ void tst_QQuickListView::QTBUG_48870_fastModelUpdates() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QTRY_VERIFY(listview != nullptr); QQuickItemViewPrivate *priv = QQuickItemViewPrivate::get(listview); bool nonUnique; @@ -8524,7 +8570,7 @@ void tst_QQuickListView::QTBUG_50097_stickyHeader_positionViewAtIndex() QVERIFY(QTest::qWaitForWindowExposed(window.data())); QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); - QVERIFY(listview != 0); + QVERIFY(listview != nullptr); QTRY_COMPARE(listview->contentY(), -100.0); // the header size, since the header is overlaid listview->setProperty("currentPage", 2); QTRY_COMPARE(listview->contentY(), 400.0); // a full page of items down, sans the original negative header position @@ -8532,6 +8578,46 @@ void tst_QQuickListView::QTBUG_50097_stickyHeader_positionViewAtIndex() QTRY_COMPARE(listview->contentY(), -100.0); // back to the same position: header visible, items not under the header. } +void tst_QQuickListView::QTBUG_63974_stickyHeader_positionViewAtIndex_Contain() +{ + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("qtbug63974.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); + QVERIFY(listview != nullptr); + + const qreal headerSize = 20; + const qreal footerSize = 20; + const qreal itemSize = 20; + const int itemCount = 30; + const qreal contentHeight = itemCount * itemSize; + + const qreal initialY = listview->contentY(); + const qreal endPosition = contentHeight + footerSize - listview->height(); + + QVERIFY(qFuzzyCompare(initialY, -headerSize)); + + listview->positionViewAtIndex(itemCount - 1, QQuickListView::Contain); + QTRY_COMPARE(listview->contentY(), endPosition); + + listview->positionViewAtIndex(0, QQuickListView::Contain); + QTRY_COMPARE(listview->contentY(), -headerSize); + + listview->positionViewAtIndex(itemCount - 1, QQuickListView::Visible); + QTRY_COMPARE(listview->contentY(), endPosition); + + listview->positionViewAtIndex(0, QQuickListView::Visible); + QTRY_COMPARE(listview->contentY(), -headerSize); + + listview->positionViewAtIndex(itemCount - 1, QQuickListView::SnapPosition); + QTRY_COMPARE(listview->contentY(), endPosition); + + listview->positionViewAtIndex(0, QQuickListView::SnapPosition); + QTRY_COMPARE(listview->contentY(), -headerSize); +} + void tst_QQuickListView::itemFiltered() { QStringListModel model(QStringList() << "one" << "two" << "three" << "four" << "five" << "six"); @@ -8557,7 +8643,7 @@ void tst_QQuickListView::itemFiltered() window->setContent(QUrl(), &component, component.create()); window->show(); - QTest::qWaitForWindowExposed(window.data()); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); // this should not crash model.setData(model.index(2), QStringLiteral("modified three"), Qt::DisplayRole); @@ -8575,6 +8661,112 @@ void tst_QQuickListView::releaseItems() listview->setModel(123); } +void tst_QQuickListView::QTBUG_34576_velocityZero() +{ + QQuickView *window = new QQuickView(nullptr); + window->setGeometry(0,0,240,320); + + QQmlContext *ctxt = window->rootContext(); + + QString filename(testFile("qtbug34576.qml")); + window->setSource(QUrl::fromLocalFile(filename)); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + + QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list"); + QVERIFY(listview); + QQuickItem *contentItem = listview->contentItem(); + QVERIFY(contentItem); + QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false); + + QSignalSpy horizontalVelocitySpy(listview, SIGNAL(horizontalVelocityChanged())); + + // currentIndex is initialized to 0 + QCOMPARE(listview->currentIndex(), 0); + + // set currentIndex to last item currently visible item + window->rootObject()->setProperty("horizontalVelocityZeroCount", QVariant(0)); + listview->setCurrentIndex(2); + QTRY_COMPARE(window->rootObject()->property("current").toInt(), 2); + QCOMPARE(horizontalVelocitySpy.count(), 0); + QCOMPARE(window->rootObject()->property("horizontalVelocityZeroCount").toInt(), 0); + + QSignalSpy currentIndexChangedSpy(listview, SIGNAL(currentIndexChanged())); + + // click button which increases currentIndex + QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(295,215)); + QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(295,215)); + + // verify that currentIndexChanged is triggered + QTRY_VERIFY(currentIndexChangedSpy.count() > 0); + + // since we have set currentIndex to an item out of view, the listview will scroll + QTRY_COMPARE(window->rootObject()->property("current").toInt(), 3); + QTRY_VERIFY(horizontalVelocitySpy.count() > 0); + + // velocity should be always > 0.0 + QTRY_COMPARE(window->rootObject()->property("horizontalVelocityZeroCount").toInt(), 0); + + delete window; +} + +void tst_QQuickListView::QTBUG_61537_modelChangesAsync() +{ + // The purpose of this test if to check that any model changes that happens + // during start-up, while a loader higher up in the chain is still incubating + // async, will not fail. + QQuickView window; + window.setGeometry(0,0,640,480); + + QString filename(testFile("qtbug61537_modelChangesAsync.qml")); + window.setSource(QUrl::fromLocalFile(filename)); + window.show(); + QVERIFY(QTest::qWaitForWindowExposed(&window)); + + // The qml file will assign the listview to the 'listView' property once the + // loader is ready with async incubation. So we need to wait for it. + QObject *root = window.rootObject(); + QTRY_VERIFY(root->property("listView").value<QQuickListView *>()); + QQuickListView *listView = root->property("listView").value<QQuickListView *>(); + QVERIFY(listView); + + // Check that the number of delegates we expect to be visible in + // the listview matches the number of items we find if we count. + int reportedCount = listView->count(); + int actualCount = findItems<QQuickItem>(listView, "delegate").count(); + QCOMPARE(reportedCount, actualCount); +} + +void tst_QQuickListView::addOnCompleted() +{ + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("addoncompleted.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "view"); + QTRY_VERIFY(listview != nullptr); + + QQuickItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != nullptr); + + qreal y = -1; + for (char name = 'a'; name <= 'j'; ++name) { + for (int num = 9; num >= 0; --num) { + const QString objName = QString::fromLatin1("%1%2").arg(name).arg(num); + QQuickItem *item = findItem<QQuickItem>(contentItem, objName); + if (!item) { + QVERIFY(name >= 'd'); + y = 9999999; + } else { + const qreal newY = item->y(); + QVERIFY2(newY > y, objName.toUtf8().constData()); + y = newY; + } + } + } +} + QTEST_MAIN(tst_QQuickListView) #include "tst_qquicklistview.moc" |