diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-05-14 12:20:33 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-01 07:19:24 +0000 |
commit | 40746dae36452398649481fecad9cdc5f25cc80f (patch) | |
tree | c97c73364bdd5dfd3069b7a0b062fcee8ef38182 /tests | |
parent | 78e19d1f234bb1ba9957c877e57d128f09d1459a (diff) |
Add support for system-level settings
In addition to the traditional per-user settings, there is now also a
system-wide settings file affecting all users. The file's platform-
specific default location can be overridden at build time.
The qbs-config tool can write these settings via the new --system
option.
[ChangeLog] Introduced the concept of system-level qbs settings
Change-Id: Ie6f675a74e96ce1fa7b2dd0712f6106071e848a6
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/blackbox/blackbox.pro | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/blackbox.qbs | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 89 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 | ||||
-rw-r--r-- | tests/auto/tools/tst_tools.cpp | 4 |
5 files changed, 94 insertions, 2 deletions
diff --git a/tests/auto/blackbox/blackbox.pro b/tests/auto/blackbox/blackbox.pro index 5e58e0e19..42848d077 100644 --- a/tests/auto/blackbox/blackbox.pro +++ b/tests/auto/blackbox/blackbox.pro @@ -4,6 +4,7 @@ HEADERS = tst_blackbox.h tst_blackboxbase.h SOURCES = tst_blackbox.cpp tst_blackboxbase.cpp OBJECTS_DIR = generic MOC_DIR = $${OBJECTS_DIR}-moc +qbs_enable_unit_tests:DEFINES += QBS_ENABLE_UNIT_TESTS include(../auto.pri) diff --git a/tests/auto/blackbox/blackbox.qbs b/tests/auto/blackbox/blackbox.qbs index 55c116480..917e8345b 100644 --- a/tests/auto/blackbox/blackbox.qbs +++ b/tests/auto/blackbox/blackbox.qbs @@ -25,4 +25,5 @@ QbsAutotest { "tst_blackbox.h", ] cpp.defines: base.concat(["SRCDIR=" + Utilities.cStringQuote(path)]) + .concat(qbsbuildconfig.enableUnitTests ? ["QBS_ENABLE_UNIT_TESTS"] : []) } diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 8ca35249a..844b421c4 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -33,6 +33,7 @@ #include <api/languageinfo.h> #include <tools/hostosinfo.h> #include <tools/installoptions.h> +#include <tools/preferences.h> #include <tools/profile.h> #include <tools/qttools.h> #include <tools/shellutils.h> @@ -4600,6 +4601,94 @@ void TestBlackbox::pseudoMultiplexing() QCOMPARE(runQbs(), 0); } +void TestBlackbox::qbsConfig() +{ + QbsRunParameters params("config"); +#ifdef QBS_ENABLE_UNIT_TESTS + QTemporaryDir tempSystemSettingsDir; + params.environment.insert("QBS_AUTOTEST_SYSTEM_SETTINGS_DIR", tempSystemSettingsDir.path()); + QTemporaryDir tempUserSettingsDir; + QVERIFY(tempSystemSettingsDir.isValid()); + QVERIFY(tempUserSettingsDir.isValid()); + const QStringList settingsDirArgs = QStringList{"--settings-dir", tempUserSettingsDir.path()}; + + // Set values. + params.arguments = settingsDirArgs + QStringList{"--system", "key.subkey.scalar", "s"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + QStringList{"--system", "key.subkey.list", "['sl']"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + QStringList{"--user", "key.subkey.scalar", "u"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + QStringList{"key.subkey.list", "[\"u1\",\"u2\"]"}; + QCOMPARE(runQbs(params), 0); + + // Check outputs. + const auto valueExtractor = [this] { + const QByteArray trimmed = m_qbsStdout.trimmed(); + return trimmed.mid(trimmed.lastIndexOf(':') + 2); + }; + params.arguments = settingsDirArgs + QStringList{"--list", "key.subkey.scalar"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("\"u\"")); + params.arguments = settingsDirArgs + QStringList{"--list", "--user", "key.subkey.scalar"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("\"u\"")); + params.arguments = settingsDirArgs + QStringList{"--list", "--system", "key.subkey.scalar"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("\"s\"")); + params.arguments = settingsDirArgs + QStringList{"--list", "key.subkey.list"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("[\"u1\", \"u2\", \"sl\"]")); + params.arguments = settingsDirArgs + QStringList{"--list", "--user", "key.subkey.list"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("[\"u1\", \"u2\"]")); + params.arguments = settingsDirArgs + QStringList{"--list", "--system", "key.subkey.list"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("[\"sl\"]")); + + // Remove some values and re-check. + params.arguments = settingsDirArgs + QStringList{"--unset", "key.subkey.scalar"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + QStringList{"--system", "--unset", "key.subkey.list"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + QStringList{"--list", "key.subkey.scalar"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("\"s\"")); + params.arguments = settingsDirArgs + QStringList{"--list", "key.subkey.list"}; + QCOMPARE(runQbs(params), 0); + QCOMPARE(valueExtractor(), QByteArray("[\"u1\", \"u2\"]")); + + // Check preferences.ignoreSystemSearchPaths + params.arguments = settingsDirArgs + + QStringList{"--system", "preferences.qbsSearchPaths", "['/usr/lib/qbs']"}; + QCOMPARE(runQbs(params), 0); + params.arguments = settingsDirArgs + + QStringList{"preferences.qbsSearchPaths", "['/home/user/qbs']"}; + QCOMPARE(runQbs(params), 0); + qbs::Settings settings(tempUserSettingsDir.path(), tempSystemSettingsDir.path()); + const qbs::Preferences prefs(&settings, "SomeProfile"); + QVERIFY2(prefs.searchPaths().contains("/usr/lib/qbs") + && prefs.searchPaths().contains("/home/user/qbs"), + qPrintable(prefs.searchPaths().join(','))); + settings.setValue("profiles.SomeProfile.preferences.ignoreSystemSearchPaths", true); + QVERIFY2(!prefs.searchPaths().contains("/usr/lib/qbs") + && prefs.searchPaths().contains("/home/user/qbs"), + qPrintable(prefs.searchPaths().join(','))); + +#else + qDebug() << "ability to redirect the system settings dir not compiled in, skipping" + "most qbs-config tests"; +#endif // QBS_ENABLE_UNIT_TESTS + + // Check that trying to write to actual system settings causes access failure. + params.expectFailure = true; + params.environment.clear(); + params.arguments = QStringList{"--system", "key.subkey.scalar", "s"}; + QVERIFY(runQbs(params) != 0); + QVERIFY2(m_qbsStderr.contains("You do not have permission to write to that location."), + m_qbsStderr.constData()); +} + void TestBlackbox::radAfterIncompleteBuild_data() { QTest::addColumn<QString>("projectFileName"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index e5adc762f..6562e8cbc 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -205,6 +205,7 @@ private slots: void properQuoting(); void propertiesInExportItems(); void pseudoMultiplexing(); + void qbsConfig(); void qbsVersion(); void qtBug51237(); void radAfterIncompleteBuild(); diff --git a/tests/auto/tools/tst_tools.cpp b/tests/auto/tools/tst_tools.cpp index cf94553ba..0073f9e68 100644 --- a/tests/auto/tools/tst_tools.cpp +++ b/tests/auto/tools/tst_tools.cpp @@ -300,11 +300,11 @@ void TestTools::testSettingsMigration() if (hasOldSettings) { QVERIFY(QFileInfo(settings.baseDirectory() + "/qbs/" QBS_VERSION "/profiles/right.txt") .exists()); - QCOMPARE(settings.value("key").toString(), + QCOMPARE(settings.value("key", Settings::UserScope).toString(), settings.baseDirectory() + "/qbs/" QBS_VERSION "/profilesright"); } else { QVERIFY(!QFileInfo(settings.baseDirectory() + "/qbs/" QBS_VERSION "/profiles").exists()); - QVERIFY(settings.allKeys().empty()); + QVERIFY(settings.allKeys(Settings::UserScope).empty()); } } |