diff options
Diffstat (limited to 'tests/auto/blackbox/tst_blackbox.cpp')
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 190 |
1 files changed, 61 insertions, 129 deletions
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 1b9fa0b15..1082ba595 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -5958,6 +5958,67 @@ void TestBlackbox::qbsConfig() } } +void TestBlackbox::qbsConfigAddProfile() +{ + QbsRunParameters params("config"); + QTemporaryDir settingsDir1; + QTemporaryDir settingsDir2; + QVERIFY(settingsDir1.isValid()); + QVERIFY(settingsDir2.isValid()); + const QStringList settingsDir1Args = QStringList{"--settings-dir", settingsDir1.path()}; + const QStringList settingsDir2Args = QStringList{"--settings-dir", settingsDir2.path()}; + + QFETCH(QStringList, args); + QFETCH(QString, errorMsg); + + // Step 1: Run --add-profile. + params.arguments = settingsDir1Args; + params.arguments << "--add-profile"; + params.arguments << args; + params.expectFailure = !errorMsg.isEmpty(); + QCOMPARE(runQbs(params) == 0, !params.expectFailure); + if (params.expectFailure) { + QVERIFY(QString::fromLocal8Bit(m_qbsStderr).contains(errorMsg)); + return; + } + params.expectFailure = false; + params.arguments = settingsDir1Args; + params.arguments << "--list"; + QCOMPARE(runQbs(params), 0); + const QByteArray output1 = m_qbsStdout; + + // Step 2: Set properties manually. + for (int i = 1; i < args.size(); i += 2) { + params.arguments = settingsDir2Args; + params.arguments << ("profiles." + args.first() + '.' + args.at(i)) << args.at(i + 1); + QCOMPARE(runQbs(params), 0); + } + params.arguments = settingsDir2Args; + params.arguments << "--list"; + QCOMPARE(runQbs(params), 0); + const QByteArray output2 = m_qbsStdout; + + // Step3: Compare results. + QCOMPARE(output1, output2); +} + +void TestBlackbox::qbsConfigAddProfile_data() +{ + QTest::addColumn<QStringList>("args"); + QTest::addColumn<QString>("errorMsg"); + QTest::newRow("no arguments") << QStringList() << QString("Profile name missing"); + QTest::newRow("empty name") << QStringList{"", "p", "v"} + << QString("Profile name must not be empty"); + QTest::newRow("no properties") << QStringList("p") + << QString("Profile properties must be provided"); + QTest::newRow("one property") << QStringList{"p", "p", "v"} << QString(); + QTest::newRow("two properties") << QStringList{"p", "p1", "v1", "p2", "v2"} << QString(); + QTest::newRow("missing value") << QStringList{"p", "p"} + << QString("Profile properties must be key/value pairs"); + QTest::newRow("missing values") << QStringList{"p", "p1", "v1", "p2"} + << QString("Profile properties must be key/value pairs"); +} + static QJsonObject getNextSessionPacket(QProcess &session, QByteArray &data) { int totalSize = -1; @@ -7362,94 +7423,6 @@ void TestBlackbox::generator_data() QTest::newRow("no update") << QString() << QStringList(); } -static bool haveWiX(const Profile &profile) -{ - if (profile.value("wix.toolchainInstallPath").isValid() && - profile.value("wix.toolchainInstallRoot").isValid()) { - return true; - } - - QStringList regKeys; - regKeys << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows Installer XML\\") - << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Installer XML\\"); - - QStringList paths = QProcessEnvironment::systemEnvironment().value("PATH") - .split(HostOsInfo::pathListSeparator(), QBS_SKIP_EMPTY_PARTS); - - for (const QString &key : qAsConst(regKeys)) { - const QStringList versions = QSettings(key, QSettings::NativeFormat).childGroups(); - for (const QString &version : versions) { - QSettings settings(key + version, QSettings::NativeFormat); - QString str = settings.value(QStringLiteral("InstallRoot")).toString(); - if (!str.isEmpty()) - paths.prepend(str); - } - } - - for (const QString &path : qAsConst(paths)) { - if (regularFileExists(QDir::fromNativeSeparators(path) + - HostOsInfo::appendExecutableSuffix(QStringLiteral("/candle"))) && - regularFileExists(QDir::fromNativeSeparators(path) + - HostOsInfo::appendExecutableSuffix(QStringLiteral("/light")))) { - return true; - } - } - - return false; -} - -void TestBlackbox::wix() -{ - const SettingsPtr s = settings(); - Profile profile(profileName(), s.get()); - - if (!haveWiX(profile)) { - QSKIP("WiX is not installed"); - return; - } - - QByteArray arch = profile.value("qbs.architecture").toString().toLatin1(); - if (arch.isEmpty()) - arch = QByteArrayLiteral("x86"); - - QDir::setCurrent(testDataDir + "/wix"); - QCOMPARE(runQbs(), 0); - QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout); - QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.msi")); - - if (HostOsInfo::isWindowsHost()) { - QVERIFY2(m_qbsStdout.contains("compiling QbsBootstrapper.wxs"), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains("linking qbs-setup-" + arch + ".exe"), m_qbsStdout); - QVERIFY(regularFileExists(relativeProductBuildDir("QbsBootstrapper") - + "/qbs-setup-" + arch + ".exe")); - } -} - -void TestBlackbox::wixDependencies() -{ - const SettingsPtr s = settings(); - Profile profile(profileName(), s.get()); - - if (!haveWiX(profile)) { - QSKIP("WiX is not installed"); - return; - } - - QByteArray arch = profile.value("qbs.architecture").toString().toLatin1(); - if (arch.isEmpty()) - arch = QByteArrayLiteral("x86"); - - QDir::setCurrent(testDataDir + "/wixDependencies"); - QbsRunParameters params; - if (!HostOsInfo::isWindowsHost()) - params.arguments << "qbs.targetOS:windows"; - QCOMPARE(runQbs(params), 0); - QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout); - QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.msi")); -} - void TestBlackbox::nodejs() { const SettingsPtr s = settings(); @@ -7567,47 +7540,6 @@ void TestBlackbox::includeLookup() QVERIFY2(m_qbsStdout.contains("definition.."), m_qbsStdout.constData()); } -void TestBlackbox::innoSetup() -{ - const SettingsPtr s = settings(); - Profile profile(profileName(), s.get()); - - QDir::setCurrent(testDataDir + "/innosetup"); - - QCOMPARE(runQbs({"resolve"}), 0); - const bool withInnosetup = m_qbsStdout.contains("has innosetup: true"); - const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false"); - QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData()); - if (withoutInnosetup) - QSKIP("innosetup module not present"); - - QCOMPARE(runQbs(), 0); - QVERIFY(m_qbsStdout.contains("compiling test.iss")); - QVERIFY(m_qbsStdout.contains("compiling Example1.iss")); - QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.setup.test.exe")); - QVERIFY(regularFileExists(relativeProductBuildDir("Example1") + "/Example1.exe")); -} - -void TestBlackbox::innoSetupDependencies() -{ - const SettingsPtr s = settings(); - Profile profile(profileName(), s.get()); - - QDir::setCurrent(testDataDir + "/innosetupDependencies"); - - QCOMPARE(runQbs({"resolve"}), 0); - const bool withInnosetup = m_qbsStdout.contains("has innosetup: true"); - const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false"); - QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData()); - if (withoutInnosetup) - QSKIP("innosetup module not present"); - - QbsRunParameters params; - QCOMPARE(runQbs(params), 0); - QVERIFY(m_qbsStdout.contains("compiling test.iss")); - QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.setup.test.exe")); -} - void TestBlackbox::inputTagsChangeTracking_data() { QTest::addColumn<QString>("generateInput"); |