diff options
-rw-r--r-- | tests/auto/declarative/qdeclarativeecmascript/data/qobjectDerivedArgument.qml | 17 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 40 |
2 files changed, 57 insertions, 0 deletions
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<bool>() == true); + + delete object; + } +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" |