diff options
Diffstat (limited to 'tests/auto/quick/qquickstates')
-rw-r--r-- | tests/auto/quick/qquickstates/data/signalOverrideCrash4.qml | 22 | ||||
-rw-r--r-- | tests/auto/quick/qquickstates/tst_qquickstates.cpp | 23 |
2 files changed, 45 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickstates/data/signalOverrideCrash4.qml b/tests/auto/quick/qquickstates/data/signalOverrideCrash4.qml new file mode 100644 index 0000000000..705ad07715 --- /dev/null +++ b/tests/auto/quick/qquickstates/data/signalOverrideCrash4.qml @@ -0,0 +1,22 @@ +import QtQuick 2.0 + +Rectangle { + id: root + width: 400; height: 400 + property int someProp + + states: [ + State { + name: "state1" + PropertyChanges { target: root; onSomePropChanged: h1() } + }, + State { + name: "state2" + PropertyChanges { target: root; onSomePropChanged: h2() } + } + ] + + // non-default handlers + function h1() {} + function h2() {} +} diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp index 7fd8fc4498..1aca63a628 100644 --- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp +++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp @@ -112,6 +112,7 @@ private slots: void signalOverrideCrash(); void signalOverrideCrash2(); void signalOverrideCrash3(); + void signalOverrideCrash4(); void parentChange(); void parentChangeErrors(); void anchorChanges(); @@ -475,6 +476,8 @@ void tst_qquickstates::signalOverride() QQuickItemPrivate::get(rect)->setState("green"); rect->doSomething(); QCOMPARE(rect->color(),QColor("green")); + + delete rect; } { @@ -492,6 +495,8 @@ void tst_qquickstates::signalOverride() QCOMPARE(rect->color(),QColor("blue")); QCOMPARE(innerRect->color(),QColor("green")); QCOMPARE(innerRect->property("extendedColor").value<QColor>(),QColor("green")); + + delete rect; } } @@ -538,6 +543,24 @@ void tst_qquickstates::signalOverrideCrash3() delete rect; } +void tst_qquickstates::signalOverrideCrash4() +{ + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("signalOverrideCrash4.qml")); + QQuickRectangle *rect = qobject_cast<QQuickRectangle*>(c.create()); + QVERIFY(rect != 0); + + QQuickItemPrivate *rectPrivate = QQuickItemPrivate::get(rect); + + rectPrivate->setState("state1"); + rectPrivate->setState("state2"); + rectPrivate->setState("state1"); + rectPrivate->setState("state2"); + rectPrivate->setState(""); + + delete rect; +} + void tst_qquickstates::parentChange() { QQmlEngine engine; |