diff options
Diffstat (limited to 'tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp')
| -rw-r--r-- | tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp b/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp index 9e2ba24969..cd2f752e4b 100644 --- a/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp +++ b/tests/auto/qml/qqmlanybinding/tst_qqmlanybinding.cpp @@ -5,6 +5,7 @@ #include <QtCore/QScopedPointer> #include <QtQml/private/qqmlanybinding_p.h> #include <QtQuickTestUtils/private/qmlutils_p.h> +#include <QtCore/private/qobject_p.h> #include "withbindable.h" class tst_qqmlanybinding : public QQmlDataTest @@ -18,6 +19,7 @@ private slots: void basicActions_data(); void basicActions(); void unboundQQmlPropertyBindingDoesNotCrash(); + void ofDynamicMetaObject(); }; tst_qqmlanybinding::tst_qqmlanybinding() @@ -127,6 +129,47 @@ void tst_qqmlanybinding::unboundQQmlPropertyBindingDoesNotCrash() QCOMPARE(prop.read(), 1); } +class QObjectDynamicMetaObject : public QDynamicMetaObjectData +{ +public: +#if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0) + const QMetaObject *toDynamicMetaObject(QObject *) const final + { + return &QObject::staticMetaObject; + } +#else + QMetaObject *toDynamicMetaObject(QObject *) final + { + return const_cast<QMetaObject *>(&QObject::staticMetaObject); + } +#endif + + int metaCall(QObject *o, QMetaObject::Call c, int id, void **argv) final + { + return o->qt_metacall(c, id, argv); + } +}; + +void tst_qqmlanybinding::ofDynamicMetaObject() +{ + QObject o; + const QQmlPropertyIndex objectNameIndex( + QObject::staticMetaObject.indexOfProperty("objectName")); + QObjectPrivate::get(&o)->metaObject = new QObjectDynamicMetaObject; + + QQmlAnyBinding a = QQmlAnyBinding::ofProperty(&o, objectNameIndex); + QVERIFY(!a); + + QPropertyBinding<QString> binding + = Qt::makePropertyBinding([]() { return QStringLiteral("foo"); }); + o.bindableObjectName().setBinding(binding); + QQmlAnyBinding b = QQmlAnyBinding::ofProperty(&o, objectNameIndex); + QVERIFY(b); + + QCOMPARE(QPropertyBindingPrivate::get(b.asUntypedPropertyBinding()), + QPropertyBindingPrivate::get(binding)); +} + QTEST_MAIN(tst_qqmlanybinding) #include "tst_qqmlanybinding.moc" |
