aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2019-05-09 12:38:22 +0200
committerMichal Klocek <michal.klocek@qt.io>2019-05-09 11:13:00 +0000
commit375b8d0fbecb1acf4596b5103c12fac2b592a927 (patch)
tree5144a82b63122ac28751ff3e14c169a18af3613f
parent17237efaefabe924599abe00e92d8b54032d7915 (diff)
Add test for cached getter lookup
Task-number: QTBUG-75335 Change-Id: I14480018f2429eb5ec744a50640642eee09ce3f3 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--tests/auto/qml/qqmlengine/data/CachedGetterLookup.qml20
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp11
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlengine/data/CachedGetterLookup.qml b/tests/auto/qml/qqmlengine/data/CachedGetterLookup.qml
new file mode 100644
index 0000000000..1a2a7ff341
--- /dev/null
+++ b/tests/auto/qml/qqmlengine/data/CachedGetterLookup.qml
@@ -0,0 +1,20 @@
+import QtQuick 2.12
+
+QtObject {
+ Component.onCompleted: {
+ // create getter
+ var getFoo = function(o) { return o.foo; }
+
+ // create two diffrent shapes for x,y
+ var x = { foo:1 , bar:2 }
+ var y = { bar:2 , foo:1 }
+
+ // initialize inline cache with getFoo
+ getFoo(x);
+ getFoo(y);
+
+ // hit getter lookup with string "crash"
+ getFoo('crash');
+ }
+}
+
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index b9cb6b70d2..0cb6753020 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -81,6 +81,7 @@ private slots:
void cppSignalAndEval();
void singletonInstance();
void aggressiveGc();
+ void cachedGetterLookup_qtbug_75335();
public slots:
QObject *createAQObjectForOwnershipTest ()
@@ -1056,6 +1057,16 @@ void tst_qqmlengine::aggressiveGc()
qputenv("QV4_MM_AGGRESSIVE_GC", origAggressiveGc);
}
+void tst_qqmlengine::cachedGetterLookup_qtbug_75335()
+{
+ QQmlEngine engine;
+ const QUrl testUrl = testFileUrl("CachedGetterLookup.qml");
+ QQmlComponent component(&engine, testUrl);
+ QVERIFY(component.isReady());
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object != nullptr);
+}
+
QTEST_MAIN(tst_qqmlengine)
#include "tst_qqmlengine.moc"