diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2024-02-01 16:14:47 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-02-08 00:18:13 +0100 |
commit | e516ef519b116f27d7ed5387275be27a4215a792 (patch) | |
tree | f1267aa1ea0757de09a67ab878ae2b4527d078ff /tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | |
parent | 0af12845a4ae16fecb5107ca73ab046ea5fa5693 (diff) |
QtQml: Double-check inline components when type-checking functions
Inline components are created speculatively. You can end up with a
QQmlType that's not backed by a compilation unit.
Pick-to: 6.7 6.6
Fixes: QTBUG-120506
Change-Id: Ie12f0d503ae8d8d238346948981803c1c07e8515
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp')
-rw-r--r-- | tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp index 66246b7a49..ec906e61df 100644 --- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp +++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp @@ -443,6 +443,7 @@ private slots: void ambiguousComponents(); void writeNumberToEnumAlias(); + void badInlineComponentAnnotation(); private: QQmlEngine engine; @@ -8512,6 +8513,39 @@ void tst_qqmllanguage::writeNumberToEnumAlias() QCOMPARE(o->property("strokeStyle").toInt(), 1); } +void tst_qqmllanguage::badInlineComponentAnnotation() +{ + QQmlEngine engine; + const QUrl url = testFileUrl("badICAnnotation.qml"); + QQmlComponent c(&engine, testFileUrl("badICAnnotation.qml")); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + + QTest::ignoreMessage( + QtCriticalMsg, + qPrintable(url.toString() + ":20: 5 should be coerced to void because the function " + "called is insufficiently annotated. The original " + "value is retained. This will change in a future " + "version of Qt.")); + QTest::ignoreMessage( + QtCriticalMsg, + QRegularExpression(":22: IC\\([^\\)]+\\) should be coerced to void because the " + "function called is insufficiently annotated. The original " + "value is retained. This will change in a future version of " + "Qt\\.")); + + QScopedPointer<QObject> o(c.create()); + QVERIFY(!o.isNull()); + + QCOMPARE(o->property("a").toInt(), 5); + + QObject *ic = o->property("ic").value<QObject *>(); + QVERIFY(ic); + + QCOMPARE(o->property("b").value<QObject *>(), ic); + QCOMPARE(o->property("c").value<QObject *>(), ic); + QCOMPARE(o->property("d").value<QObject *>(), nullptr); +} + QTEST_MAIN(tst_qqmllanguage) #include "tst_qqmllanguage.moc" |