diff options
-rw-r--r-- | src/declarative/items/qquickvisualdatamodel.cpp | 3 | ||||
-rw-r--r-- | tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp | 46 |
2 files changed, 47 insertions, 2 deletions
diff --git a/src/declarative/items/qquickvisualdatamodel.cpp b/src/declarative/items/qquickvisualdatamodel.cpp index 7d0abfcfe0..ce8548456e 100644 --- a/src/declarative/items/qquickvisualdatamodel.cpp +++ b/src/declarative/items/qquickvisualdatamodel.cpp @@ -2116,7 +2116,7 @@ void QQuickVisualDataGroup::remove(QDeclarativeV8Function *args) bool QQuickVisualDataGroupPrivate::parseGroupArgs( QDeclarativeV8Function *args, int *index, int *count, int *groups) const { - if (!model) + if (!model || !QQuickVisualDataModelPrivate::get(model)->m_cacheMetaType) return false; if (args->Length() < 2) @@ -2300,6 +2300,7 @@ void QQuickVisualDataGroup::move(QDeclarativeV8Function *args) model->itemsMoved(removes, inserts); model->emitChanges(); } + } /*! diff --git a/tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp index 44759d4fec..e382a015dd 100644 --- a/tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp +++ b/tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp @@ -146,6 +146,7 @@ private slots: void onChanged_data(); void onChanged(); void create(); + void incompleteModel(); private: template <int N> void groups_verify( @@ -563,7 +564,7 @@ void tst_qquickvisualdatamodel::modelProperties() QUrl source(QUrl::fromLocalFile(TESTDATA("modelproperties2.qml"))); - //3 items, 3 warnings each + //3 items, 3 i each QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":13: ReferenceError: Can't find variable: modelData"); QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":13: ReferenceError: Can't find variable: modelData"); QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":13: ReferenceError: Can't find variable: modelData"); @@ -1789,6 +1790,49 @@ void tst_qquickvisualdatamodel::create() QCOMPARE(evaluate<bool>(delegate, "destroyed"), false); } + +void tst_qquickvisualdatamodel::incompleteModel() +{ + // VisualDataModel is first populated in componentComplete. Verify various functions are + // harmlessly ignored until then. + + QDeclarativeComponent component(&engine); + component.setData("import QtQuick 2.0\n VisualDataModel {}", QUrl::fromLocalFile(TESTDATA(""))); + + QScopedPointer<QObject> object(component.beginCreate(engine.rootContext())); + + QQuickVisualDataModel *model = qobject_cast<QQuickVisualDataModel *>(object.data()); + QVERIFY(model); + + QSignalSpy itemsSpy(model->items(), SIGNAL(countChanged())); + QSignalSpy persistedItemsSpy(model->items(), SIGNAL(countChanged())); + + evaluate<void>(model, "items.removeGroups(0, items.count, \"items\")"); + QCOMPARE(itemsSpy.count(), 0); + QCOMPARE(persistedItemsSpy.count(), 0); + + evaluate<void>(model, "items.setGroups(0, items.count, \"persistedItems\")"); + QCOMPARE(itemsSpy.count(), 0); + QCOMPARE(persistedItemsSpy.count(), 0); + + evaluate<void>(model, "items.addGroups(0, items.count, \"persistedItems\")"); + QCOMPARE(itemsSpy.count(), 0); + QCOMPARE(persistedItemsSpy.count(), 0); + + evaluate<void>(model, "items.remove(0, items.count)"); + QCOMPARE(itemsSpy.count(), 0); + QCOMPARE(persistedItemsSpy.count(), 0); + + evaluate<void>(model, "items.insert([ \"color\": \"blue\" ])"); + QCOMPARE(itemsSpy.count(), 0); + QCOMPARE(persistedItemsSpy.count(), 0); + + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML VisualDataGroup: get: index out of range"); + QVERIFY(evaluate<bool>(model, "items.get(0) === undefined")); + + component.completeCreate(); +} + template<typename T> T *tst_qquickvisualdatamodel::findItem(QQuickItem *parent, const QString &objectName, int index) { |