aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-11-06 09:36:28 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-11-06 08:52:29 +0000
commit38715491eef958be049b15b37276fcb708738a4b (patch)
tree90e963cd725f3024788f2765d5994c0f0ac1e13d
parent1202dd60e6e40af9cfae7cb09c17ee418fa5ada4 (diff)
Fix handling of empty JS files
We would crash on those. Change-Id: I06ddfacfcea53d7a65cbd30a1b697cf09e28b82d Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/lib/corelib/language/scriptimporter.cpp3
-rw-r--r--tests/auto/language/testdata/empty-js-file.js0
-rw-r--r--tests/auto/language/testdata/empty-js-file.qbs4
-rw-r--r--tests/auto/language/tst_language.cpp17
-rw-r--r--tests/auto/language/tst_language.h1
5 files changed, 24 insertions, 1 deletions
diff --git a/src/lib/corelib/language/scriptimporter.cpp b/src/lib/corelib/language/scriptimporter.cpp
index 9b925004f..f8c2c46c7 100644
--- a/src/lib/corelib/language/scriptimporter.cpp
+++ b/src/lib/corelib/language/scriptimporter.cpp
@@ -60,7 +60,8 @@ public:
m_first = true;
m_barrier = false;
m_suffix += QLatin1String("\nreturn {");
- node->accept(this);
+ if (node)
+ node->accept(this);
m_suffix += QLatin1String("}})()");
}
diff --git a/tests/auto/language/testdata/empty-js-file.js b/tests/auto/language/testdata/empty-js-file.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/language/testdata/empty-js-file.js
diff --git a/tests/auto/language/testdata/empty-js-file.qbs b/tests/auto/language/testdata/empty-js-file.qbs
new file mode 100644
index 000000000..405a657c3
--- /dev/null
+++ b/tests/auto/language/testdata/empty-js-file.qbs
@@ -0,0 +1,4 @@
+import "empty-js-file.js" as Empty
+
+Product {
+}
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index 0c6e1f48d..462a3e2af 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -553,6 +553,23 @@ void TestLanguage::derivedSubProject()
QCOMPARE(exceptionCaught, false);
}
+void TestLanguage::emptyJsFile()
+{
+ bool exceptionCaught = false;
+ try {
+ SetupProjectParameters params = defaultParameters;
+ params.setProjectFilePath(testProject("empty-js-file.qbs"));
+ const TopLevelProjectPtr project = loader->loadProject(params);
+ QVERIFY(!!project);
+ const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
+ QCOMPARE(products.count(), 1);
+ } catch (const ErrorInfo &e) {
+ exceptionCaught = true;
+ qDebug() << e.toString();
+ }
+ QCOMPARE(exceptionCaught, false);
+}
+
void TestLanguage::enumerateProjectProperties()
{
bool exceptionCaught = false;
diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h
index 9cf216360..46ae657b3 100644
--- a/tests/auto/language/tst_language.h
+++ b/tests/auto/language/tst_language.h
@@ -90,6 +90,7 @@ private slots:
void delayedError_data();
void dependencyOnAllProfiles();
void derivedSubProject();
+ void emptyJsFile();
void enumerateProjectProperties();
void environmentVariable();
void erroneousFiles_data();