diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2013-04-12 12:43:33 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-04-12 15:02:30 +0200 |
commit | ed53341676e8902600e6ef95936d6cfdab6087d9 (patch) | |
tree | a3c869e4ac85f35cc3d6a95a214cd7ff399b69f3 | |
parent | b4b068526d989a7b90162237eef96d7bd20e5462 (diff) |
Refactor blackbox tests.
We want runQbs() to be more flexible while not adding even more function
parameters, so aggregate the possible parameters in a new data
structure.
Change-Id: Ia2f47b7555c8ec5e4ad85ce6b69861e32c764478
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 97 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 35 |
2 files changed, 92 insertions, 40 deletions
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 540d20ae6..54c31e966 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -67,18 +67,20 @@ TestBlackbox::TestBlackbox() QLocale::setDefault(QLocale::c()); } -int TestBlackbox::runQbs(QStringList arguments, bool expectFailure, bool useProfile) +int TestBlackbox::runQbs(const QbsRunParameters ¶ms) { - if (useProfile) - arguments.append(QLatin1String("profile:") + buildProfile); + QStringList args = params.arguments; + if (params.useProfile) + args.append(QLatin1String("profile:") + buildProfile); QString cmdLine = qbsExecutableFilePath; - foreach (const QString &str, arguments) + foreach (const QString &str, args) cmdLine += QLatin1String(" \"") + str + QLatin1Char('"'); QProcess process; + process.setProcessEnvironment(params.environment); process.start(cmdLine); if (!process.waitForStarted() || !process.waitForFinished()) { m_qbsStderr = process.readAllStandardError(); - if (!expectFailure) + if (!params.expectFailure) qDebug("%s", qPrintable(process.errorString())); return -1; } @@ -86,7 +88,7 @@ int TestBlackbox::runQbs(QStringList arguments, bool expectFailure, bool useProf m_qbsStderr = process.readAllStandardError(); m_qbsStdout = process.readAllStandardOutput(); if ((process.exitStatus() != QProcess::NormalExit - || process.exitCode() != 0) && !expectFailure) { + || process.exitCode() != 0) && !params.expectFailure) { qDebug("%s", m_qbsStderr.constData()); qDebug("%s", process.readAllStandardOutput().constData()); } @@ -241,7 +243,7 @@ void TestBlackbox::build_project_dry_run() QDir::setCurrent(testDataDir + projectSubDir); rmDirR(buildDir); - QCOMPARE(runQbs(QStringList() << "-n"), 0); + QCOMPARE(runQbs(QbsRunParameters("-n")), 0); const QStringList &buildDirContents = QDir(buildDir).entryList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs); QVERIFY2(buildDirContents.isEmpty(), qPrintable(buildDirContents.join(" "))); @@ -307,7 +309,7 @@ void TestBlackbox::resolve_project() QDir::setCurrent(testDataDir + projectSubDir); rmDirR(buildDir); - QCOMPARE(runQbs(QStringList() << QLatin1String("resolve")), 0); + QCOMPARE(runQbs(QbsRunParameters("resolve")), 0); QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName)); QVERIFY(QFile::exists(buildGraphPath)); } @@ -327,7 +329,7 @@ void TestBlackbox::resolve_project_dry_run() QDir::setCurrent(testDataDir + projectSubDir); rmDirR(buildDir); - QCOMPARE(runQbs(QStringList() << QLatin1String("resolve") << QLatin1String("-n")), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("resolve") << "-n")), 0); QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName)); QVERIFY2(!QFile::exists(buildGraphPath), qPrintable(buildGraphPath)); } @@ -347,7 +349,7 @@ void TestBlackbox::clean() QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(QFile(depObjectFilePath).exists()); QVERIFY(QFile(depExeFilePath).exists()); - QCOMPARE(runQbs(QStringList("clean")), 0); + QCOMPARE(runQbs(QbsRunParameters("clean")), 0); QVERIFY(!QFile(appObjectFilePath).exists()); QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(!QFile(depObjectFilePath).exists()); @@ -357,7 +359,7 @@ void TestBlackbox::clean() QCOMPARE(runQbs(), 0); QVERIFY(QFile(appObjectFilePath).exists()); QVERIFY(QFile(appExeFilePath).exists()); - QCOMPARE(runQbs(QStringList("clean") << "--all-artifacts"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("clean") << "--all-artifacts")), 0); QVERIFY(!QFile(appObjectFilePath).exists()); QVERIFY(!QFile(appExeFilePath).exists()); QVERIFY(!QFile(depObjectFilePath).exists()); @@ -367,7 +369,7 @@ void TestBlackbox::clean() QCOMPARE(runQbs(), 0); QVERIFY(QFile(appObjectFilePath).exists()); QVERIFY(QFile(appExeFilePath).exists()); - QCOMPARE(runQbs(QStringList("clean") << "--all-artifacts" << "-n"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("clean") << "--all-artifacts" << "-n")), 0); QVERIFY(QFile(appObjectFilePath).exists()); QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(QFile(depObjectFilePath).exists()); @@ -379,7 +381,8 @@ void TestBlackbox::clean() QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(QFile(depObjectFilePath).exists()); QVERIFY(QFile(depExeFilePath).exists()); - QCOMPARE(runQbs(QStringList("clean") << "--all-artifacts" << "-p" << "dep"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("clean") << "--all-artifacts" << "-p" << "dep")), + 0); QVERIFY(QFile(appObjectFilePath).exists()); QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(!QFile(depObjectFilePath).exists()); @@ -391,7 +394,8 @@ void TestBlackbox::clean() QVERIFY(QFile(appExeFilePath).exists()); QVERIFY(QFile(depObjectFilePath).exists()); QVERIFY(QFile(depExeFilePath).exists()); - QCOMPARE(runQbs(QStringList("clean") << "--all-artifacts" << "-p" << "app"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("clean") << "--all-artifacts" << "-p" << "app")), + 0); QVERIFY(!QFile(appObjectFilePath).exists()); QVERIFY(!QFile(appExeFilePath).exists()); QVERIFY(QFile(depObjectFilePath).exists()); @@ -619,7 +623,9 @@ void TestBlackbox::trackAddMocInclude() ccp("before", "work"); QDir::setCurrent(testDataDir + "/trackAddMocInclude/work"); // The build must fail because the main.moc include is missing. - QVERIFY(runQbs(QStringList(), true) != 0); + QbsRunParameters params; + params.expectFailure = true; + QVERIFY(runQbs(params) != 0); waitForNewTimestamp(); ccp("../after", "."); @@ -635,8 +641,8 @@ void TestBlackbox::trackAddProduct() QDir().mkdir("work"); ccp("before", "work"); QDir::setCurrent(testDataDir + "/trackProducts/work"); - const QStringList args = QStringList() << "-f" << "trackProducts.qbs"; - QCOMPARE(runQbs(args), 0); + QbsRunParameters params(QStringList() << "-f" << "trackProducts.qbs"); + QCOMPARE(runQbs(params), 0); QVERIFY(m_qbsStdout.contains("compiling foo.cpp")); QVERIFY(m_qbsStdout.contains("compiling bar.cpp")); QVERIFY(m_qbsStdout.contains("linking product1")); @@ -645,7 +651,7 @@ void TestBlackbox::trackAddProduct() waitForNewTimestamp(); ccp("../after", "."); touch("trackProducts.qbs"); - QCOMPARE(runQbs(args), 0); + QCOMPARE(runQbs(params), 0); QVERIFY(m_qbsStdout.contains("compiling zoo.cpp")); QVERIFY(m_qbsStdout.contains("linking product3")); QVERIFY(!m_qbsStdout.contains("compiling foo.cpp")); @@ -663,8 +669,8 @@ void TestBlackbox::trackRemoveProduct() ccp("before", "work"); ccp("after", "work"); QDir::setCurrent(testDataDir + "/trackProducts/work"); - const QStringList args = QStringList() << "-f" << "trackProducts.qbs"; - QCOMPARE(runQbs(args), 0); + QbsRunParameters params(QStringList() << "-f" << "trackProducts.qbs"); + QCOMPARE(runQbs(params), 0); QVERIFY(m_qbsStdout.contains("compiling foo.cpp")); QVERIFY(m_qbsStdout.contains("compiling bar.cpp")); QVERIFY(m_qbsStdout.contains("compiling zoo.cpp")); @@ -678,7 +684,7 @@ void TestBlackbox::trackRemoveProduct() QFile::remove("trackProducts.qbs"); QFile::copy("../before/trackProducts.qbs", "trackProducts.qbs"); touch("trackProducts.qbs"); - QCOMPARE(runQbs(args), 0); + QCOMPARE(runQbs(params), 0); QVERIFY(!m_qbsStdout.contains("compiling foo.cpp")); QVERIFY(!m_qbsStdout.contains("compiling bar.cpp")); QVERIFY(!m_qbsStdout.contains("compiling zoo.cpp")); @@ -690,10 +696,10 @@ void TestBlackbox::trackRemoveProduct() void TestBlackbox::wildcardRenaming() { QDir::setCurrent(testDataDir + "/wildcard_renaming"); - QCOMPARE(runQbs(QStringList("install")), 0); + QCOMPARE(runQbs(QbsRunParameters("install")), 0); QVERIFY(QFileInfo(defaultInstallRoot + "/pioniere.txt").exists()); QFile::rename(QDir::currentPath() + "/pioniere.txt", QDir::currentPath() + "/fdj.txt"); - QCOMPARE(runQbs(QStringList("install") << "--remove-first"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("install") << "--remove-first")), 0); QVERIFY(!QFileInfo(defaultInstallRoot + "/pioniere.txt").exists()); QVERIFY(QFileInfo(defaultInstallRoot + "/fdj.txt").exists()); } @@ -701,12 +707,12 @@ void TestBlackbox::wildcardRenaming() void TestBlackbox::recursiveRenaming() { QDir::setCurrent(testDataDir + "/recursive_renaming"); - QCOMPARE(runQbs(QStringList("install")), 0); + QCOMPARE(runQbs(QbsRunParameters("install")), 0); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/wasser.txt").exists()); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/subdir/blubb.txt").exists()); waitForNewTimestamp(); QVERIFY(QFile::rename(QDir::currentPath() + "/dir/wasser.txt", QDir::currentPath() + "/dir/wein.txt")); - QCOMPARE(runQbs(QStringList("install") << "--remove-first"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("install") << "--remove-first")), 0); QVERIFY(!QFileInfo(defaultInstallRoot + "/dir/wasser.txt").exists()); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/wein.txt").exists()); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/subdir/blubb.txt").exists()); @@ -715,7 +721,7 @@ void TestBlackbox::recursiveRenaming() void TestBlackbox::recursiveWildcards() { QDir::setCurrent(testDataDir + "/recursive_wildcards"); - QCOMPARE(runQbs(QStringList("install")), 0); + QCOMPARE(runQbs(QbsRunParameters("install")), 0); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/file1.txt").exists()); QVERIFY(QFileInfo(defaultInstallRoot + "/dir/file2.txt").exists()); } @@ -746,19 +752,22 @@ void TestBlackbox::missingQObjectHeader() qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n" " files: ['main.cpp', 'myobject.cpp']\n}"); qbsFile.close(); - QVERIFY(runQbs(QStringList(), true) != 0); + QbsRunParameters params; + params.expectFailure = true; + QVERIFY(runQbs(params) != 0); QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate)); qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n" " files: ['main.cpp', 'myobject.cpp','myobject.h']\n}"); qbsFile.close(); QEXPECT_FAIL("", "FIXME: This case is known to be broken", Abort); - QCOMPARE(runQbs(QStringList(), true), 0); + QCOMPARE(runQbs(params), 0); } void TestBlackbox::productProperties() { QDir::setCurrent(testDataDir + "/productproperties"); - QCOMPARE(runQbs(QStringList() << QLatin1String("-f") << QLatin1String("project.qbs"), true), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList() << QLatin1String("-f") + << QLatin1String("project.qbs"))), 0); QVERIFY(QFile::exists(buildDir + HostOsInfo::appendExecutableSuffix("/blubb_user"))); } @@ -815,11 +824,12 @@ void TestBlackbox::installedApp() { QDir::setCurrent(testDataDir + "/installed_artifact"); - QCOMPARE(runQbs(QStringList("install")), 0); + QCOMPARE(runQbs(QbsRunParameters("install")), 0); QVERIFY(QFile::exists(defaultInstallRoot + HostOsInfo::appendExecutableSuffix(QLatin1String("/bin/installedApp")))); - QCOMPARE(runQbs(QStringList("install") << "--install-root" << (testDataDir + "/installed-app")), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("install") << "--install-root" + << (testDataDir + "/installed-app"))), 0); QVERIFY(QFile::exists(testDataDir + HostOsInfo::appendExecutableSuffix("/installed-app/bin/installedApp"))); @@ -827,7 +837,7 @@ void TestBlackbox::installedApp() QVERIFY(addedFile.open(QIODevice::WriteOnly)); addedFile.close(); QVERIFY(addedFile.exists()); - QCOMPARE(runQbs(QStringList("install") << "--remove-first"), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("install") << "--remove-first")), 0); QVERIFY(QFile::exists(defaultInstallRoot + HostOsInfo::appendExecutableSuffix(QLatin1String("/bin/installedApp")))); QVERIFY(!addedFile.exists()); @@ -835,19 +845,26 @@ void TestBlackbox::installedApp() void TestBlackbox::toolLookup() { - QCOMPARE(runQbs(QStringList("detect-toolchains") << "--help", false, false), 0); + QbsRunParameters params(QStringList("detect-toolchains") << "--help"); + params.useProfile = false; + QCOMPARE(runQbs(params), 0); } void TestBlackbox::checkProjectFilePath() { QDir::setCurrent(testDataDir + "/project_filepath_check"); - QCOMPARE(runQbs(QStringList("-f") << "project1.qbs"), 0); - QCOMPARE(runQbs(QStringList("-f") << "project1.qbs"), 0); + QbsRunParameters params(QStringList("-f") << "project1.qbs"); + QCOMPARE(runQbs(params), 0); + QCOMPARE(runQbs(params), 0); - QVERIFY(runQbs(QStringList("-f") << "project2.qbs", true) != 0); + params.arguments = QStringList("-f") << "project2.qbs"; + params.expectFailure = true; + QVERIFY(runQbs(params) != 0); QVERIFY(m_qbsStderr.contains("project file")); - QCOMPARE(runQbs(QStringList("-f") << "project2.qbs" << "--force"), 0); + params.arguments = QStringList("-f") << "project2.qbs" << "--force"; + params.expectFailure = false; + QCOMPARE(runQbs(params), 0); QVERIFY(m_qbsStderr.contains("project file")); } @@ -857,7 +874,11 @@ void TestBlackbox::missingProfile() if (!settings->defaultProfile().isEmpty()) SKIP_TEST("default profile exists"); QDir::setCurrent(testDataDir + "/project_filepath_check"); - QVERIFY(runQbs(QStringList("-f") << "project1.qbs", true, false) != 0); + QbsRunParameters params; + params.arguments = QStringList("-f") << "project1.qbs"; + params.expectFailure = true; + params.useProfile = false; + QVERIFY(runQbs(params) != 0); QVERIFY(m_qbsStderr.contains("No profile")); } diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index f2ca762ef..72a50c7ed 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -34,8 +34,40 @@ #include <QFile> #include <QFileInfo> #include <QProcess> +#include <QProcessEnvironment> #include <QtTest> +class QbsRunParameters +{ +public: + QbsRunParameters() + { + init(); + } + + QbsRunParameters(const QStringList &args) : arguments(args) + { + init(); + } + + QbsRunParameters(const QString &arg) : arguments(arg) + { + init(); + } + + void init() + { + expectFailure = false; + useProfile = true; + environment = QProcessEnvironment::systemEnvironment(); + } + + QStringList arguments; + QProcessEnvironment environment; + bool expectFailure; + bool useProfile; +}; + class TestBlackbox : public QObject { Q_OBJECT @@ -51,8 +83,7 @@ public: TestBlackbox(); protected: - int runQbs(QStringList arguments = QStringList(), bool expectFailure = false, - bool useProfile = true); + int runQbs(const QbsRunParameters ¶ms = QbsRunParameters()); void rmDirR(const QString &dir); void touch(const QString &fn); static void waitForNewTimestamp(); |