aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-01-31 16:04:56 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2018-02-01 08:14:32 +0000
commit8b99628dc3bb125366f8b5c99ca57c78b96c1e54 (patch)
tree472378f185788ec83c2f83c2a9b2d6f874fb0d69
parentbf18a35838e67fc790e5fd043dbd7a76518de28f (diff)
Autotests: Add convenience function for changing file contents
We do that in a lot of test functions. Change-Id: I8629e8bf936bc8f45d6a42b3bfc89a6a078cd023 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--tests/auto/api/tst_api.cpp37
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp246
-rw-r--r--tests/auto/blackbox/tst_blackboxqt.cpp16
-rw-r--r--tests/auto/shared.h12
4 files changed, 64 insertions, 247 deletions
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 36ea39b97..dad9eb82c 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -178,13 +178,7 @@ void TestApi::addQObjectMacroToCppFile()
receiver.descriptions.clear();
WAIT_FOR_NEW_TIMESTAMP();
- QFile cppFile("object.cpp");
- QVERIFY2(cppFile.open(QIODevice::ReadWrite), qPrintable(cppFile.errorString()));
- QByteArray contents = cppFile.readAll();
- contents.replace("// ", "");
- cppFile.resize(0);
- cppFile.write(contents);
- cppFile.close();
+ REPLACE_IN_FILE("object.cpp", "// ", "");
errorInfo = doBuildProject("add-qobject-macro-to-cpp-file", &receiver);
VERIFY_NO_ERROR(errorInfo);
QVERIFY2(receiver.descriptions.contains("moc"), qPrintable(receiver.descriptions));
@@ -209,14 +203,7 @@ void TestApi::addedFilePersistent()
// Add a file. qbs must schedule it for rule application on the next build.
WAIT_FOR_NEW_TIMESTAMP();
const qbs::SetupProjectParameters params = defaultSetupParameters(relProjectFilePath);
- QFile projectFile(params.projectFilePath());
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- const QByteArray originalContent = projectFile.readAll();
- QByteArray addedFileContent = originalContent;
- addedFileContent.replace("/* 'file.cpp' */", "'file.cpp'");
- projectFile.resize(0);
- projectFile.write(addedFileContent);
- projectFile.flush();
+ REPLACE_IN_FILE(params.projectFilePath(), "/* 'file.cpp' */", "'file.cpp'");
std::unique_ptr<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params, m_logSink,
0));
waitForFinished(setupJob.get());
@@ -226,18 +213,14 @@ void TestApi::addedFilePersistent()
// Remove the file again. qbs must unschedule the rule application again.
// Consequently, the linking step must fail as in the initial run.
WAIT_FOR_NEW_TIMESTAMP();
- projectFile.resize(0);
- projectFile.write(originalContent);
- projectFile.flush();
+ REPLACE_IN_FILE(params.projectFilePath(), "'file.cpp'", "/* 'file.cpp' */");
errorInfo = doBuildProject(relProjectFilePath, 0, &receiver);
QVERIFY(errorInfo.hasError());
QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable((receiver.output)));
// Add the file again. qbs must schedule it for rule application on the next build.
WAIT_FOR_NEW_TIMESTAMP();
- projectFile.resize(0);
- projectFile.write(addedFileContent);
- projectFile.close();
+ REPLACE_IN_FILE(params.projectFilePath(), "/* 'file.cpp' */", "'file.cpp'");
setupJob.reset(qbs::Project().setupProject(params, m_logSink, 0));
waitForFinished(setupJob.get());
QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
@@ -988,16 +971,8 @@ void TestApi::changeDependentLib()
VERIFY_NO_ERROR(errorInfo);
WAIT_FOR_NEW_TIMESTAMP();
- const QString qbsFileName("change-dependent-lib.qbs");
- QFile qbsFile(qbsFileName);
- QVERIFY(qbsFile.open(QIODevice::ReadWrite));
- const QByteArray content1 = qbsFile.readAll();
- QByteArray content2 = content1;
- content2.replace("cpp.defines: [\"XXXX\"]", "cpp.defines: [\"ABCD\"]");
- QVERIFY(content1 != content2);
- qbsFile.seek(0);
- qbsFile.write(content2);
- qbsFile.close();
+ REPLACE_IN_FILE("change-dependent-lib.qbs", "cpp.defines: [\"XXXX\"]",
+ "cpp.defines: [\"ABCD\"]");
errorInfo = doBuildProject("change-dependent-lib");
VERIFY_NO_ERROR(errorInfo);
}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 18e57674b..e0d29907f 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -346,13 +346,7 @@ void TestBlackbox::alwaysRun()
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("yo"));
WAIT_FOR_NEW_TIMESTAMP();
- QFile f(projectFile);
- QVERIFY2(f.open(QIODevice::ReadWrite), qPrintable(f.errorString()));
- QByteArray content = f.readAll();
- content.replace("alwaysRun: false", "alwaysRun: true");
- f.resize(0);
- f.write(content);
- f.close();
+ REPLACE_IN_FILE(projectFile, "alwaysRun: false", "alwaysRun: true");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("yo"));
@@ -618,13 +612,7 @@ void TestBlackbox::changeInDisabledProduct()
QDir::setCurrent(testDataDir + "/change-in-disabled-product");
QCOMPARE(runQbs(), 0);
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile("change-in-disabled-product.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- content.replace("// 'test2.txt'", "'test2.txt'");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("change-in-disabled-product.qbs", "// 'test2.txt'", "'test2.txt'");
QCOMPARE(runQbs(), 0);
}
@@ -635,21 +623,12 @@ void TestBlackbox::changeInImportedFile()
QVERIFY2(m_qbsStdout.contains("old output"), m_qbsStdout.constData());
WAIT_FOR_NEW_TIMESTAMP();
- QFile jsFile("prepare.js");
- QVERIFY2(jsFile.open(QIODevice::ReadWrite), qPrintable(jsFile.errorString()));
- QByteArray content = jsFile.readAll();
- content.replace("old output", "new output");
- jsFile.resize(0);
- jsFile.write(content);
- jsFile.close();
+ REPLACE_IN_FILE("prepare.js", "old output", "new output");
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("new output"), m_qbsStdout.constData());
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(jsFile.open(QIODevice::ReadWrite), qPrintable(jsFile.errorString()));
- jsFile.resize(0);
- jsFile.write(content);
- jsFile.close();
+ touch("prepare.js");
QCOMPARE(runQbs(), 0);
QVERIFY2(!m_qbsStdout.contains("output"), m_qbsStdout.constData());
}
@@ -729,14 +708,10 @@ void TestBlackbox::dependenciesProperty()
QCOMPARE(qbsCount, 1);
// Add new dependency, check that command is re-run.
+ const QString projectFile("dependenciesProperty.qbs");
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile("dependenciesProperty.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- content.replace("// Depends { name: 'newDependency' }", "Depends { name: 'newDependency' }");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "// Depends { name: 'newDependency' }",
+ "Depends { name: 'newDependency' }");
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("generate product1.deps"), m_qbsStdout.constData());
readDepsOutput(depsFile, jsondoc);
@@ -746,12 +721,7 @@ void TestBlackbox::dependenciesProperty()
// Add new Depends item that does not actually introduce a new dependency, check
// that command is not re-run.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("// Depends { name: 'product2' }", "Depends { name: 'product2' }");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "// Depends { name: 'product2' }", "Depends { name: 'product2' }");
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("Resolving"), m_qbsStdout.constData());
QVERIFY2(!m_qbsStdout.contains("generate product1.deps"), m_qbsStdout.constData());
@@ -872,13 +842,8 @@ void TestBlackbox::disappearedProfile()
profile.setValue("m.p1", "p1 new from profile");
settings.sync();
WAIT_FOR_NEW_TIMESTAMP();
- QFile f(QDir::currentPath() + "/modules-dir/modules/m/m.qbs");
- QVERIFY2(f.open(QIODevice::ReadWrite), qPrintable(f.errorString()));
- QByteArray contents = f.readAll();
- contents.replace("property string p1", "property string p1: 'p1 from module'");
- f.seek(0);
- f.write(contents);
- f.close();
+ REPLACE_IN_FILE("modules-dir/modules/m/m.qbs", "property string p1",
+ "property string p1: 'p1 from module'");
QCOMPARE(runQbs(buildParams), 0);
QVERIFY2(m_qbsStdout.contains("Resolving"), m_qbsStdout.constData());
QVERIFY2(!m_qbsStdout.contains("Creating dummy1.txt"), m_qbsStdout.constData());
@@ -1795,13 +1760,7 @@ void TestBlackbox::trackExternalProductChanges()
QVERIFY(!m_qbsStdout.contains("compiling fileExists.cpp"));
WAIT_FOR_NEW_TIMESTAMP();
- QFile jsFile("fileList.js");
- QVERIFY(jsFile.open(QIODevice::ReadWrite));
- QByteArray jsCode = jsFile.readAll();
- jsCode.replace("return []", "return ['jsFileChange.cpp']");
- jsFile.resize(0);
- jsFile.write(jsCode);
- jsFile.close();
+ REPLACE_IN_FILE("fileList.js", "return []", "return ['jsFileChange.cpp']");
QCOMPARE(runQbs(), 0);
QVERIFY(!m_qbsStdout.contains("compiling main.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling environmentChange.cpp"));
@@ -1809,12 +1768,7 @@ void TestBlackbox::trackExternalProductChanges()
QVERIFY(!m_qbsStdout.contains("compiling fileExists.cpp"));
rmDirR(relativeBuildDir());
- QVERIFY(jsFile.open(QIODevice::ReadWrite));
- jsCode = jsFile.readAll();
- jsCode.replace("['jsFileChange.cpp']", "[]");
- jsFile.resize(0);
- jsFile.write(jsCode);
- jsFile.close();
+ REPLACE_IN_FILE("fileList.js", "['jsFileChange.cpp']", "[]");
QCOMPARE(runQbs(), 0);
QVERIFY(m_qbsStdout.contains("compiling main.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling environmentChange.cpp"));
@@ -2592,12 +2546,7 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with unchanged probe.
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile("probe-change-tracking.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ touch("probe-change-tracking.qbs");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(!m_qbsStdout.contains("running tlpProbe"));
@@ -2606,12 +2555,7 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with changed configure scripts.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("console.info", " console.info");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("probe-change-tracking.qbs", "console.info", " console.info");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(m_qbsStdout.contains("running tlpProbe"));
@@ -2620,13 +2564,8 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with added property.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("condition: product.runProbe",
+ REPLACE_IN_FILE("probe-change-tracking.qbs", "condition: product.runProbe",
"condition: product.runProbe\nproperty string something: 'x'");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(!m_qbsStdout.contains("running tlpProbe"));
@@ -2635,12 +2574,7 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with changed property.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("'x'", "'y'");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("probe-change-tracking.qbs", "'x'", "'y'");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(!m_qbsStdout.contains("running tlpProbe"));
@@ -2649,12 +2583,7 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with removed property.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("property string something: 'y'", "");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("probe-change-tracking.qbs", "property string something: 'y'", "");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(!m_qbsStdout.contains("running tlpProbe"));
@@ -2663,11 +2592,7 @@ void TestBlackbox::probeChangeTracking()
// Re-resolving with unchanged probe again.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ touch("probe-change-tracking.qbs");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("Resolving"));
QVERIFY(!m_qbsStdout.contains("running tlpProbe"));
@@ -2712,13 +2637,7 @@ void TestBlackbox::probesAndArrayProperties()
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("prop: [\"probe\"]"), m_qbsStdout.constData());
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile("probes-and-array-properties.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- content.replace("//", "");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("probes-and-array-properties.qbs", "//", "");
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("prop: [\"product\",\"probe\"]"), m_qbsStdout.constData());
}
@@ -2754,7 +2673,7 @@ void TestBlackbox::propertyAssignmentInFailedModule()
void TestBlackbox::propertyChanges()
{
QDir::setCurrent(testDataDir + "/propertyChanges");
- QFile projectFile("propertyChanges.qbs");
+ const QString projectFile("propertyChanges.qbs");
QbsRunParameters params(QStringList({"-f", "propertyChanges.qbs", "qbs.enableDebugCode:true"}));
// Initial build.
@@ -2786,9 +2705,7 @@ void TestBlackbox::propertyChanges()
// Incremental build with no changes, but updated project file timestamp.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite | QIODevice::Append));
- projectFile.write("\n");
- projectFile.close();
+ touch(projectFile);
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -2801,12 +2718,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, input property changed for first product
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- QByteArray contents = projectFile.readAll();
- contents.replace("blubb1", "blubb01");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "blubb1", "blubb01");
QCOMPARE(runQbs(params), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
@@ -2819,12 +2731,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, input property changed via project for second product.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("blubb2", "blubb02");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "blubb2", "blubb02");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
@@ -2907,12 +2814,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, non-essential dependency removed.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("Depends { name: 'library' }", "// Depends { name: 'library' }");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "Depends { name: 'library' }", "// Depends { name: 'library' }");
params.command = "build";
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("linking product 1"));
@@ -2925,12 +2827,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, prepare script of a transformer changed.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("contents 1", "contents 2");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "contents 1", "contents 2");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -2945,12 +2842,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, product property used in JavaScript command changed.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("prefix 1", "prefix 2");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "prefix 1", "prefix 2");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -2965,12 +2857,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, project property used in JavaScript command changed.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("suffix 1", "suffix 2");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "suffix 1", "suffix 2");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -2985,12 +2872,7 @@ void TestBlackbox::propertyChanges()
// Incremental build, module property used in JavaScript command changed.
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- contents = projectFile.readAll();
- contents.replace("default value", "new value");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "default value", "new value");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -3003,14 +2885,8 @@ void TestBlackbox::propertyChanges()
// Incremental build, prepare script of a rule in a module changed.
WAIT_FOR_NEW_TIMESTAMP();
- QFile moduleFile("modules/TestModule/module.qbs");
- QVERIFY(moduleFile.open(QIODevice::ReadWrite));
- contents = moduleFile.readAll();
- contents.replace("// console.info('Change in source code')",
- "console.info('Change in source code')");
- moduleFile.resize(0);
- moduleFile.write(contents);
- moduleFile.close();
+ REPLACE_IN_FILE("modules/TestModule/module.qbs", "// console.info('Change in source code')",
+ "console.info('Change in source code')");
QCOMPARE(runQbs(params), 0);
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
@@ -3362,13 +3238,7 @@ void TestBlackbox::fileDependencies()
QVERIFY(!m_qbsStdout.contains("compiling zort.cpp"));
// Change the product in between to force the list of dependencies to get rescued.
- QFile projectFile("fileDependencies.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray contents = projectFile.readAll();
- contents.replace("//", "");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
+ REPLACE_IN_FILE("fileDependencies.qbs", "//", "");
QCOMPARE(runQbs(), 0);
QVERIFY2(m_qbsStdout.contains("Resolving"), m_qbsStdout.constData());
QVERIFY(!m_qbsStdout.contains("compiling narf.cpp"));
@@ -4482,49 +4352,28 @@ void TestBlackbox::radAfterIncompleteBuild()
QbsRunParameters params(QStringList() << "-f" << projectFileName);
QCOMPARE(runQbs(params), 0);
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile(projectFileName);
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- QByteArray content = projectFile.readAll();
- content.replace("oldfile", "oldfile/newfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "oldfile", "oldfile/newfile");
params.expectFailure = true;
QVERIFY(runQbs(params) != 0);
WAIT_FOR_NEW_TIMESTAMP();
- content.replace("oldfile/newfile", "newfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "oldfile/newfile", "newfile");
params.expectFailure = false;
QCOMPARE(runQbs(params), 0);
WAIT_FOR_NEW_TIMESTAMP();
- content.replace("newfile", "oldfile/newfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "newfile", "oldfile/newfile");
QCOMPARE(runQbs(params), 0);
// Step 2: Have a file where a directory used to be.
WAIT_FOR_NEW_TIMESTAMP();
- content.replace("oldfile/newfile", "oldfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "oldfile/newfile", "oldfile");
params.expectFailure = true;
QVERIFY(runQbs(params) != 0);
WAIT_FOR_NEW_TIMESTAMP();
- content.replace("oldfile", "newfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "oldfile", "newfile");
params.expectFailure = false;
QCOMPARE(runQbs(params), 0);
WAIT_FOR_NEW_TIMESTAMP();
- content.replace("newfile", "oldfile");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.flush();
+ REPLACE_IN_FILE(projectFileName, "newfile", "oldfile");
QCOMPARE(runQbs(params), 0);
}
@@ -4593,35 +4442,26 @@ void TestBlackbox::installedApp()
QVERIFY(!addedFile.exists());
// Check whether changing install parameters on the product causes re-installation.
- QFile projectFile("installed_artifact.qbs");
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- QByteArray content = projectFile.readAll();
- content.replace("qbs.installPrefix: \"/usr\"", "qbs.installPrefix: '/usr/local'");
WAIT_FOR_NEW_TIMESTAMP();
- projectFile.resize(0);
- projectFile.write(content);
- QVERIFY(projectFile.flush());
+ REPLACE_IN_FILE("installed_artifact.qbs", "qbs.installPrefix: \"/usr\"",
+ "qbs.installPrefix: '/usr/local'");
QCOMPARE(runQbs(), 0);
QVERIFY(regularFileExists(defaultInstallRoot
+ HostOsInfo::appendExecutableSuffix(QLatin1String("/usr/local/bin/installedApp"))));
QVERIFY(regularFileExists(defaultInstallRoot + QLatin1String("/usr/local/src/main.cpp")));
// Check whether changing install parameters on the artifact causes re-installation.
- content.replace("qbs.installDir: \"bin\"", "qbs.installDir: 'custom'");
WAIT_FOR_NEW_TIMESTAMP();
- projectFile.resize(0);
- projectFile.write(content);
- QVERIFY(projectFile.flush());
+ REPLACE_IN_FILE("installed_artifact.qbs", "qbs.installDir: \"bin\"",
+ "qbs.installDir: 'custom'");
QCOMPARE(runQbs(), 0);
QVERIFY(regularFileExists(defaultInstallRoot
+ HostOsInfo::appendExecutableSuffix(QLatin1String("/usr/local/custom/installedApp"))));
// Check whether changing install parameters on a source file causes re-installation.
- content.replace("qbs.installDir: \"src\"", "qbs.installDir: 'source'");
WAIT_FOR_NEW_TIMESTAMP();
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE("installed_artifact.qbs", "qbs.installDir: \"src\"",
+ "qbs.installDir: 'source'");
QCOMPARE(runQbs(), 0);
QVERIFY(regularFileExists(defaultInstallRoot + QLatin1String("/usr/local/source/main.cpp")));
diff --git a/tests/auto/blackbox/tst_blackboxqt.cpp b/tests/auto/blackbox/tst_blackboxqt.cpp
index f2c263cfa..addde9a3f 100644
--- a/tests/auto/blackbox/tst_blackboxqt.cpp
+++ b/tests/auto/blackbox/tst_blackboxqt.cpp
@@ -286,24 +286,14 @@ void TestBlackboxQt::removeMocHeaderFromFileList()
{
QDir::setCurrent(testDataDir + "/remove-moc-header-from-file-list");
QCOMPARE(runQbs(), 0);
+ QString projectFile("remove-moc-header-from-file-list.qbs");
WAIT_FOR_NEW_TIMESTAMP();
- QFile projectFile("remove-moc-header-from-file-list.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- content.replace("\"file.h\"", "// \"file.h\"");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "\"file.h\"", "// \"file.h\"");
QbsRunParameters params;
params.expectFailure = true;
QVERIFY(runQbs(params) != 0);
WAIT_FOR_NEW_TIMESTAMP();
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- content = projectFile.readAll();
- content.replace("// \"file.h\"", "\"file.h\"");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
+ REPLACE_IN_FILE(projectFile, "// \"file.h\"", "\"file.h\"");
QCOMPARE(runQbs(), 0);
}
diff --git a/tests/auto/shared.h b/tests/auto/shared.h
index b0ce6f942..f16ca4bde 100644
--- a/tests/auto/shared.h
+++ b/tests/auto/shared.h
@@ -44,6 +44,18 @@
#include <memory>
+#define REPLACE_IN_FILE(filePath, oldContent, newContent) \
+ do { \
+ QFile f((filePath)); \
+ QVERIFY2(f.open(QIODevice::ReadWrite), qPrintable(f.errorString())); \
+ QByteArray content = f.readAll(); \
+ const QByteArray savedContent = content; \
+ content.replace((oldContent), (newContent)); \
+ QVERIFY(content != savedContent); \
+ f.resize(0); \
+ f.write(content); \
+ } while (false)
+
inline int testTimeoutInMsecs()
{
bool ok;