aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-11-30 14:39:48 +0100
committerUlf Hermann <ulf.hermann@qt.io>2023-01-03 13:01:26 +0100
commit0cee1a4942764f2a7829606c43681d845817d01b (patch)
tree1d486094a3b554ca249d06d5e6206768b862d826 /tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
parent6caa94691ffb5e295fac1cc10c5b2ac19a4376bd (diff)
Qml: Don't crash when as-casting to type with errors
Such types don't have a compilation unit, but we still know their names. Fixes: QTBUG-98792 Change-Id: I2db8dea3a5a02ec1492f7f7a054fd3ad4c6ad69a Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> (cherry picked from commit e0cd201e91ae64b9c03e0128cd17656b00611fbb)
Diffstat (limited to 'tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp')
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index ac6634290a..92d0069ce4 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -343,6 +343,8 @@ private slots:
void bindingAliasToComponentUrl();
void badGroupedProperty();
+ void objectAsBroken();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -5951,6 +5953,24 @@ void tst_qqmllanguage::badGroupedProperty()
.arg(url.toString()));
}
+void tst_qqmllanguage::objectAsBroken()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("asBroken.qml"));
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+ QVariant selfAsBroken = o->property("selfAsBroken");
+ QVERIFY(selfAsBroken.isValid());
+
+ // 5.15 doesn't enforce type annotation. So the "as" cast succeeds even though
+ // the target type cannot be resolved.
+ QCOMPARE(selfAsBroken.value<QObject *>(), o.data());
+
+ QQmlComponent b(&engine, testFileUrl("Broken.qml"));
+ QVERIFY(b.isError());
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"