aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-06-19 16:56:11 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2020-06-22 12:45:00 +0000
commitdaeee1c8fbb45c72aadd454db704d092b8579c81 (patch)
treee8e5087e78bad5283ab22957330399b9ac263cb6
parent6ce0cfe261ea09081b37fa3a9430653c6f5acfad (diff)
Add autotest for renaming a qbs project file
... that is also a normal source file in a different product. Unfortunately, this does not trigger the behavior described in the linked bug report, but it can serve as a starting point. Task-number: QTCREATORBUG-24037 Change-Id: I78ffb7429b04db5f0eca45b9197ecb2b8bb31211 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--tests/auto/api/testdata/renamed-qbs-source-file/renamed-qbs-source-file.qbs9
-rw-r--r--tests/auto/api/testdata/renamed-qbs-source-file/the-product/the-prodduct.qbs1
-rw-r--r--tests/auto/api/tst_api.cpp41
-rw-r--r--tests/auto/api/tst_api.h1
4 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/api/testdata/renamed-qbs-source-file/renamed-qbs-source-file.qbs b/tests/auto/api/testdata/renamed-qbs-source-file/renamed-qbs-source-file.qbs
new file mode 100644
index 000000000..d295d43ea
--- /dev/null
+++ b/tests/auto/api/testdata/renamed-qbs-source-file/renamed-qbs-source-file.qbs
@@ -0,0 +1,9 @@
+Project {
+ references: "the-product/the-prodduct.qbs"
+ Product {
+ Group {
+ files: "the-product/*.qbs"
+ fileTags: []
+ }
+ }
+}
diff --git a/tests/auto/api/testdata/renamed-qbs-source-file/the-product/the-prodduct.qbs b/tests/auto/api/testdata/renamed-qbs-source-file/the-product/the-prodduct.qbs
new file mode 100644
index 000000000..86718b571
--- /dev/null
+++ b/tests/auto/api/testdata/renamed-qbs-source-file/the-product/the-prodduct.qbs
@@ -0,0 +1 @@
+Product { }
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 8eaf6c879..94b8da87e 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -1152,6 +1152,47 @@ void TestApi::disappearedWildcardFile()
VERIFY_NO_ERROR(buildJob->error());
}
+void TestApi::renamedQbsSource()
+{
+ const qbs::SetupProjectParameters setupParams
+ = defaultSetupParameters("renamed-qbs-source-file/renamed-qbs-source-file.qbs");
+ std::unique_ptr<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(setupParams,
+ m_logSink, nullptr));
+ QVERIFY(waitForFinished(setupJob.get()));
+ VERIFY_NO_ERROR(setupJob->error());
+ qbs::Project project = setupJob->project();
+ QCOMPARE(project.projectData().allProducts().size(), 2);
+
+ std::unique_ptr<qbs::BuildJob> buildJob(project.buildAllProducts({}));
+ QVERIFY(waitForFinished(buildJob.get()));
+ VERIFY_NO_ERROR(buildJob->error());
+
+ WAIT_FOR_NEW_TIMESTAMP();
+ const QString oldFilePath = QFileInfo(setupParams.projectFilePath()).path()
+ + "/the-product/the-prodduct.qbs";
+ const QString newFilePath = QFileInfo(setupParams.projectFilePath()).path()
+ + "/the-product/the-product.qbs";
+ QVERIFY(QFile::rename(oldFilePath, newFilePath));
+ REPLACE_IN_FILE(setupParams.projectFilePath(), "prodduct", "product");
+ buildJob.reset(project.buildAllProducts({}));
+ QVERIFY(waitForFinished(buildJob.get()));
+ QVERIFY(buildJob->error().hasError());
+ QVERIFY2(buildJob->error().toString().contains(
+ tr("Source file '%1' has disappeared.")
+ .arg(oldFilePath)), qPrintable(buildJob->error().toString()));
+
+ setupJob.reset(project.setupProject(setupParams, m_logSink, nullptr));
+ QVERIFY(waitForFinished(setupJob.get()));
+ VERIFY_NO_ERROR(setupJob->error());
+
+ project = setupJob->project();
+ QCOMPARE(project.projectData().allProducts().size(), 2);
+
+ buildJob.reset(project.buildAllProducts({}));
+ QVERIFY(waitForFinished(buildJob.get()));
+ VERIFY_NO_ERROR(buildJob->error());
+}
+
void TestApi::duplicateProductNames()
{
QFETCH(QString, projectFileName);
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index c9b38aaa2..d6514e17c 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -133,6 +133,7 @@ private slots:
void removeFileDependency();
void renameProduct();
void renameTargetArtifact();
+ void renamedQbsSource();
void resolveProject();
void resolveProject_data();
void resolveProjectDryRun();