aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickstates
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-04-26 16:12:21 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-01 06:07:00 +0200
commit462edd23f953af6ce37d1c42400e2cb4443f5a24 (patch)
treeef505e16ad6e7a439a6217da191fdaac6d9eda3c /tests/auto/quick/qquickstates
parent7cecad76b6a8beb31c74111b986be0e67bb2e15c (diff)
More robust tracking of signal handler expression ownership.
Reference count the expressions, and improve testing. Change-Id: I810509eae1c7608b367e9ff5f7891a294667a692 Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquickstates')
-rw-r--r--tests/auto/quick/qquickstates/data/signalOverrideCrash4.qml22
-rw-r--r--tests/auto/quick/qquickstates/tst_qquickstates.cpp23
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;