diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-22 14:10:26 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-08-22 14:11:11 +0000 |
commit | b44df152e922cead8510ccc6f94e0c35db284012 (patch) | |
tree | c1bb63af7d4941cbaa800521badc11e8993b0a38 /tests | |
parent | da4fd1c19544f15a46cb531d9a7041d94fa1d893 (diff) |
API: Take rescuable artifact data into account for project data
Otherwise, information about generated artifacts will temporarily
disappear when product build data has been invalidated after project re-
resolving, which is annoying for IDE users.
Change-Id: Idea2d03fba5a823256e95ce554a2f2f413e3d977
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'tests')
5 files changed, 55 insertions, 0 deletions
diff --git a/tests/auto/api/testdata/project-data-after-product-invalidation/file.cpp b/tests/auto/api/testdata/project-data-after-product-invalidation/file.cpp new file mode 100644 index 000000000..8101b05dc --- /dev/null +++ b/tests/auto/api/testdata/project-data-after-product-invalidation/file.cpp @@ -0,0 +1 @@ +void f() { } diff --git a/tests/auto/api/testdata/project-data-after-product-invalidation/main.cpp b/tests/auto/api/testdata/project-data-after-product-invalidation/main.cpp new file mode 100644 index 000000000..237c8ce18 --- /dev/null +++ b/tests/auto/api/testdata/project-data-after-product-invalidation/main.cpp @@ -0,0 +1 @@ +int main() {} diff --git a/tests/auto/api/testdata/project-data-after-product-invalidation/project-data-after-product-invalidation.qbs b/tests/auto/api/testdata/project-data-after-product-invalidation/project-data-after-product-invalidation.qbs new file mode 100644 index 000000000..030db6bc2 --- /dev/null +++ b/tests/auto/api/testdata/project-data-after-product-invalidation/project-data-after-product-invalidation.qbs @@ -0,0 +1,8 @@ +import qbs + +CppApplication { + files: [ + "file.cpp", + "main.cpp", + ] +} diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index 285da5357..9607b4dfd 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -1544,6 +1544,50 @@ void TestApi::objC() VERIFY_NO_ERROR(errorInfo); } +void TestApi::projectDataAfterProductInvalidation() +{ + qbs::SetupProjectParameters setupParams = defaultSetupParameters("project-data-after-" + "product-invalidation/project-data-after-product-invalidation.qbs"); + QScopedPointer<qbs::SetupProjectJob> 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()); + QCOMPARE(project.projectData().products().count(), 1); + QVERIFY(project.projectData().products().first().generatedArtifacts().isEmpty()); + QScopedPointer<qbs::BuildJob> buildJob(project.buildAllProducts(qbs::BuildOptions())); + waitForFinished(buildJob.data()); + QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString())); + QCOMPARE(project.projectData().products().count(), 1); + const qbs::ProductData productAfterBulding = project.projectData().products().first(); + QVERIFY(!productAfterBulding.generatedArtifacts().isEmpty()); + QFile projectFile(setupParams.projectFilePath()); + WAIT_FOR_NEW_TIMESTAMP(); + QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString())); + QByteArray content = projectFile.readAll(); + QVERIFY(!content.isEmpty()); + content.replace("\"file.cpp", "// \"file.cpp"); + projectFile.resize(0); + projectFile.write(content); + projectFile.flush(); + setupJob.reset(project.setupProject(setupParams, m_logSink, 0)); + waitForFinished(setupJob.data()); + QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString())); + QVERIFY(!project.isValid()); + project = setupJob->project(); + QVERIFY(project.isValid()); + QCOMPARE(project.projectData().products().count(), 1); + QVERIFY(project.projectData().products().first().generatedArtifacts() + == productAfterBulding.generatedArtifacts()); + buildJob.reset(project.buildAllProducts(qbs::BuildOptions())); + waitForFinished(buildJob.data()); + QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString())); + QCOMPARE(project.projectData().products().count(), 1); + QVERIFY(project.projectData().products().first().generatedArtifacts() + != productAfterBulding.generatedArtifacts()); +} + void TestApi::processResult() { // On Windows, even closed files seem to sometimes block the removal of their parent directories diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h index 4661fa0d8..e59c67d3f 100644 --- a/tests/auto/api/tst_api.h +++ b/tests/auto/api/tst_api.h @@ -105,6 +105,7 @@ private slots: void nonexistingProjectPropertyFromCommandLine(); void nonexistingProjectPropertyFromProduct(); void objC(); + void projectDataAfterProductInvalidation(); void processResult(); void processResult_data(); void projectInvalidation(); |