diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-07-15 10:35:24 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-07-25 16:29:36 +0200 |
commit | fcb40ff6d71f4561401e6b2bd4d7fc706fff8eee (patch) | |
tree | 942096e3c60e7d08349fa5c1491620e6101146f3 /tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | |
parent | 38149bff7c4b89b59f73f4f4d6d5bd1ce9dafbc1 (diff) |
qmlRegisterCustomExtendedType, qmlRegisterExtendedUncreatableType
There are cases in Qt3D where we'd like to be able to register uncreatable
extended types. The main use case is having an abstract class that has an
extension class so as to have a clean separation between the C++
and QML API. Implementations of the abstract can then be easily registered
to QML and rely on the extension class for QML specific properties.
The other feature we'll need in the near future is the ability to create
extended QML types that use a custom parser.
Two new type registration method were added to qqml.h to fulfill those
needs. Unit tests for those are present in qqmlecmascript and qqmllanguage.
Change-Id: I15b2cd791ffd36b537305af1873491c079d4094e
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 344645b9cd..d068584797 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -122,6 +122,8 @@ private slots: void selfDeletingBinding(); void extendedObjectPropertyLookup(); void extendedObjectPropertyLookup2(); + void uncreatableExtendedObjectFailureCheck(); + void extendedObjectPropertyLookup3(); void scriptErrors(); void functionErrors(); void propertyAssignmentErrors(); @@ -1833,6 +1835,38 @@ void tst_qqmlecmascript::extendedObjectPropertyLookup2() delete object; } + +/* +Test failure when trying to create and uncreatable extended type object. + */ +void tst_qqmlecmascript::uncreatableExtendedObjectFailureCheck() +{ + QQmlComponent component(&engine, testFileUrl("uncreatableExtendedObjectFailureCheck.qml")); + + QObject *object = component.create(); + QVERIFY(object == 0); +} + +/* +Test that an subclass of an uncreatable extended object contains all the required properties. + */ +void tst_qqmlecmascript::extendedObjectPropertyLookup3() +{ + QQmlComponent component(&engine, testFileUrl("extendedObjectPropertyLookup3.qml")); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QVariant returnValue; + QVERIFY(QMetaObject::invokeMethod(object, "getAbstractProperty", Q_RETURN_ARG(QVariant, returnValue))); + QCOMPARE(returnValue.toInt(), -1); + QVERIFY(QMetaObject::invokeMethod(object, "getImplementedProperty", Q_RETURN_ARG(QVariant, returnValue))); + QCOMPARE(returnValue.toInt(), 883); + QVERIFY(QMetaObject::invokeMethod(object, "getExtendedProperty", Q_RETURN_ARG(QVariant, returnValue))); + QCOMPARE(returnValue.toInt(), 42); + + delete object; +} /* Test file/lineNumbers for binding/Script errors. */ |