aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-08-29 13:29:17 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2016-08-30 14:56:08 +0000
commit22051b667cae25a3c42e98707fcd48538ba3b29e (patch)
treed7160da31b3c5663d6df500fbf32ff11a6588481 /tests/auto
parentad39f4355c1c6f508d8179a9af14f002c3e8a198 (diff)
Recover from errors in referenced files when in relaxed mode
An error in anything but the top-level file should still load the project. This improves the experience of IDE users. Change-Id: I607d2c96c6f51ead840b7f50701c167796af7d42 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/api/testdata/projectd0
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p1.qbs0
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p2.qbs0
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/cycle.qbs7
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/emptydir/.gitignore0
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/modules/brokenmodule/brokenmodule.qbs5
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/okay.qbs3
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/okay2.qbs3
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/referenced-file-errors.qbs32
-rw-r--r--tests/auto/api/testdata/referenced-file-errors/wrongtype.qbs3
-rw-r--r--tests/auto/api/tst_api.cpp28
-rw-r--r--tests/auto/api/tst_api.h2
12 files changed, 83 insertions, 0 deletions
diff --git a/tests/auto/api/testdata/projectd b/tests/auto/api/testdata/projectd
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/api/testdata/projectd
diff --git a/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p1.qbs b/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p1.qbs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p1.qbs
diff --git a/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p2.qbs b/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p2.qbs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/ambiguousdir/p2.qbs
diff --git a/tests/auto/api/testdata/referenced-file-errors/cycle.qbs b/tests/auto/api/testdata/referenced-file-errors/cycle.qbs
new file mode 100644
index 000000000..72ad2b8b8
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/cycle.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+Project {
+ property string productName: "p1"
+ Product { name: project.productName }
+ references: ["referenced-file-errors.qbs"]
+}
diff --git a/tests/auto/api/testdata/referenced-file-errors/emptydir/.gitignore b/tests/auto/api/testdata/referenced-file-errors/emptydir/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/emptydir/.gitignore
diff --git a/tests/auto/api/testdata/referenced-file-errors/modules/brokenmodule/brokenmodule.qbs b/tests/auto/api/testdata/referenced-file-errors/modules/brokenmodule/brokenmodule.qbs
new file mode 100644
index 000000000..861a73931
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/modules/brokenmodule/brokenmodule.qbs
@@ -0,0 +1,5 @@
+import qbs
+
+Module {
+ syntax error
+}
diff --git a/tests/auto/api/testdata/referenced-file-errors/okay.qbs b/tests/auto/api/testdata/referenced-file-errors/okay.qbs
new file mode 100644
index 000000000..6ec8b1edd
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/okay.qbs
@@ -0,0 +1,3 @@
+import qbs
+
+Product { name: "p2" }
diff --git a/tests/auto/api/testdata/referenced-file-errors/okay2.qbs b/tests/auto/api/testdata/referenced-file-errors/okay2.qbs
new file mode 100644
index 000000000..f3b92dd93
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/okay2.qbs
@@ -0,0 +1,3 @@
+import qbs
+
+Product { name: "p4" }
diff --git a/tests/auto/api/testdata/referenced-file-errors/referenced-file-errors.qbs b/tests/auto/api/testdata/referenced-file-errors/referenced-file-errors.qbs
new file mode 100644
index 000000000..b6b255ab3
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/referenced-file-errors.qbs
@@ -0,0 +1,32 @@
+import qbs
+
+Project {
+ references: [
+ "ambiguousdir",
+ "cycle.qbs",
+ "emptydir",
+ "nosuchfile.qbs",
+ "okay.qbs",
+ "wrongtype.qbs",
+ ]
+
+ SubProject {
+ filePath: "cycle.qbs"
+ Properties {
+ productName: "p3"
+ }
+ }
+
+ SubProject {
+ filePath: "nosuchfile.qbs"
+ }
+
+ SubProject {
+ filePath: "okay2.qbs"
+ }
+
+ Product {
+ name: "p5"
+ Depends { name: "brokenmodule" }
+ }
+}
diff --git a/tests/auto/api/testdata/referenced-file-errors/wrongtype.qbs b/tests/auto/api/testdata/referenced-file-errors/wrongtype.qbs
new file mode 100644
index 000000000..9322b53b1
--- /dev/null
+++ b/tests/auto/api/testdata/referenced-file-errors/wrongtype.qbs
@@ -0,0 +1,3 @@
+import qbs
+
+Module { }
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index be4c3b5bf..88582fd15 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -1730,6 +1730,34 @@ void TestApi::rc()
QCOMPARE(rcFileWasCompiled, qbs::Internal::HostOsInfo::isWindowsHost());
}
+void TestApi::referencedFileErrors()
+{
+ QFETCH(bool, relaxedMode);
+ qbs::SetupProjectParameters params
+ = defaultSetupParameters("referenced-file-errors/referenced-file-errors.qbs");
+ params.setDryRun(true);
+ params.setProductErrorMode(relaxedMode ? qbs::ErrorHandlingMode::Relaxed
+ : qbs::ErrorHandlingMode::Strict);
+ QScopedPointer<qbs::SetupProjectJob> job(qbs::Project().setupProject(params, m_logSink, 0));
+ waitForFinished(job.data());
+ QVERIFY2(job->error().hasError() != relaxedMode, qPrintable(job->error().toString()));
+ const qbs::Project project = job->project();
+ QCOMPARE(project.isValid(), relaxedMode);
+ if (!relaxedMode)
+ return;
+ const QList<qbs::ProductData> products = project.projectData().allProducts();
+ QCOMPARE(products.count(), 5);
+ foreach (const qbs::ProductData &p, products)
+ QCOMPARE(p.isEnabled(), p.name() != "p5");
+}
+
+void TestApi::referencedFileErrors_data()
+{
+ QTest::addColumn<bool>("relaxedMode");
+ QTest::newRow("strict mode") << false;
+ QTest::newRow("relaxed mode") << true;
+}
+
qbs::SetupProjectParameters TestApi::defaultSetupParameters(const QString &projectFilePath) const
{
qbs::SetupProjectParameters setupParams;
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index 021e183b6..4e7f7add3 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -112,6 +112,8 @@ private slots:
void projectWithPropertiesItem();
void propertiesBlocks();
void rc();
+ void referencedFileErrors();
+ void referencedFileErrors_data();
void references();
void relaxedModeRecovery();
void removeFileDependency();