aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2023-07-24 11:02:09 +0300
committerIvan Komissarov <ABBAPOH@gmail.com>2023-08-29 10:23:33 +0000
commitf19e6751987c54ee5cb16cfa144c82f4fd36dc73 (patch)
treedb451cebe95b37fce9cab67d9e93769e6ca22f11 /tests/auto
parentcd44045e4c48a9a4397a4de1ff1707eace6d6563 (diff)
probes: cache map variants
Introduce a StoredVariantValue that is saved in Probe items. Only QVariantMaps/Lists are stored since they can contain potentially huge objects (e.g. info plists in XCode). Cached values are now "frozen" so that users won't acceidentally modify them. Bundle module is updated accordingly to avoid mutating stored objects. This saves about 7s when resolving QtC on Mac. Change-Id: I0dd134f95105b1e4cf16e4320819db81a1c1e9a7 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/language/testdata/erroneous/frozen-object-list.qbs17
-rw-r--r--tests/auto/language/testdata/erroneous/frozen-object.qbs18
-rw-r--r--tests/auto/language/tst_language.cpp5
3 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/language/testdata/erroneous/frozen-object-list.qbs b/tests/auto/language/testdata/erroneous/frozen-object-list.qbs
new file mode 100644
index 000000000..8bbd2b413
--- /dev/null
+++ b/tests/auto/language/testdata/erroneous/frozen-object-list.qbs
@@ -0,0 +1,17 @@
+
+Product {
+ Probe {
+ id: probe
+ property varList output
+ configure: {
+ output = [{"key": "value"}];
+ found = true;
+ }
+ }
+
+ property var test: {
+ var result = probe.output;
+ result.push({});
+ return result;
+ }
+}
diff --git a/tests/auto/language/testdata/erroneous/frozen-object.qbs b/tests/auto/language/testdata/erroneous/frozen-object.qbs
new file mode 100644
index 000000000..0f891d04b
--- /dev/null
+++ b/tests/auto/language/testdata/erroneous/frozen-object.qbs
@@ -0,0 +1,18 @@
+
+Product {
+ Probe {
+ id: probe
+ property var output
+ configure: {
+ output = {"key": "value"}
+ found = true
+ }
+ }
+
+ property var test: {
+ "use strict"
+ var result = probe.output;
+ result.key = "newValue";
+ return result;
+ }
+}
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index e945a8d3a..9b8506d84 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -186,6 +186,9 @@ TopLevelProjectPtr TestLanguage::resolveProject(const char *relProjectFilePath)
void TestLanguage::init()
{
+ // clear caches, otherwise StoredVariantValues may end up being at the same address
+ // as the destroyed value
+ m_engine->reset();
m_logSink->setLogLevel(LoggerInfo);
defaultParameters = {};
defaultParameters.setBuildRoot(m_tempDir.path() + "/buildroot");
@@ -1013,6 +1016,8 @@ void TestLanguage::erroneousFiles_data()
<< "invalid-references.qbs:2:17.*Cannot open '.*nosuchproject.qbs'";
QTest::newRow("missing-js-file")
<< "missing-js-file-module.qbs.*Cannot open '.*javascriptfile.js'";
+ QTest::newRow("frozen-object") << "'key' is read-only";
+ QTest::newRow("frozen-object-list") << "object is not extensible";
}
void TestLanguage::erroneousFiles()