From bce122040d2df5ae650e6de17d41568f1ba7c184 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Fri, 6 Nov 2009 12:11:03 +1000 Subject: More valuetype tests --- .../declarative/valuetypes/data/deletedObject.js | 13 +++++++++ .../declarative/valuetypes/data/deletedObject.qml | 12 ++++++++ .../declarative/valuetypes/data/variantCopy.qml | 13 +++++++++ .../auto/declarative/valuetypes/tst_valuetypes.cpp | 33 ++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 tests/auto/declarative/valuetypes/data/deletedObject.js create mode 100644 tests/auto/declarative/valuetypes/data/deletedObject.qml create mode 100644 tests/auto/declarative/valuetypes/data/variantCopy.qml 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(component.create()); + QVERIFY(object != 0); + + QObject *dObject = qvariant_cast(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(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() { -- cgit v0.12