Fix tests broken by a change in the signals emitted by AbstractItemModel
authorAndrew den Exter <andrew.den-exter@nokia.com>
Fri, 9 Dec 2011 06:07:37 +0000 (16:07 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 9 Dec 2011 06:28:39 +0000 (07:28 +0100)
QAbstractItemModel used to emit both layoutChanged() and rowsMoved()
when items were moved.  The VisualDataModel test expected both signals
but was only interested in the move, and the grid view test had a bug
in its test model that didn't was hidden by the change signal being
emitted and causing bindings to be reevaluated.

Change-Id: Id5d1b5768717f4a82f6eb4710ff3b4429529193e
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>

tests/auto/qtquick2/qquickgridview/tst_qquickgridview.cpp
tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp

index 241e2e9..b1edb22 100644 (file)
@@ -134,23 +134,28 @@ private:
 template<typename T>
 void tst_qquickgridview_move(int from, int to, int n, T *items)
 {
-    if (n == 1) {
-        items->move(from, to);
-    } else {
-        T replaced;
-        int i=0;
-        typename T::ConstIterator it=items->begin(); it += from+n;
-        for (; i<to-from; ++i,++it)
-            replaced.append(*it);
-        i=0;
-        it=items->begin(); it += from;
-        for (; i<n; ++i,++it)
-            replaced.append(*it);
-        typename T::ConstIterator f=replaced.begin();
-        typename T::Iterator t=items->begin(); t += from;
-        for (; f != replaced.end(); ++f, ++t)
-            *t = *f;
-    }
+    if (from > to) {
+        // Only move forwards - flip if backwards moving
+        int tfrom = from;
+        int tto = to;
+        from = tto;
+        to = tto+n;
+        n = tfrom-tto;
+    }
+
+    T replaced;
+    int i=0;
+    typename T::ConstIterator it=items->begin(); it += from+n;
+    for (; i<to-from; ++i,++it)
+        replaced.append(*it);
+    i=0;
+    it=items->begin(); it += from;
+    for (; i<n; ++i,++it)
+        replaced.append(*it);
+    typename T::ConstIterator f=replaced.begin();
+    typename T::Iterator t=items->begin(); t += from;
+    for (; f != replaced.end(); ++f, ++t)
+        *t = *f;
 }
 
 void tst_QQuickGridView::initTestCase()
@@ -969,7 +974,7 @@ void tst_QQuickGridView::moved()
 
     QQuickText *name;
     QQuickText *number;
-    QQuickView *canvas = createView();
+    QScopedPointer<QQuickView> canvas(createView());
     canvas->show();
 
     TestModel model;
@@ -997,7 +1002,7 @@ void tst_QQuickGridView::moved()
     model.moveItems(from, to, count);
 
     // wait for items to move
-    QTest::qWait(300);
+    QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
 
     // Confirm items positioned correctly and indexes correct
     int firstVisibleIndex = qCeil(contentY / 60.0) * 3;
@@ -1022,8 +1027,6 @@ void tst_QQuickGridView::moved()
         if (item == currentItem)
             QTRY_COMPARE(gridview->currentIndex(), i);
     }
-
-    delete canvas;
 }
 
 void tst_QQuickGridView::moved_data()
index 9e27a20..af3af57 100644 (file)
@@ -688,26 +688,18 @@ void tst_qquickvisualdatamodel::qaimRowsMoved()
 
     QSignalSpy spy(obj, SIGNAL(modelUpdated(QDeclarativeChangeSet,bool)));
     model.emitMove(sourceFirst, sourceLast, destinationChild);
-    // QAbstractItemModel also emits the changed signal when items are moved.
-    QCOMPARE(spy.count(), 2);
-
-    bool move = false;
-    for (int i = 0; i < 2; ++i) {
-        QCOMPARE(spy[1].count(), 2);
-        QDeclarativeChangeSet changeSet = spy[i][0].value<QDeclarativeChangeSet>();
-        if (!changeSet.changes().isEmpty())
-            continue;
-        move = true;
-        QCOMPARE(changeSet.removes().count(), 1);
-        QCOMPARE(changeSet.removes().at(0).index, expectFrom);
-        QCOMPARE(changeSet.removes().at(0).count, expectCount);
-        QCOMPARE(changeSet.inserts().count(), 1);
-        QCOMPARE(changeSet.inserts().at(0).index, expectTo);
-        QCOMPARE(changeSet.inserts().at(0).count, expectCount);
-        QCOMPARE(changeSet.removes().at(0).moveId, changeSet.inserts().at(0).moveId);
-        QCOMPARE(spy[i][1].toBool(), false);
-    }
-    QVERIFY(move);
+    QCOMPARE(spy.count(), 1);
+
+    QCOMPARE(spy[0].count(), 2);
+    QDeclarativeChangeSet changeSet = spy[0][0].value<QDeclarativeChangeSet>();
+    QCOMPARE(changeSet.removes().count(), 1);
+    QCOMPARE(changeSet.removes().at(0).index, expectFrom);
+    QCOMPARE(changeSet.removes().at(0).count, expectCount);
+    QCOMPARE(changeSet.inserts().count(), 1);
+    QCOMPARE(changeSet.inserts().at(0).index, expectTo);
+    QCOMPARE(changeSet.inserts().at(0).count, expectCount);
+    QCOMPARE(changeSet.removes().at(0).moveId, changeSet.inserts().at(0).moveId);
+    QCOMPARE(spy[0][1].toBool(), false);
 
     delete obj;
 }