diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-28 14:20:45 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-30 07:49:23 +0000 |
commit | 499893be59218fd4f563f031e270207f594cc4de (patch) | |
tree | faf7f0683d90ff4b1a778f09a558a5e8ea47b405 /tests | |
parent | 7d0d9705ba4fb8e9813bbf425c10596d306f53c2 (diff) |
Introduce Rule.requiresInputs
This supports the use case of a rule that wants to create its output
even if no artifacts match the declared inputs. We have encountered it
several times in practice.
[ChangeLog] Introduced new property Rule.requiresInputs
Change-Id: If42ab347fb8e47b9117ac48fe3ce1b228566e0d8
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests')
6 files changed, 62 insertions, 0 deletions
diff --git a/tests/auto/blackbox/testdata/rule-with-non-required-inputs/a.inp b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/a.inp new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/a.inp diff --git a/tests/auto/blackbox/testdata/rule-with-non-required-inputs/b.inp b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/b.inp new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/b.inp diff --git a/tests/auto/blackbox/testdata/rule-with-non-required-inputs/c.inp b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/c.inp new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/c.inp diff --git a/tests/auto/blackbox/testdata/rule-with-non-required-inputs/rule-with-non-required-inputs.qbs b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/rule-with-non-required-inputs.qbs new file mode 100644 index 000000000..6719bc69d --- /dev/null +++ b/tests/auto/blackbox/testdata/rule-with-non-required-inputs/rule-with-non-required-inputs.qbs @@ -0,0 +1,42 @@ +import qbs +import qbs.TextFile + +Product { + name: "p" + type: ["p.out"] + + property bool enableTagger + + FileTagger { + condition: enableTagger + patterns: ["*.inp"] + fileTags: ["p.in"] + } + + Rule { + multiplex: true + requiresInputs: false + inputs: ["p.in"] + Artifact { + filePath: "output.txt" + fileTags: ["p.out"] + } + prepare: { + var cmd = new JavaScriptCommand(); + cmd.description = "Generating " + output.fileName; + cmd.sourceCode = function() { + var f = new TextFile(output.filePath, TextFile.WriteOnly); + f.write('('); + var inputsList = inputs["p.in"]; + if (inputsList) { + for (var i = 0; i < inputsList.length; ++i) + f.write(inputsList[i].fileName + ','); + } + f.write(')'); + }; + return [cmd]; + } + } + + files: ["a.inp", "b.inp", "c.inp"] +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 0bdb9c81f..a7371c8a6 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -1598,6 +1598,25 @@ void TestBlackbox::ruleWithNoInputs() QVERIFY2(m_qbsStdout.contains("creating output"), m_qbsStdout.constData()); } +void TestBlackbox::ruleWithNonRequiredInputs() +{ + QDir::setCurrent(testDataDir + "/rule-with-non-required-inputs"); + QbsRunParameters params("build", {"products.p.enableTagger:false"}); + QCOMPARE(runQbs(params), 0); + QFile outFile(relativeProductBuildDir("p") + "/output.txt"); + QVERIFY2(outFile.open(QIODevice::ReadOnly), qPrintable(outFile.errorString())); + QByteArray output = outFile.readAll(); + QCOMPARE(output, QByteArray("()")); + outFile.close(); + params.command = "resolve"; + params.arguments = QStringList({"products.p.enableTagger:true"}); + QCOMPARE(runQbs(params), 0); + QCOMPARE(runQbs(), 0); + QVERIFY2(outFile.open(QIODevice::ReadOnly), qPrintable(outFile.errorString())); + output = outFile.readAll(); + QCOMPARE(output, QByteArray("(a.inp,b.inp,c.inp,)")); +} + void TestBlackbox::smartRelinking() { QDir::setCurrent(testDataDir + "/smart-relinking"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 83d8420e4..77f5762fb 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -156,6 +156,7 @@ private slots: void ruleConditions(); void ruleCycle(); void ruleWithNoInputs(); + void ruleWithNonRequiredInputs(); void smartRelinking(); void smartRelinking_data(); void soVersion(); |