diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-05-27 17:05:38 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-06-02 11:46:44 +0200 |
commit | d79628572eb4f89f243742394622007e2a27d0a8 (patch) | |
tree | 84a314345524a5a39bf5a4b07e82d8f4cea131f3 /tests | |
parent | 5c388a1e76e03e5afe30c7b5aa18ad272cba2e49 (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.qbs | 7 | ||||
-rw-r--r-- | tests/auto/api/tst_api.cpp | 30 |
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) |