summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/declarative/valuetypes/data/deletedObject.js13
-rw-r--r--tests/auto/declarative/valuetypes/data/deletedObject.qml12
-rw-r--r--tests/auto/declarative/valuetypes/data/variantCopy.qml13
-rw-r--r--tests/auto/declarative/valuetypes/tst_valuetypes.cpp33
4 files changed, 71 insertions, 0 deletions
diff --git a/tests/auto/declarative/valuetypes/data/deletedObject.js b/tests/auto/declarative/valuetypes/data/deletedObject.js
new file mode 100644
index 0000000..f554a0f
--- /dev/null
+++ b/tests/auto/declarative/valuetypes/data/deletedObject.js
@@ -0,0 +1,13 @@
+var savedReference;
+
+function startup()
+{
+ savedReference = object.rect;
+ print("Test: " + savedReference.x);
+}
+
+function afterDelete()
+{
+ print("Test: " + savedReference.x);
+}
+
diff --git a/tests/auto/declarative/valuetypes/data/deletedObject.qml b/tests/auto/declarative/valuetypes/data/deletedObject.qml
new file mode 100644
index 0000000..05459f4
--- /dev/null
+++ b/tests/auto/declarative/valuetypes/data/deletedObject.qml
@@ -0,0 +1,12 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ property var object
+
+ Script { source: "deletedObject.js" }
+
+ object: MyTypeObject {}
+ Component.onCompleted: startup()
+ onRunScript: afterDelete()
+}
diff --git a/tests/auto/declarative/valuetypes/data/variantCopy.qml b/tests/auto/declarative/valuetypes/data/variantCopy.qml
new file mode 100644
index 0000000..691a56c
--- /dev/null
+++ b/tests/auto/declarative/valuetypes/data/variantCopy.qml
@@ -0,0 +1,13 @@
+import Test 1.0
+
+MyTypeObject {
+ property var object
+ object: MyTypeObject {
+ rect.x: 19
+ rect.y: 33
+ rect.width: 5
+ rect.height: 99
+ }
+
+ rect: object.rect
+}
diff --git a/tests/auto/declarative/valuetypes/tst_valuetypes.cpp b/tests/auto/declarative/valuetypes/tst_valuetypes.cpp
index d09bdf5..9821a01 100644
--- a/tests/auto/declarative/valuetypes/tst_valuetypes.cpp
+++ b/tests/auto/declarative/valuetypes/tst_valuetypes.cpp
@@ -70,6 +70,8 @@ private slots:
void valueSources();
void valueInterceptors();
void bindingConflict();
+ void deletedObject();
+ void variantCopy();
void cppClasses();
private:
@@ -503,6 +505,37 @@ void tst_valuetypes::bindingConflict()
delete t; \
}
+// Test that accessing a reference to a valuetype after the owning object is deleted
+// doesn't crash
+void tst_valuetypes::deletedObject()
+{
+ QmlComponent component(&engine, TEST_FILE("deletedObject.qml"));
+ QTest::ignoreMessage(QtDebugMsg, "Test: 2");
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QObject *dObject = qvariant_cast<QObject *>(object->property("object"));
+ QVERIFY(dObject != 0);
+ delete dObject;
+
+ QTest::ignoreMessage(QtDebugMsg, "Test: undefined");
+ object->emitRunScript();
+
+ delete object;
+}
+
+// Test that value types can be assigned to another value type property
+void tst_valuetypes::variantCopy()
+{
+ QmlComponent component(&engine, TEST_FILE("variantCopy.qml"));
+ MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->rect(), QRect(19, 33, 5, 99));
+
+ delete object;
+}
+
// Test that the value type classes can be used manually
void tst_valuetypes::cppClasses()
{