Test the VisualDataModel hasModelChildren property
authorAndrew den Exter <andrew.den-exter@nokia.com>
Wed, 1 Aug 2012 02:19:06 +0000 (12:19 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 2 Aug 2012 00:43:48 +0000 (02:43 +0200)
Change-Id: I9ea71ca5c7d6a0f161cc92583c187d591d26826a
Reviewed-by: Damian Jansen <damian.jansen@nokia.com>

tests/auto/quick/qquickvisualdatamodel/data/visualdatamodel.qml
tests/auto/quick/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp

index 0d4d9e2..e3ae1d1 100644 (file)
@@ -8,5 +8,5 @@ VisualDataModel {
         rootIndex = parentModelIndex();
     }
     model: myModel
-    delegate: Item {}
+    delegate: Item { property bool modelChildren: hasModelChildren }
 }
index 2e5d55a..e23ae6f 100644 (file)
@@ -409,6 +409,7 @@ private slots:
     void qaimRowsMoved_data();
     void subtreeRowsMoved();
     void watchedRoles();
+    void hasModelChildren();
     void remove_data();
     void remove();
     void move_data();
@@ -1215,6 +1216,7 @@ void tst_qquickvisualdatamodel::watchedRoles()
     QQuickItem *item = vdm->item(0);
     QVERIFY(item);
     vdm->release(item);
+    QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);  // Ensure released items are deleted before test exits.
 
     QSignalSpy spy(vdm, SIGNAL(modelUpdated(QQuickChangeSet,bool)));
     QQuickChangeSet changeSet;
@@ -1285,6 +1287,57 @@ void tst_qquickvisualdatamodel::watchedRoles()
     QCOMPARE(changeSet.changes().at(0).count, 1);
 }
 
+void tst_qquickvisualdatamodel::hasModelChildren()
+{
+    SingleRoleModel model(QStringList() << "one" << "two" << "three" << "four");
+    model.insert(model.index(0, 0), 0, QStringList() << "a" << "b" << "c" << "d" << "e");
+    model.insert(model.index(2, 0), 0, QStringList() << "A" << "B" << "C");
+
+    QQmlEngine engine;
+    engine.rootContext()->setContextProperty("myModel", &model);
+
+    QQmlComponent component(&engine, testFileUrl("visualdatamodel.qml"));
+
+    QScopedPointer<QObject> object(component.create());
+    QQuickVisualDataModel *vdm = qobject_cast<QQuickVisualDataModel*>(object.data());
+    QVERIFY(vdm);
+
+    QCOMPARE(vdm->count(), 4);
+
+    QQuickItem *item = 0;
+
+    item = vdm->item(0);
+    QVERIFY(item);
+    QCOMPARE(item->property("modelChildren").toBool(), true);
+    vdm->release(item);
+
+    item = vdm->item(1);
+    QVERIFY(item);
+    QCOMPARE(item->property("modelChildren").toBool(), false);
+    vdm->release(item);
+
+    item = vdm->item(2);
+    QVERIFY(item);
+    QCOMPARE(item->property("modelChildren").toBool(), true);
+    vdm->release(item);
+
+    item = vdm->item(3);
+    QVERIFY(item);
+    QCOMPARE(item->property("modelChildren").toBool(), false);
+    vdm->release(item);
+    QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);  // Ensure released items are deleted before test exits.
+
+    QCOMPARE(vdm->stringValue(0, QLatin1String("hasModelChildren")), QVariant(true).toString());
+    QCOMPARE(vdm->stringValue(1, QLatin1String("hasModelChildren")), QVariant(false).toString());
+    QCOMPARE(vdm->stringValue(2, QLatin1String("hasModelChildren")), QVariant(true).toString());
+    QCOMPARE(vdm->stringValue(3, QLatin1String("hasModelChildren")), QVariant(false).toString());
+
+    QCOMPARE(evaluate<bool>(vdm, "items.get(0).model.hasModelChildren"), true);
+    QCOMPARE(evaluate<bool>(vdm, "items.get(1).model.hasModelChildren"), false);
+    QCOMPARE(evaluate<bool>(vdm, "items.get(2).model.hasModelChildren"), true);
+    QCOMPARE(evaluate<bool>(vdm, "items.get(3).model.hasModelChildren"), false);
+}
+
 void tst_qquickvisualdatamodel::remove_data()
 {
     QTest::addColumn<QUrl>("source");