Add test verifying that QObject-derived pointer is passed correctly.
authorMatthew Vogt <matthew.vogt@nokia.com>
Wed, 22 Feb 2012 06:12:26 +0000 (16:12 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 22 Feb 2012 07:16:48 +0000 (08:16 +0100)
Ensure that an object derived from QObject is correctly passed to
an invokable function from QML.

Change-Id: I71eefe8c480e1f1574804d05244b53f29c7fbf0d
Reviewed-by: Martin Jones <martin.jones@nokia.com>
tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp

diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml b/tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml
new file mode 100644 (file)
index 0000000..bf4ab6f
--- /dev/null
@@ -0,0 +1,17 @@
+import QtQuick 2.0
+import Qt.test 1.0
+
+MyQmlObject {
+    id: root
+    stringProperty: 'hello'
+    property var child
+
+    property bool result: false
+
+    Component.onCompleted: {
+        child = invokable.createMyQmlObject('goodbye');
+
+        result = (invokable.getStringProperty(root) == 'hello') &&
+                 (invokable.getStringProperty(child) == 'goodbye');
+    }
+}
index 354087d..d30766f 100644 (file)
@@ -235,6 +235,7 @@ private slots:
     void rewriteMultiLineStrings();
     void revisionErrors();
     void revision();
+    void invokableWithQObjectDerived();
 
     void automaticSemicolon();
     void unaryExpression();
@@ -6017,6 +6018,45 @@ void tst_qdeclarativeecmascript::tryStatement()
     }
 }
 
+class CppInvokableWithQObjectDerived : public QObject
+{
+    Q_OBJECT
+public:
+    CppInvokableWithQObjectDerived() {}
+    ~CppInvokableWithQObjectDerived() {}
+
+    Q_INVOKABLE MyQmlObject *createMyQmlObject(QString data)
+    {
+        MyQmlObject *obj = new MyQmlObject();
+        obj->setStringProperty(data);
+        return obj;
+    }
+
+    Q_INVOKABLE QString getStringProperty(MyQmlObject *obj)
+    {
+        return obj->stringProperty();
+    }
+};
+
+void tst_qdeclarativeecmascript::invokableWithQObjectDerived()
+{
+    CppInvokableWithQObjectDerived invokable;
+
+    {
+    QDeclarativeEngine engine;
+    engine.rootContext()->setContextProperty("invokable", &invokable);
+
+    QDeclarativeComponent component(&engine, testFileUrl("qobjectDerivedArgument.qml"));
+
+    QObject *object = component.create();
+
+    QVERIFY(object != 0);
+    QVERIFY(object->property("result").value<bool>() == true);
+
+    delete object;
+    }
+}
+
 QTEST_MAIN(tst_qdeclarativeecmascript)
 
 #include "tst_qdeclarativeecmascript.moc"