aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-06-28 14:20:45 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-06-30 07:49:23 +0000
commit499893be59218fd4f563f031e270207f594cc4de (patch)
treefaf7f0683d90ff4b1a778f09a558a5e8ea47b405 /tests
parent7d0d9705ba4fb8e9813bbf425c10596d306f53c2 (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')
-rw-r--r--tests/auto/blackbox/testdata/rule-with-non-required-inputs/a.inp0
-rw-r--r--tests/auto/blackbox/testdata/rule-with-non-required-inputs/b.inp0
-rw-r--r--tests/auto/blackbox/testdata/rule-with-non-required-inputs/c.inp0
-rw-r--r--tests/auto/blackbox/testdata/rule-with-non-required-inputs/rule-with-non-required-inputs.qbs42
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp19
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
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();