From 136f2352f67eedc12a719aa239594a204c3ee5a7 Mon Sep 17 00:00:00 2001 From: Matthew Vogt Date: Wed, 22 Feb 2012 16:12:26 +1000 Subject: Add test verifying that QObject-derived pointer is passed correctly. Ensure that an object derived from QObject is correctly passed to an invokable function from QML. Change-Id: I71eefe8c480e1f1574804d05244b53f29c7fbf0d Reviewed-by: Martin Jones --- .../data/qobjectDerivedArgument.qml | 17 +++++++++ .../tst_qdeclarativeecmascript.cpp | 40 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml (limited to 'tests/auto') diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml b/tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml new file mode 100644 index 0000000000..bf4ab6fd7a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml @@ -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'); + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 354087da8a..d30766f982 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -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() == true); + + delete object; + } +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" -- cgit v1.2.3