aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmllanguage
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-01-14 17:40:50 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-01-15 10:18:36 +0100
commitc5a8dc153b3d3218360184837b098ba09018d982 (patch)
treeab80963e58c4593705cb6a67e441433509029079 /tests/auto/qml/qqmllanguage
parenta07251df7c1e6158cb323e60cb08e687ead15b19 (diff)
Allow overriding type registrations
Previously if the same revision of the same type was registered multiple times, the first registration would dominate. Now, the last one does. [ChangeLog] If you register the same revision of the same type multiple times, the last registration is the one QML will use. This allows you to override qmlRegisterSingleton*() calls, for example in order to register a singleton instance for a type tagged with QML_SINGLETON. Task-number: QTBUG-79331 Change-Id: I32a2acabc89af6faa89d8ccb6380a473bc8b8ddd Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmllanguage')
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.cpp1
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.h13
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp24
3 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/testtypes.cpp b/tests/auto/qml/qqmllanguage/testtypes.cpp
index 462745eb93..0ddb1b1491 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.cpp
+++ b/tests/auto/qml/qqmllanguage/testtypes.cpp
@@ -120,6 +120,7 @@ void registerTypes()
qmlRegisterType<DeferredProperties>("Test", 1, 0, "DeferredProperties");
qmlRegisterTypesAndRevisions<Extended, Foreign, ForeignExtended>("Test", 1);
+ qmlRegisterTypesAndRevisions<BareSingleton>("Test", 1);
}
QVariant myCustomVariantTypeConverter(const QString &data)
diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h
index bfbd3e66f5..a7410e190b 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.h
+++ b/tests/auto/qml/qqmllanguage/testtypes.h
@@ -1455,6 +1455,19 @@ class ForeignExtended
QML_EXTENDED(Extension)
};
+class BareSingleton : public QObject
+{
+ Q_OBJECT
+ QML_SINGLETON
+ QML_ELEMENT
+
+public:
+ BareSingleton(QObject *parent = nullptr) : QObject(parent)
+ {
+ setObjectName("statically registered");
+ }
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index fca398d7b2..7b4662a5cd 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -310,6 +310,7 @@ private slots:
void selfReferencingSingleton();
void listContainingDeletedObject();
+ void overrideSingleton();
private:
QQmlEngine engine;
@@ -5375,6 +5376,29 @@ void tst_qqmllanguage::listContainingDeletedObject()
}
+void tst_qqmllanguage::overrideSingleton()
+{
+ auto check = [](const QString &name) {
+ const QByteArray testQml = "import Test 1.0\n"
+ "import QtQml 2.0\n"
+ "QtObject { objectName: BareSingleton.objectName }";
+ QQmlEngine engine;
+ QQmlComponent component(&engine, nullptr);
+ component.setData(testQml, QUrl());
+ QVERIFY(component.isReady());
+ QScopedPointer<QObject> obj(component.create());
+ QCOMPARE(obj->objectName(), name);
+ };
+
+ check("statically registered");
+
+ BareSingleton singleton;
+ singleton.setObjectName("dynamically registered");
+ qmlRegisterSingletonInstance("Test", 1, 0, "BareSingleton", &singleton);
+
+ check("dynamically registered");
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"