diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-01-15 15:18:17 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-01-15 16:16:04 +0000 |
commit | 5f15a0ba4102c4f2ada3d78d47bbff0c5f8c2233 (patch) | |
tree | 6e3ae86cd8588f67bd3e083af92e99d5324a619e /tests | |
parent | 1fc0f0152ed461a1048f2b1a7549ab68104dd806 (diff) |
Scanner item: Do not re-use the searchPaths value for other inputs
For the C++ scanner, the search paths depend on module properties, not
on the actual input file. This assumption does not generally hold for
Scanner items, which was not taken into account when this feature was
originally introduced. As a result, the first input to get scanned by a
Scanner item erroneously provided the search paths for all others.
Change-Id: I0159d826dac1f5605494d54cfe96fe468044ca34
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests')
8 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/blackbox/testdata/scanner-item/modules/m/m.qbs b/tests/auto/blackbox/testdata/scanner-item/modules/m/m.qbs new file mode 100644 index 000000000..9af4cc539 --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/modules/m/m.qbs @@ -0,0 +1,9 @@ +import qbs.FileInfo + +Module { + Scanner { + inputs: "i" + searchPaths: [FileInfo.path(input.filePath)] + scan: ["file.inc"] + } +} diff --git a/tests/auto/blackbox/testdata/scanner-item/scanner-item.qbs b/tests/auto/blackbox/testdata/scanner-item/scanner-item.qbs new file mode 100644 index 000000000..f389651d4 --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/scanner-item.qbs @@ -0,0 +1,24 @@ +import qbs.File +import qbs.FileInfo + +Product { + type: "t" + Depends { name: "m" } + Group { + files: ["subdir1/file1.in", "subdir2/file2.in"] + fileTags: "i" + } + Rule { + inputs: "i" + Artifact { + filePath: FileInfo.baseName(input.fileName) + ".out" + fileTags: "t" + } + prepare: { + var cmd = new JavaScriptCommand(); + cmd.description = "handling " + input.fileName; + cmd.sourceCode = function() { File.copy(input.filePath, output.filePath); }; + return cmd; + } + } +} diff --git a/tests/auto/blackbox/testdata/scanner-item/subdir1/file.inc b/tests/auto/blackbox/testdata/scanner-item/subdir1/file.inc new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/subdir1/file.inc diff --git a/tests/auto/blackbox/testdata/scanner-item/subdir1/file1.in b/tests/auto/blackbox/testdata/scanner-item/subdir1/file1.in new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/subdir1/file1.in diff --git a/tests/auto/blackbox/testdata/scanner-item/subdir2/file.inc b/tests/auto/blackbox/testdata/scanner-item/subdir2/file.inc new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/subdir2/file.inc diff --git a/tests/auto/blackbox/testdata/scanner-item/subdir2/file2.in b/tests/auto/blackbox/testdata/scanner-item/subdir2/file2.in new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/scanner-item/subdir2/file2.in diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index d1cd1d503..df4a2066f 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -2410,6 +2410,24 @@ void TestBlackbox::ruleWithNonRequiredInputs() QVERIFY2(m_qbsStdout.contains("Generating"), m_qbsStdout.constData()); } +void TestBlackbox::scannerItem() +{ + QDir::setCurrent(testDataDir + "/scanner-item"); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.contains("handling file1.in"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("handling file2.in"), m_qbsStdout.constData()); + WAIT_FOR_NEW_TIMESTAMP(); + touch("subdir1/file.inc"); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.contains("handling file1.in"), m_qbsStdout.constData()); + QVERIFY2(!m_qbsStdout.contains("handling file2.in"), m_qbsStdout.constData()); + WAIT_FOR_NEW_TIMESTAMP(); + touch("subdir2/file.inc"); + QCOMPARE(runQbs(), 0); + QVERIFY2(!m_qbsStdout.contains("handling file1.in"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("handling file2.in"), m_qbsStdout.constData()); +} + void TestBlackbox::setupBuildEnvironment() { QDir::setCurrent(testDataDir + "/setup-build-environment"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 9a715e721..313ad5d40 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -247,6 +247,7 @@ private slots: void ruleCycle(); void ruleWithNoInputs(); void ruleWithNonRequiredInputs(); + void scannerItem(); void setupBuildEnvironment(); void setupRunEnvironment(); void smartRelinking(); |