aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2021-02-03 12:06:33 +0100
committerUlf Hermann <ulf.hermann@qt.io>2021-02-19 12:14:00 +0000
commitbf8888971732dbd0012eadc53cddada59bb17b2e (patch)
tree75d1fb001632a78aa7ef2bd05fd66c838743cbaa /tests/auto/qml
parent39a214773d554a1a03b49a7ab08b0a60a59c8279 (diff)
qmllint: Fix segmentation fault
Change-Id: Ie04ad4221b25628687c2575facf90488b83d21bf Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 5fb34b67b810ca284c216009925f4f38220c4510)
Diffstat (limited to 'tests/auto/qml')
-rw-r--r--tests/auto/qml/qmllint/data/SegFault.bad.qml6
-rw-r--r--tests/auto/qml/qmllint/data/SegFault.qml6
-rw-r--r--tests/auto/qml/qmllint/tst_qmllint.cpp10
3 files changed, 22 insertions, 0 deletions
diff --git a/tests/auto/qml/qmllint/data/SegFault.bad.qml b/tests/auto/qml/qmllint/data/SegFault.bad.qml
new file mode 100644
index 0000000000..c31777e7c8
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/SegFault.bad.qml
@@ -0,0 +1,6 @@
+import QtQuick as T
+T.Item {
+ T.Rectangle {
+ property int length: parent.T.Screen.foobar
+ }
+}
diff --git a/tests/auto/qml/qmllint/data/SegFault.qml b/tests/auto/qml/qmllint/data/SegFault.qml
new file mode 100644
index 0000000000..c66ad472f1
--- /dev/null
+++ b/tests/auto/qml/qmllint/data/SegFault.qml
@@ -0,0 +1,6 @@
+import QtQuick as T
+T.Item {
+ T.Rectangle {
+ property int length: parent.T.Screen.pixelDensity
+ }
+}
diff --git a/tests/auto/qml/qmllint/tst_qmllint.cpp b/tests/auto/qml/qmllint/tst_qmllint.cpp
index 12b8f5619f..54e0adee51 100644
--- a/tests/auto/qml/qmllint/tst_qmllint.cpp
+++ b/tests/auto/qml/qmllint/tst_qmllint.cpp
@@ -277,6 +277,12 @@ void TestQmllint::dirtyQmlCode_data()
<< QStringLiteral("brokenNamespace.qml")
<< QString("Warning: type not found in namespace at %1:4:17")
<< QString();
+ // TODO: This fails but currently for the wrong reasons, make sure to add a warning message requirement
+ // once it does fail properly in order to avoid regressions.
+ QTest::newRow("segFault (bad)")
+ << QStringLiteral("SegFault.bad.qml")
+ << QString()
+ << QString();
QTest::newRow("VariableUsedBeforeDeclaration")
<< QStringLiteral("useBeforeDeclaration.qml")
<< QStringLiteral("Variable \"argq\" is used before its declaration at 5:9. "
@@ -357,12 +363,14 @@ void TestQmllint::cleanQmlCode_data()
QTest::newRow("jsmoduleimport") << QStringLiteral("jsmoduleimport.qml");
QTest::newRow("overridescript") << QStringLiteral("overridescript.qml");
QTest::newRow("multiExtension") << QStringLiteral("multiExtension.qml");
+ QTest::newRow("segFault") << QStringLiteral("SegFault.qml");
}
void TestQmllint::cleanQmlCode()
{
QFETCH(QString, filename);
const QString warnings = runQmllint(filename, true);
+ QEXPECT_FAIL("segFault", "This property exists and should not produce a warning", Abort);
QVERIFY2(warnings.isEmpty(), qPrintable(warnings));
}
@@ -407,6 +415,8 @@ QString TestQmllint::runQmllint(const QString &fileToLint, bool shouldSucceed, c
return runQmllint(fileToLint, [&](QProcess &process) {
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+
+ QEXPECT_FAIL("segFault", "This property exists and should not produce a warning", Abort);
if (shouldSucceed)
QCOMPARE(process.exitCode(), 0);
else