diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-29 13:29:17 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-30 14:56:08 +0000 |
commit | 22051b667cae25a3c42e98707fcd48538ba3b29e (patch) | |
tree | d7160da31b3c5663d6df500fbf32ff11a6588481 /tests/auto | |
parent | ad39f4355c1c6f508d8179a9af14f002c3e8a198 (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')
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(); |