aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlpropertycache
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-04-27 15:03:17 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-04-28 09:55:02 +0200
commit1029b2b9f3d0ff88c0900fbfec2fac873aa6bcd4 (patch)
treead4955abf0b8e1fabdd62cc2b9ffdcc0c582be2c /tests/auto/qml/qqmlpropertycache
parent135bc48ff69b438520f6e2b2f413578dc1bac9e6 (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.qml7
-rw-r--r--tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp76
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)