diff options
Diffstat (limited to 'tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp')
-rw-r--r-- | tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp index f6869ab300..d14e0b76a4 100644 --- a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp +++ b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp @@ -1563,11 +1563,53 @@ struct SingleRequiredProperty : QObject int i = 42; }; + +struct SingleRequiredPropertyDynamic : QObject +{ + Q_OBJECT + Q_PROPERTY(int i MEMBER i REQUIRED) + + int i = 42; + + class QObjectDynamicMetaObject : public QDynamicMetaObjectData + { + public: + #if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) + const QMetaObject *toDynamicMetaObject(QObject *) const final + { + return &SingleRequiredPropertyDynamic::staticMetaObject; + } + #else + QMetaObject *toDynamicMetaObject(QObject *) final + { + return const_cast<QMetaObject *>(&SingleRequiredPropertyDynamic::staticMetaObject); + } + #endif + int metaCall(QObject *o, QMetaObject::Call c, int id, void **argv) final + { + return o->qt_metacall(c, id, argv); + } + }; + +public: + SingleRequiredPropertyDynamic() { + auto priv = QObjectPrivate::get(this); + priv->metaObject = new QObjectDynamicMetaObject; + } + + ~SingleRequiredPropertyDynamic() { + auto priv = QObjectPrivate::get(this); + delete priv->metaObject; + priv->metaObject = nullptr ; + } +}; + void tst_qqmlcomponent::loadFromModuleRequired() { QQmlEngine engine; qmlRegisterType<SingleRequiredProperty>("qqmlcomponenttest", 1, 0, "SingleRequiredProperty"); + qmlRegisterType<SingleRequiredPropertyDynamic>("qqmlcomponenttest", 1, 0, "SingleRequiredPropertyDynamic"); const QString error = QStringLiteral("Required property i was not initialized"); { QQmlComponent component(&engine, "qqmlcomponenttest", "SingleRequiredProperty"); @@ -1591,6 +1633,13 @@ void tst_qqmlcomponent::loadFromModuleRequired() QVERIFY(component.isError()); QCOMPARE(component.errorString(), qPrintable(":-1 " + error + "\n")); } + { + QQmlComponent component(&engine, "qqmlcomponenttest", "SingleRequiredPropertyDynamic"); + QVERIFY2(!component.isError(), qPrintable(component.errorString())); + QScopedPointer<QObject> root(component.create()); + QEXPECT_FAIL("", "Can't check required properties when there's a dynamic metaobject", Continue); + QVERIFY(!root); + } } void tst_qqmlcomponent::loadUrlRequired() |