aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickgridview
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-01-30 10:42:34 +0100
committerSimon Hausmann <simon.hausmann@qt.io>2018-02-02 15:59:32 +0100
commita9a9fa0c4737017aa4fc72b467eb45645d0912f0 (patch)
tree4753218705648384e6555be0e2bf3165bfb391d9 /tests/auto/quick/qquickgridview
parenteace041161a03a849d3896af65493b7885cecc04 (diff)
parente6d4df156e9aec62054740dc99ab8ba2855eaafc (diff)
Merge remote-tracking branch 'origin/5.10' into dev
Conflicts: src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp src/qml/compiler/qqmlirbuilder.cpp src/qml/compiler/qqmlirbuilder_p.h src/qml/compiler/qqmltypecompiler.cpp src/qml/compiler/qv4codegen.cpp src/qml/compiler/qv4codegen_p.h src/qml/compiler/qv4compileddata_p.h src/qml/compiler/qv4compiler.cpp src/qml/compiler/qv4compilercontext_p.h src/qml/compiler/qv4isel_moth.cpp src/qml/compiler/qv4jsir.cpp src/qml/compiler/qv4jsir_p.h src/qml/jit/qv4isel_masm.cpp src/qml/jsruntime/qv4engine.cpp src/qml/jsruntime/qv4functionobject.cpp src/qml/jsruntime/qv4runtimecodegen.cpp src/qml/jsruntime/qv4script.cpp src/qml/jsruntime/qv4script_p.h src/qml/qml/qqmltypeloader.cpp src/quick/items/qquickanimatedimage.cpp src/quick/items/qquickanimatedimage_p_p.h src/quick/scenegraph/compressedtexture/qsgpkmhandler.cpp tests/auto/qml/qmlplugindump/qmlplugindump.pro tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp tools/qmlcachegen/qmlcachegen.cpp tools/qmljs/qmljs.cpp Done-with: Shawn Rutledge <shawn.rutledge@qt.io> Done-with: Lars Knoll <lars.knoll@qt.io> Done-with: Ulf Hermann <ulf.hermann@qt.io> Change-Id: I010e6525440a85f3b9a10bb9083f8e4352751b1d
Diffstat (limited to 'tests/auto/quick/qquickgridview')
-rw-r--r--tests/auto/quick/qquickgridview/data/qtbug49218.qml126
-rw-r--r--tests/auto/quick/qquickgridview/tst_qquickgridview.cpp31
2 files changed, 157 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickgridview/data/qtbug49218.qml b/tests/auto/quick/qquickgridview/data/qtbug49218.qml
new file mode 100644
index 0000000000..1a55fe5b3a
--- /dev/null
+++ b/tests/auto/quick/qquickgridview/data/qtbug49218.qml
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** 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.4
+
+Item {
+ width: 500
+ height: 160
+ visible: true
+
+ property var model1: ["1","2","3","4","5","6","7","8","9","10",
+ "11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30",
+ "31","32","33","34","a"]
+ property var model2: ["a","b","c","d","e","f","g","h","i","j","k","l","m","1"]
+ property bool useModel1: true
+
+ function changeModel() {
+ useModel1 = !useModel1
+ grid.loadModel(useModel1 ? model1 : model2)
+ }
+
+ function scrollToTop() {
+ grid.contentY = grid.originY;
+ }
+
+ GridView {
+ id: grid
+ anchors.fill: parent
+
+ model: ListModel {
+ }
+
+ onCurrentIndexChanged: {
+ positionViewAtIndex(currentIndex, GridView.Contain)
+ }
+
+ Component.onCompleted: {
+ loadModel(model1)
+ grid.currentIndex = 34
+ grid.positionViewAtIndex(34, GridView.Contain)
+ }
+
+ function loadModel(m) {
+ var remove = {};
+ var add = {};
+ var i;
+ for (i=0; i < model.count; ++i)
+ remove[model.get(i).name] = true;
+ for (i=0; i < m.length; ++i)
+ if (remove[m[i]])
+ delete remove[m[i]];
+ else
+ add[m[i]] = true;
+
+ for (i=model.count-1; i>= 0; --i)
+ if (remove[model.get(i).name])
+ model.remove(i, 1);
+
+ for (i=0; i<m.length; ++i)
+ if (add[m[i]])
+ model.insert(i, { "name": m[i] })
+ }
+
+ delegate: Rectangle {
+ height: grid.cellHeight
+ width: grid.cellWidth
+ color: GridView.isCurrentItem ? "gray" : "white"
+ Text {
+ anchors.fill: parent
+ text: name
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ grid.currentIndex = index
+ }
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
index 2a4a9dbdd9..ce04dc3c80 100644
--- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
+++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
@@ -210,6 +210,7 @@ private slots:
void contentHeightWithDelayRemove();
void QTBUG_45640();
+ void QTBUG_49218();
void QTBUG_48870_fastModelUpdates();
void keyNavigationEnabled();
@@ -6629,6 +6630,36 @@ void tst_QQuickGridView::QTBUG_45640()
delete window;
}
+void tst_QQuickGridView::QTBUG_49218()
+{
+ QQuickView *window = createView();
+ window->setSource(testFileUrl("qtbug49218.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+
+ QQuickItem *rootItem = qobject_cast<QQuickItem*>(window->rootObject());
+ QQuickGridView *gridview = qobject_cast<QQuickGridView *>(rootItem->childItems().first());
+ QVERIFY(gridview != 0);
+
+ auto processEventsAndForceLayout = [&gridview] () {
+ for (int pass = 0; pass < 2; ++pass) {
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+ gridview->forceLayout();
+ }
+ };
+ QMetaObject::invokeMethod(rootItem, "scrollToTop");
+ processEventsAndForceLayout();
+ QMetaObject::invokeMethod(rootItem, "changeModel");
+ processEventsAndForceLayout();
+ QMetaObject::invokeMethod(rootItem, "changeModel");
+ processEventsAndForceLayout();
+ QMetaObject::invokeMethod(rootItem, "scrollToTop");
+ processEventsAndForceLayout();
+
+ QCOMPARE(gridview->indexAt(gridview->cellWidth() - 10, gridview->cellHeight() - 10), 0);
+ delete window;
+}
+
void tst_QQuickGridView::keyNavigationEnabled()
{
QScopedPointer<QQuickView> window(createView());