diff options
author | Thomas Hartmann <Thomas.Hartmann@nokia.com> | 2010-09-02 15:44:27 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@nokia.com> | 2010-09-07 16:31:22 +0200 |
commit | 7d6f181523b702536aa2d5b856915d5261f02c15 (patch) | |
tree | 9c2d8c96f057bf03de7138c678ca27c1835c0c0f /tests | |
parent | 226e089d1834a07f966f5165633593d0f9015f6c (diff) |
QuickDesigner.tests: stress test for bindings in states
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp | 105 | ||||
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.h | 1 |
2 files changed, 105 insertions, 1 deletions
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index 09e3d0e6b8f..dc219322489 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -4720,7 +4720,110 @@ void tst_TestCore::testInstancesNotInScene() node1.destroy(); } -void tst_TestCore::testQmlModelStatesInvalidForRemovedNodes() +void TestCore::testInstancesBindingsInStatesStress() +{ + //This is a stress test to provoke a crash + for (int j=0;j<20;j++) { + QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7)); + QVERIFY(model.data()); + QScopedPointer<TestView> view(new TestView); + QVERIFY(view.data()); + model->attachView(view.data()); + + ModelNode node1 = view->createModelNode("Qt/Item", 4, 7); + node1.setId("node1"); + + view->rootModelNode().nodeListProperty("children").reparentHere(node1); + + ModelNode node2 = view->createModelNode("Qt/Rectangle", 4, 7); + node2.setId("node2"); + + ModelNode node3 = view->createModelNode("Qt/Rectangle", 4, 7); + node3.setId("node3"); + + node1.nodeListProperty("children").reparentHere(node2); + node1.nodeListProperty("children").reparentHere(node3); + + QmlItemNode(node1).states().addState("state1"); + QmlItemNode(node1).states().addState("state2"); + + QmlItemNode(node1).setVariantProperty("x", "100"); + QmlItemNode(node1).setVariantProperty("y", "100"); + + + for (int i=0;i<4;i++) { + view->setCurrentState(view->baseState()); + + QmlItemNode(node2).setBindingProperty("x", "parent.x + 10"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 110); + view->setCurrentState(QmlItemNode(node1).states().state("state1")); + QmlItemNode(node2).setBindingProperty("x", "parent.x + 20"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 120); + QmlItemNode(node2).setBindingProperty("y", "parent.x + 20"); + QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 120); + + view->setCurrentState(QmlItemNode(node1).states().state("state2")); + QmlItemNode(node2).setBindingProperty("x", "parent.x + 30"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 130); + QmlItemNode(node2).setBindingProperty("y", "parent.x + 30"); + QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 130); + QmlItemNode(node2).setBindingProperty("height", "this.is.no.proper.expression / 12 + 4"); + QmlItemNode(node2).setVariantProperty("height", 0); + + + for (int c=0;c<10;c++) { + view->setCurrentState(QmlItemNode(node1).states().state("state1")); + QmlItemNode(node2).setBindingProperty("x", "parent.x + 20"); + QmlItemNode(node2).setVariantProperty("x", "90"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 90); + QmlItemNode(node2).setBindingProperty("y", "parent.x + 20"); + QmlItemNode(node2).setVariantProperty("y", "90"); + view->setCurrentState(QmlItemNode(node1).states().state("state2")); + view->setCurrentState(view->baseState()); + view->setCurrentState(QmlItemNode(node1).states().state("state1")); + QCOMPARE(QmlItemNode(node2).instanceValue("y").toInt(), 90); + QmlItemNode(node2).setBindingProperty("width", "parent.x + 30"); + QCOMPARE(QmlItemNode(node2).instanceValue("width").toInt(), 130); + QmlItemNode(node2).setVariantProperty("width", "0"); + view->setCurrentState(QmlItemNode(node1).states().state("state2")); + view->setCurrentState(view->baseState()); + QmlItemNode(node1).setVariantProperty("x", "80"); + QmlItemNode(node1).setVariantProperty("y", "80"); + QmlItemNode(node1).setVariantProperty("x", "100"); + QmlItemNode(node1).setVariantProperty("y", "100"); + } + + QmlItemNode(node3).setBindingProperty("width", "parent.x + 30"); + QCOMPARE(QmlItemNode(node3).instanceValue("width").toInt(), 130); + + view->setCurrentState(view->baseState()); + QmlItemNode(node1).setVariantProperty("x", "80"); + QmlItemNode(node1).setVariantProperty("y", "80"); + + view->setCurrentState(QmlItemNode(node1).states().state("state2")); + + view->setCurrentState(QmlItemNode(node1).states().state("state1")); + QmlItemNode(node3).setVariantProperty("width", "90"); + + view->setCurrentState(QmlItemNode(node1).states().state("")); + view->setCurrentState(view->baseState()); + QVERIFY(view->currentState().isBaseState()); + + QmlItemNode(node1).setVariantProperty("x", "100"); + QmlItemNode(node1).setVariantProperty("y", "100"); + + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 110); + QmlItemNode(node2).setBindingProperty("x", "parent.x + 20"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 120); + QmlItemNode(node2).setVariantProperty("x", "80"); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 80); + view->setCurrentState(QmlItemNode(node1).states().state("state1")); + QCOMPARE(QmlItemNode(node2).instanceValue("x").toInt(), 90); + } + } +} + +void TestCore::testQmlModelStatesInvalidForRemovedNodes() { QScopedPointer<Model> model(Model::create("Qt/Rectangle", 4, 7)); QVERIFY(model.data()); diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h index 1ee76cd4973..6ed6091e189 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h @@ -149,6 +149,7 @@ private slots: void testInstancesStates(); void testInstancesIdResolution(); void testInstancesNotInScene(); + void testInstancesBindingsInStates(); // // integration tests |