aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2025-09-22 08:57:53 +0200
committerUlf Hermann <ulf.hermann@qt.io>2025-09-23 09:43:33 +0200
commit044d3d2cdb7ba825069b3d1302b96723cb75d6ca (patch)
tree8778ced4a368c202108bbc7307eb10dd760e8907 /tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
parent2ef3de7803b9a35f58dc1355d5d6ad986fff18fc (diff)
QmlCompiler: Don't adjust the same conversion multiple times
The same conversion can re-surface in multiple places in the byte code by virtue of being stored and loaded unchanged. If we've already adjusted it, we don't need to do it again. Pick-to: 6.10 Fixes: QTBUG-140415 Change-Id: Ic1e7e90af49f0ee9440a9c37abd4ab8ee0fdbe3e Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io> Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Diffstat (limited to 'tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp')
-rw-r--r--tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
index d8a90309bb..c4c3846513 100644
--- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
+++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
@@ -198,6 +198,7 @@ private slots:
void methodOnListLookup();
void methods();
void modulePrefix();
+ void multiAdjust();
void multiDirectory_data();
void multiDirectory();
void multiForeign();
@@ -4042,6 +4043,54 @@ void tst_QmlCppCodegen::modulePrefix()
QCOMPARE(rootObject->property("baz").toString(), QStringLiteral("ItIsTheSingleton"));
}
+void tst_QmlCppCodegen::multiAdjust()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/multiAdjust.qml"_s));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+
+ QScopedPointer<QObject> rootObject(component.create());
+ QVERIFY(rootObject);
+
+ QCOMPARE(rootObject->property("calledFoo"), 0);
+ QCOMPARE(rootObject->property("calledBar"), 0);
+
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left));
+ QCOMPARE(rootObject->property("calledFoo"), 1);
+ QCOMPARE(rootObject->property("calledBar"), 0);
+
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right));
+ QCOMPARE(rootObject->property("calledFoo"), 2);
+ QCOMPARE(rootObject->property("calledBar"), 1);
+
+ rootObject->setProperty("a", 3);
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left));
+ QCOMPARE(rootObject->property("calledFoo"), 2);
+ QCOMPARE(rootObject->property("calledBar"), 1);
+
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right));
+ QCOMPARE(rootObject->property("calledFoo"), 2);
+ QCOMPARE(rootObject->property("calledBar"), 2);
+
+ rootObject->setObjectName("a");
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left));
+ QCOMPARE(rootObject->property("calledFoo"), 2);
+ QCOMPARE(rootObject->property("calledBar"), 2);
+
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right));
+ QCOMPARE(rootObject->property("calledFoo"), 2);
+ QCOMPARE(rootObject->property("calledBar"), 2);
+
+ rootObject->setProperty("a", 1);
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Left));
+ QCOMPARE(rootObject->property("calledFoo"), 3);
+ QCOMPARE(rootObject->property("calledBar"), 2);
+
+ QMetaObject::invokeMethod(rootObject.data(), "event", Q_ARG(int, Qt::Key_Right));
+ QCOMPARE(rootObject->property("calledFoo"), 4);
+ QCOMPARE(rootObject->property("calledBar"), 2);
+}
+
void tst_QmlCppCodegen::multiDirectory_data()
{
QTest::addColumn<QUrl>("url");