diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2025-09-22 08:57:53 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2025-09-23 09:43:33 +0200 |
| commit | 044d3d2cdb7ba825069b3d1302b96723cb75d6ca (patch) | |
| tree | 8778ced4a368c202108bbc7307eb10dd760e8907 /tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | |
| parent | 2ef3de7803b9a35f58dc1355d5d6ad986fff18fc (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.cpp | 49 |
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"); |
