From 59aed7c423ab1ff8e19d34736619cb128cc8b49a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 30 Jul 2014 16:19:22 +0200 Subject: Invalidate project after certain unsuccessful re-resolving attempts. Namely, if the build data has been mangled by the re-resolving attempt. Change-Id: Ibe020a6bda38a335f95e2d2cef4f37fac3199a7d Reviewed-by: Joerg Bornemann --- tests/auto/api/api.qbs | 2 +- .../project-invalidation/project.early-error.qbs | 6 ++++ .../project-invalidation/project.late-error.qbs | 13 +++++++++ .../project-invalidation/project.no-error.qbs | 5 ++++ tests/auto/api/tst_api.cpp | 32 ++++++++++++++++++++++ tests/auto/api/tst_api.h | 1 + 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/auto/api/testdata/project-invalidation/project.early-error.qbs create mode 100644 tests/auto/api/testdata/project-invalidation/project.late-error.qbs create mode 100644 tests/auto/api/testdata/project-invalidation/project.no-error.qbs (limited to 'tests') diff --git a/tests/auto/api/api.qbs b/tests/auto/api/api.qbs index df42afc89..343325469 100644 --- a/tests/auto/api/api.qbs +++ b/tests/auto/api/api.qbs @@ -2,7 +2,7 @@ import "../autotest.qbs" as AutoTest AutoTest { testName: "api" - files: ["tst_api.h", "tst_api.cpp"] + files: ["../shared.h", "tst_api.h", "tst_api.cpp"] cpp.defines: base .concat(['SRCDIR="' + path + '"']) .concat(project.enableProjectFileUpdates ? ["QBS_ENABLE_PROJECT_FILE_UPDATES"] : []) diff --git a/tests/auto/api/testdata/project-invalidation/project.early-error.qbs b/tests/auto/api/testdata/project-invalidation/project.early-error.qbs new file mode 100644 index 000000000..ecc76c816 --- /dev/null +++ b/tests/auto/api/testdata/project-invalidation/project.early-error.qbs @@ -0,0 +1,6 @@ +import qbs + +Product { + type: "mytype" + files: "nosuchfile.txt" +} diff --git a/tests/auto/api/testdata/project-invalidation/project.late-error.qbs b/tests/auto/api/testdata/project-invalidation/project.late-error.qbs new file mode 100644 index 000000000..b55979ec7 --- /dev/null +++ b/tests/auto/api/testdata/project-invalidation/project.late-error.qbs @@ -0,0 +1,13 @@ +import qbs + +Product { + type: "mytype" + + Transformer { + Artifact { + filePath: "blubb" + fileTags: "mytype" + } + prepare: [] + } +} diff --git a/tests/auto/api/testdata/project-invalidation/project.no-error.qbs b/tests/auto/api/testdata/project-invalidation/project.no-error.qbs new file mode 100644 index 000000000..099553ffc --- /dev/null +++ b/tests/auto/api/testdata/project-invalidation/project.no-error.qbs @@ -0,0 +1,5 @@ +import qbs + +Product { + type: "mytype" +} diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index cc85fd704..fd2968441 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -29,6 +29,8 @@ #include "tst_api.h" +#include "../shared.h" + #include #include #include @@ -760,6 +762,36 @@ void TestApi::nonexistingProjectPropertyFromCommandLine() qPrintable(job->error().toString())); } +void TestApi::projectInvalidation() +{ + qbs::SetupProjectParameters setupParams = defaultSetupParameters(); + setupParams.setRestoreBehavior(qbs::SetupProjectParameters::RestoreAndTrackChanges); + const QString projectDirPath = QDir::cleanPath(m_workingDataDir + "/project-invalidation"); + setupParams.setProjectFilePath(projectDirPath + "/project.qbs"); + QDir::setCurrent(projectDirPath); + QVERIFY(QFile::copy("project.no-error.qbs", "project.qbs")); + QScopedPointer setupJob(qbs::Project().setupProject(setupParams, + m_logSink, 0)); + waitForFinished(setupJob.data()); + QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString())); + qbs::Project project = setupJob->project(); + QVERIFY(project.isValid()); + waitForNewTimestamp(); + QVERIFY(QFile::remove("project.qbs")); + QVERIFY(QFile::copy("project.early-error.qbs", "project.qbs")); + setupJob.reset(project.setupProject(setupParams, m_logSink, 0)); + waitForFinished(setupJob.data()); + QVERIFY(setupJob->error().hasError()); + QVERIFY(project.isValid()); // Error in Loader, old project still valid. + waitForNewTimestamp(); + QVERIFY(QFile::remove("project.qbs")); + QVERIFY(QFile::copy("project.late-error.qbs", "project.qbs")); + setupJob.reset(project.setupProject(setupParams, m_logSink, 0)); + waitForFinished(setupJob.data()); + QVERIFY(setupJob->error().hasError()); + QVERIFY(!project.isValid()); // Error in build data re-resolving, old project not valid anymore. +} + void TestApi::projectLocking() { qbs::SetupProjectParameters setupParams = defaultSetupParameters(); diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h index 473b20c80..8285f1b53 100644 --- a/tests/auto/api/tst_api.h +++ b/tests/auto/api/tst_api.h @@ -63,6 +63,7 @@ private slots: void multiArch(); void nonexistingProjectPropertyFromProduct(); void nonexistingProjectPropertyFromCommandLine(); + void projectInvalidation(); void projectLocking(); void references(); void sourceFileInBuildDir(); -- cgit v1.2.3