From 1aaed7477e751b6e7e0acf2023d8695ec483b2ee Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 20 Nov 2017 17:04:29 +0100 Subject: [PATCH] SettingsAccessor: Add tests to save/load values Change-Id: I08870a91c725eb6c5344545d8d829fc98a3231bc Reviewed-by: Marco Bubke --- tests/auto/utils/settings/tst_settings.cpp | 86 ++++++++++++++++++++-- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/tests/auto/utils/settings/tst_settings.cpp b/tests/auto/utils/settings/tst_settings.cpp index f926cdf2ef6..92a0e899890 100644 --- a/tests/auto/utils/settings/tst_settings.cpp +++ b/tests/auto/utils/settings/tst_settings.cpp @@ -23,8 +23,11 @@ ** ****************************************************************************/ +#include #include +#include + #include using namespace Utils; @@ -70,8 +73,9 @@ private: class BasicTestSettingsAccessor : public Utils::SettingsAccessor { public: - BasicTestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : - Utils::SettingsAccessor(Utils::FileName::fromString("/foo/bar")) + BasicTestSettingsAccessor(const Utils::FileName &baseName = Utils::FileName::fromString("/foo/bar"), + const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : + Utils::SettingsAccessor(baseName) { setDisplayName(TESTACCESSOR_DN); setApplicationDisplayName(TESTACCESSOR_APPLICATION_DN); @@ -86,8 +90,9 @@ public: class TestSettingsAccessor : public BasicTestSettingsAccessor { public: - TestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : - BasicTestSettingsAccessor(id) + TestSettingsAccessor(const Utils::FileName &baseName = Utils::FileName::fromString("/foo/baz"), + const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : + BasicTestSettingsAccessor(baseName, id) { addVersionUpgrader(std::make_unique(5)); addVersionUpgrader(std::make_unique(6)); @@ -142,6 +147,12 @@ private slots: void findIssues_tooOld(); void findIssues_wrongId(); void findIssues_nonDefaultPath(); + + void saveSettings(); + void loadSettings(); + +private: + QTemporaryDir m_tempDir; }; static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(), @@ -156,6 +167,11 @@ static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray() return result; } +static Utils::FileName testPath(const QTemporaryDir &td, const QString &name) +{ + return Utils::FileName::fromString(td.path() + "/" + name); +} + void tst_SettingsAccessor::addVersionUpgrader() { BasicTestSettingsAccessor accessor; @@ -273,7 +289,7 @@ void tst_SettingsAccessor::isBetterMatch_idMismatch() void tst_SettingsAccessor::isBetterMatch_noId() { - const TestSettingsAccessor accessor((QByteArray())); + const TestSettingsAccessor accessor(Utils::FileName::fromString("/foo/baz"), QByteArray()); const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID); const QVariantMap b = versionedMap(6, "foo"); @@ -471,7 +487,7 @@ void tst_SettingsAccessor::findIssues_ok() { const TestSettingsAccessor accessor; const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); - const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + const Utils::FileName path = Utils::FileName::fromString("/foo/baz.user"); const Utils::optional info = accessor.findIssues(data, path); @@ -533,6 +549,64 @@ void tst_SettingsAccessor::findIssues_nonDefaultPath() QVERIFY(info); } +void tst_SettingsAccessor::saveSettings() +{ + const TestSettingsAccessor accessor(testPath(m_tempDir, "saveSettings")); + const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); + + QVERIFY(accessor.saveSettings(data, nullptr)); + + PersistentSettingsReader reader; + QVERIFY(reader.load(testPath(m_tempDir, "saveSettings.user"))); + + const QVariantMap read = reader.restoreValues(); + + QVERIFY(!read.isEmpty()); + for (auto it = read.cbegin(); it != read.cend(); ++it) { + if (it.key() == "Version") // Version is always overridden to the latest on save! + QCOMPARE(it.value().toInt(), 8); + else if (data.contains(it.key())) + QCOMPARE(it.value(), data.value(it.key())); + else + QVERIFY2(false, "Unexpected value!"); + } + QCOMPARE(read.size(), data.size()); +} + +void tst_SettingsAccessor::loadSettings() +{ + const QVariantMap data = versionedMap(6, "loadSettings", generateExtraData()); + const Utils::FileName path = testPath(m_tempDir, "loadSettings"); + Utils::FileName fullPath = path; + fullPath.appendString(".user"); + + PersistentSettingsWriter writer(fullPath, "TestProfile"); + QString errorMessage; + writer.save(data, &errorMessage); + + QVERIFY(errorMessage.isEmpty()); + + const TestSettingsAccessor accessor(path, "loadSettings"); + const QVariantMap read = accessor.restoreSettings(nullptr); + + QVERIFY(!read.isEmpty()); + for (auto it = read.cbegin(); it != read.cend(); ++it) { + if (it.key() == "Version") // was overridden + QCOMPARE(it.value().toInt(), 8); + else if (it.key() == "OriginalVersion") // was added + QCOMPARE(it.value().toInt(), 6); + else if (it.key() == "VERSION_6") // was added + QCOMPARE(it.value().toInt(), 6); + else if (it.key() == "VERSION_7") // was added + QCOMPARE(it.value().toInt(), 7); + else if (data.contains(it.key())) + QCOMPARE(it.value(), data.value(it.key())); + else + QVERIFY2(false, "Unexpected value!"); + } + QCOMPARE(read.size(), data.size() + 3); +} + QTEST_MAIN(tst_SettingsAccessor) #include "tst_settings.moc"