aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-01-07 16:03:03 +0100
committerUlf Hermann <ulf.hermann@qt.io>2021-01-12 14:12:39 +0100
commit1390891709236a2889d8afaeb00e1571767f480b (patch)
tree24b310fd9d4b3dd747f751f8ea2d340392e33645 /tests
parent4c67ae2dd9a49348ed5b2d733a60ed0b06c5d203 (diff)
QJSManagedValue: Allow retrieving and instantiating JS metatypes
... a.k.a InternalClass. This is a faster way of creating multiple similar objects, compared to a sequence of setProperty() calls. Change-Id: Iecc8c581e50b9062895dae9500ffe2482d88028e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp37
-rw-r--r--tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h1
2 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp
index d245a034bb..75d3ccc12d 100644
--- a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp
+++ b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp
@@ -1785,4 +1785,41 @@ void tst_QJSManagedValue::stringByIndex()
QVERIFY(str.property(506).isUndefined());
}
+void tst_QJSManagedValue::jsMetaTypes()
+{
+ QJSEngine engine;
+ QJSManagedValue obj(engine.newObject(), &engine);
+
+ QJSManagedValue emptyMetaType = obj.jsMetaType();
+ QVERIFY(emptyMetaType.jsMetaMembers().isEmpty());
+
+ QJSManagedValue emptyObj = emptyMetaType.jsMetaInstantiate();
+ QVERIFY(emptyObj.isObject());
+
+ obj.setProperty("a", 1);
+ obj.setProperty("b", "foo");
+ obj.setProperty("llala", true);
+ obj.setProperty("ccc", QJSValue(std::move(emptyObj)));
+
+ const QStringList expectedMembers = { "a", "b", "llala", "ccc" };
+
+ QJSManagedValue populatedMetaType = obj.jsMetaType();
+ QCOMPARE(populatedMetaType.jsMetaMembers(), expectedMembers);
+
+ QJSManagedValue populatedObj = populatedMetaType.jsMetaInstantiate(
+ {"bar", 11, QJSValue(QJSValue::NullValue), 17, "ignored"});
+ QVERIFY(populatedObj.isObject());
+ QCOMPARE(populatedObj.property("a").toString(), QStringLiteral("bar"));
+ QCOMPARE(populatedObj.property("b").toInt(), 11);
+ QVERIFY(populatedObj.property("llala").isNull());
+ QCOMPARE(populatedObj.property("ccc").toInt(), 17);
+
+ QJSManagedValue halfPopulated = populatedMetaType.jsMetaInstantiate({"one", 111});
+ QVERIFY(halfPopulated.isObject());
+ QCOMPARE(halfPopulated.property("a").toString(), QStringLiteral("one"));
+ QCOMPARE(halfPopulated.property("b").toInt(), 111);
+ QVERIFY(halfPopulated.property("llala").isUndefined());
+ QVERIFY(halfPopulated.property("ccc").isUndefined());
+}
+
QTEST_MAIN(tst_QJSManagedValue)
diff --git a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h
index 041aae56aa..ea0d49589d 100644
--- a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h
+++ b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h
@@ -108,6 +108,7 @@ private Q_SLOTS:
void stringAndUrl();
void jsFunctionInVariant();
void stringByIndex();
+ void jsMetaTypes();
private:
void newEngine() { engine.reset(new QJSEngine()); }