diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-04-27 15:03:17 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-04-28 09:55:02 +0200 |
commit | 1029b2b9f3d0ff88c0900fbfec2fac873aa6bcd4 (patch) | |
tree | ad4955abf0b8e1fabdd62cc2b9ffdcc0c582be2c /tests/auto/qml/qqmlpropertycache | |
parent | 135bc48ff69b438520f6e2b2f413578dc1bac9e6 (diff) |
PropertyCache: Fix resolution of forbidden QObject methods
Despite best intentions the code still hid methods of gadgets when those
were derived from other gadgets.
Pick-to: 5.15
Change-Id: I787300b2a22d6557608772d218e73b9af6f79652
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmlpropertycache')
-rw-r--r-- | tests/auto/qml/qqmlpropertycache/data/derivedGadgetMethod.qml | 7 | ||||
-rw-r--r-- | tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp | 76 |
2 files changed, 83 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlpropertycache/data/derivedGadgetMethod.qml b/tests/auto/qml/qqmlpropertycache/data/derivedGadgetMethod.qml new file mode 100644 index 0000000000..6f7f4da0d1 --- /dev/null +++ b/tests/auto/qml/qqmlpropertycache/data/derivedGadgetMethod.qml @@ -0,0 +1,7 @@ +import QtQml 2.0 +import Test.PropertyCache 1.0 + +GadgetUser { + baseString: base.stringValue() + derivedString: derived.stringValue() +} diff --git a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp index 956759668e..e885a26057 100644 --- a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp +++ b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp @@ -56,11 +56,73 @@ private slots: void metaObjectSize(); void metaObjectChecksum(); void metaObjectsForRootElements(); + void derivedGadgetMethod(); private: QQmlEngine engine; }; +class BaseGadget +{ + Q_GADGET + QML_ANONYMOUS +public: + Q_INVOKABLE QString stringValue() { return QLatin1String("base"); } +}; + +class DerivedGadget : public BaseGadget +{ + Q_GADGET + QML_ANONYMOUS +public: + Q_INVOKABLE QString stringValue() { return QLatin1String("derived"); } +}; + +class GadgetUser : public QObject +{ + Q_OBJECT + Q_PROPERTY(BaseGadget base READ base CONSTANT) + Q_PROPERTY(DerivedGadget derived READ derived CONSTANT) + Q_PROPERTY(QString baseString READ baseString WRITE setBaseString NOTIFY baseStringChanged) + Q_PROPERTY(QString derivedString READ derivedString WRITE setDerivedString NOTIFY derivedStringChanged) + QML_ELEMENT + +public: + BaseGadget base() const { return m_base; } + DerivedGadget derived() const { return m_derived; } + QString baseString() const { return m_baseString; } + QString derivedString() const { return m_derivedString; } + +public slots: + void setBaseString(QString baseString) + { + if (m_baseString == baseString) + return; + + m_baseString = baseString; + emit baseStringChanged(m_baseString); + } + + void setDerivedString(QString derivedString) + { + if (m_derivedString == derivedString) + return; + + m_derivedString = derivedString; + emit derivedStringChanged(m_derivedString); + } + +signals: + void baseStringChanged(QString baseString); + void derivedStringChanged(QString derivedString); + +private: + BaseGadget m_base; + DerivedGadget m_derived; + QString m_baseString; + QString m_derivedString; +}; + class BaseObject : public QObject { Q_OBJECT @@ -572,4 +634,18 @@ void tst_qqmlpropertycache::metaObjectsForRootElements() QCOMPARE(obj->property("result").toString(), QString::fromLatin1("good")); } +void tst_qqmlpropertycache::derivedGadgetMethod() +{ + qmlRegisterTypesAndRevisions<BaseGadget, DerivedGadget, GadgetUser>("Test.PropertyCache", 1); + QQmlEngine engine; + QQmlComponent c(&engine, testFileUrl("derivedGadgetMethod.qml")); + QVERIFY(c.isReady()); + QScopedPointer<QObject> obj(c.create()); + QVERIFY(!obj.isNull()); + GadgetUser *gadgetUser = qobject_cast<GadgetUser *>(obj.data()); + QVERIFY(gadgetUser); + QCOMPARE(gadgetUser->baseString(), QString::fromLatin1("base")); + QCOMPARE(gadgetUser->derivedString(), QString::fromLatin1("derived")); +} + QTEST_MAIN(tst_qqmlpropertycache) |