aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-11-07 14:35:02 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-11-11 09:40:01 +0100
commita0dd0a13db1004ca86cf257ebbd9c3e714da32ea (patch)
tree9cd17a929f7db159e14a30781763e7120cc2ab37 /tests
parentd6e99112cc72c4e67c2c620c9ca1a71ad3e4eec5 (diff)
Take rules into account when tracking changes.
This will cause rebuilding if, for example, a rule in a module that the product uses gets its source code changed (and the rule is actually being used). Change-Id: I009685c85fcc8fa0ae3ecc7c32194685a1558104 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/modules/TestModule/module.qbs28
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/project.qbs4
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/ruletest.qbs7
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/test.in1
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp71
5 files changed, 99 insertions, 12 deletions
diff --git a/tests/auto/blackbox/testdata/propertyChanges/modules/TestModule/module.qbs b/tests/auto/blackbox/testdata/propertyChanges/modules/TestModule/module.qbs
new file mode 100644
index 000000000..ef14d3f47
--- /dev/null
+++ b/tests/auto/blackbox/testdata/propertyChanges/modules/TestModule/module.qbs
@@ -0,0 +1,28 @@
+import qbs
+import qbs.File
+
+Module {
+ FileTagger {
+ pattern: "*.in"
+ fileTags: "test-input"
+ }
+
+ Rule {
+ inputs: ['test-input']
+ Artifact {
+ fileTags: "test-output"
+ fileName: input.fileName + ".out"
+ }
+
+ prepare: {
+ var cmd = new JavaScriptCommand();
+ cmd.highlight = "codegen";
+ cmd.description = "Making output from input";
+ cmd.sourceCode = function() {
+ // print('Change in source code');
+ File.copy(input.fileName, output.fileName);
+ }
+ return cmd;
+ }
+ }
+}
diff --git a/tests/auto/blackbox/testdata/propertyChanges/project.qbs b/tests/auto/blackbox/testdata/propertyChanges/project.qbs
index 4be63101f..9bccb5d06 100644
--- a/tests/auto/blackbox/testdata/propertyChanges/project.qbs
+++ b/tests/auto/blackbox/testdata/propertyChanges/project.qbs
@@ -44,4 +44,8 @@ Project {
}
}
}
+
+ references: "ruletest.qbs"
+
+ qbsSearchPaths: "."
}
diff --git a/tests/auto/blackbox/testdata/propertyChanges/ruletest.qbs b/tests/auto/blackbox/testdata/propertyChanges/ruletest.qbs
new file mode 100644
index 000000000..02088da7b
--- /dev/null
+++ b/tests/auto/blackbox/testdata/propertyChanges/ruletest.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+Product {
+ type: "test-output"
+ Depends { name: "TestModule" }
+ files: "test.in"
+}
diff --git a/tests/auto/blackbox/testdata/propertyChanges/test.in b/tests/auto/blackbox/testdata/propertyChanges/test.in
new file mode 100644
index 000000000..8633abf18
--- /dev/null
+++ b/tests/auto/blackbox/testdata/propertyChanges/test.in
@@ -0,0 +1 @@
+blubb
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 30b62dc41..4161a6d91 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -1055,41 +1055,45 @@ void TestBlackbox::propertyChanges()
{
QDir::setCurrent(testDataDir + "/propertyChanges");
QFile projectFile("project.qbs");
+ QbsRunParameters params(QStringList() << "-f" << "project.qbs");
// Initial build.
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(m_qbsStdout.contains("generated.txt"));
+ QVERIFY(m_qbsStdout.contains("Making output from input"));
QFile generatedFile(buildDir + QLatin1String("/generated.txt"));
QVERIFY(generatedFile.open(QIODevice::ReadOnly));
QCOMPARE(generatedFile.readAll(), QByteArray("contents 1"));
generatedFile.close();
// Incremental build with no changes.
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling lib.cpp.cpp"));
QVERIFY(!m_qbsStdout.contains("linking"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build with no changes, but updated project file timestamp.
waitForNewTimestamp();
QVERIFY(projectFile.open(QIODevice::ReadWrite | QIODevice::Append));
projectFile.write("\n");
projectFile.close();
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(!m_qbsStdout.contains("linking"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, input property changed for first product
waitForNewTimestamp();
@@ -1099,13 +1103,14 @@ void TestBlackbox::propertyChanges()
projectFile.resize(0);
projectFile.write(contents);
projectFile.close();
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(!m_qbsStdout.contains("linking product 2"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
QVERIFY(!m_qbsStdout.contains("linking library"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, input property changed via project for second product.
waitForNewTimestamp();
@@ -1115,26 +1120,29 @@ void TestBlackbox::propertyChanges()
projectFile.resize(0);
projectFile.write(contents);
projectFile.close();
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, input property changed via command line for second product.
- QCOMPARE(runQbs(QbsRunParameters(QLatin1String("project.projectDefines:blubb002"))), 0);
+ params.arguments << "project.projectDefines:blubb002";
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
- QCOMPARE(runQbs(), 0);
+ params.arguments.removeLast();
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, input property changed via environment for third product.
- QbsRunParameters params;
params.environment.insert("QBS_BLACKBOX_DEFINE", "newvalue");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
@@ -1147,21 +1155,25 @@ void TestBlackbox::propertyChanges()
QVERIFY(!m_qbsStdout.contains("linking product 2"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, module property changed via command line.
- QCOMPARE(runQbs(QbsRunParameters(QLatin1String("qbs.enableDebugCode:false"))), 0);
+ params.arguments << "qbs.enableDebugCode:false";
+ QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.release"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
- QCOMPARE(runQbs(), 0);
+ params.arguments.removeLast();
+ QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, non-essential dependency removed.
waitForNewTimestamp();
@@ -1171,12 +1183,13 @@ void TestBlackbox::propertyChanges()
projectFile.resize(0);
projectFile.write(contents);
projectFile.close();
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
QVERIFY(m_qbsStdout.contains("linking product 2"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
QVERIFY(!m_qbsStdout.contains("linking library"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
// Incremental build, prepare script of a transformer changed.
waitForNewTimestamp();
@@ -1186,15 +1199,49 @@ void TestBlackbox::propertyChanges()
projectFile.resize(0);
projectFile.write(contents);
projectFile.close();
- QCOMPARE(runQbs(), 0);
+ QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
QVERIFY(generatedFile.open(QIODevice::ReadOnly));
QCOMPARE(generatedFile.readAll(), QByteArray("contents 2"));
generatedFile.close();
+
+ // Incremental build, prepare script of a rule in a module changed.
+ waitForNewTimestamp();
+ QFile moduleFile("modules/TestModule/module.qbs");
+ QVERIFY(moduleFile.open(QIODevice::ReadWrite));
+ contents = moduleFile.readAll();
+ contents.replace("// print('Change in source code')", "print('Change in source code')");
+ moduleFile.resize(0);
+ moduleFile.write(contents);
+ moduleFile.close();
+ QCOMPARE(runQbs(params), 0);
+ QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
+ QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(m_qbsStdout.contains("Making output from input"));
+
+ // Incremental build, irrelevant file tag of a rule in a module changed.
+ waitForNewTimestamp();
+ QVERIFY(moduleFile.open(QIODevice::ReadWrite));
+ contents = moduleFile.readAll();
+ contents.replace("inputs: ['test-input']", "inputs: ['test-input', 'hupe']");
+ moduleFile.resize(0);
+ moduleFile.write(contents);
+ moduleFile.close();
+ QCOMPARE(runQbs(params), 0);
+ QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
+ QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ QVERIFY(!m_qbsStdout.contains("Making output from input"));
}
void TestBlackbox::disabledProduct()