aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-05-27 17:05:38 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-06-02 11:46:44 +0200
commitd79628572eb4f89f243742394622007e2a27d0a8 (patch)
tree84a314345524a5a39bf5a4b07e82d8f4cea131f3 /tests
parent5c388a1e76e03e5afe30c7b5aa18ad272cba2e49 (diff)
Fix "Add Files" functionality.
This was broken for the case of a product with no existing binding, even accessing a null pointer. This is also covered by the autotest now. Change-Id: I088dbac08627b08f903dbe77bd824997592adb09 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/api/testdata/project-editing/project-with-no-files.qbs7
-rw-r--r--tests/auto/api/tst_api.cpp30
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/api/testdata/project-editing/project-with-no-files.qbs b/tests/auto/api/testdata/project-editing/project-with-no-files.qbs
new file mode 100644
index 000000000..824ae6dcd
--- /dev/null
+++ b/tests/auto/api/testdata/project-editing/project-with-no-files.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+CppApplication {
+ Group {
+ files: "file.cpp"
+ }
+}
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 1490a9faf..2c3d5c335 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -368,6 +368,36 @@ void TestApi::changeContent()
waitForFinished(buildJob.data());
errorInfo = project.addGroup(newProjectData.products().first(), "blubb");
QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+
+ // Add a file to the top level of a product that does not have a "files" binding yet.
+ setupParams.setProjectFilePath(QDir::cleanPath(m_workingDataDir +
+ "/project-editing/project-with-no-files.qbs"));
+ job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
+ waitForFinished(job.data());
+ QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
+ project = job->project();
+ projectData = project.projectData();
+ QCOMPARE(projectData.allProducts().count(), 1);
+ product = projectData.allProducts().first();
+ errorInfo = project.addFiles(product, qbs::GroupData(), QStringList("main.cpp"));
+ QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ projectData = project.projectData();
+ rcvr.descriptions.clear();
+ buildJob.reset(project.buildAllProducts(buildOptions, this));
+ connect(buildJob.data(), SIGNAL(reportCommandDescription(QString,QString)), &rcvr,
+ SLOT(handleDescription(QString,QString)));
+ waitForFinished(buildJob.data());
+ QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString()));
+ QVERIFY(rcvr.descriptions.contains("compiling main.cpp"));
+ job.reset(qbs::Project::setupProject(setupParams, m_logSink, 0));
+ waitForFinished(job.data());
+ QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString()));
+ if (job->project().projectData() != projectData) {
+ printProjectData(projectData);
+ qDebug("\n====\n");
+ printProjectData(job->project().projectData());
+ }
+ QVERIFY(job->project().projectData() == projectData);
}
static qbs::ErrorInfo forceRuleEvaluation(const qbs::Project project)