diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-11-25 16:09:38 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-25 08:10:20 +0100 |
commit | 850476b75d0857f2f64fa6eb82d39c22322368a7 (patch) | |
tree | 8cc97309d9c5d631b924fa339979c0e5b6633a55 /tests/auto/declarative | |
parent | 900137ea6a593f612e091cf629fc3a0ec929fb5f (diff) |
Fix crash calling VisualDataGroup.setGroups during initialization.
A VisualDataModel's meta type is constructed in componentComplete(),
avoid accessing it before then.
Change-Id: Ic9fdfa3c458d5da3014289b777f74df87aa97103
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/declarative')
-rw-r--r-- | tests/auto/declarative/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp | 46 |
1 files changed, 45 insertions, 1 deletions
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) { |