diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-11-22 10:28:38 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-11-22 11:58:41 +0000 |
commit | 9246a77a2f3e8dfc81b624b4cae1184cd9eaf6bd (patch) | |
tree | 627261e874e8ccf6d9cf134a5ca8c76699ffcf06 /tests/auto/utils | |
parent | 1c0bdb693e8887e0291e1c3d6174bb955e383e29 (diff) |
SettingsAccessor: Add tests for version upgrading
Change-Id: Ie41433b507bdd68b834a6fc1879f3f1b71f7b4ff
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'tests/auto/utils')
-rw-r--r-- | tests/auto/utils/settings/tst_settings.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/auto/utils/settings/tst_settings.cpp b/tests/auto/utils/settings/tst_settings.cpp index 766d573289..68436a7005 100644 --- a/tests/auto/utils/settings/tst_settings.cpp +++ b/tests/auto/utils/settings/tst_settings.cpp @@ -33,6 +33,14 @@ const char TESTACCESSOR_DN[] = "Test Settings Accessor"; const char TESTACCESSOR_APPLICATION_DN[] = "SettingsAccessor Test (Basic)"; const char TESTACCESSOR_DEFAULT_ID[] = "testId"; +QVariantMap generateExtraData() +{ + QVariantMap extra; + extra.insert("Foo", "Bar"); + extra.insert("Int", 42); + return extra; +} + // -------------------------------------------------------------------- // TestVersionUpgrader: // -------------------------------------------------------------------- @@ -89,6 +97,7 @@ public: // Make methods public for the tests: using Utils::SettingsAccessor::isValidVersionAndId; using Utils::SettingsAccessor::isBetterMatch; + using Utils::SettingsAccessor::upgradeSettings; }; // -------------------------------------------------------------------- @@ -115,6 +124,13 @@ private slots: void isBetterMatch_sameVersion(); void isBetterMatch_emptyMap(); void isBetterMatch_twoEmptyMaps(); + + void upgradeSettings_noUpgradeNecessary(); + void upgradeSettings_invalidId(); + void upgradeSettings_tooOld(); + void upgradeSettings_tooNew(); + void upgradeSettings_oneStep(); + void upgradeSettings_twoSteps(); }; static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(), @@ -288,6 +304,133 @@ void tst_SettingsAccessor::isBetterMatch_twoEmptyMaps() QVERIFY(!accessor.isBetterMatch(b, a)); } +void tst_SettingsAccessor::upgradeSettings_noUpgradeNecessary() +{ + const TestSettingsAccessor accessor; + const int startVersion = 8; + const QVariantMap input = versionedMap(startVersion, TESTACCESSOR_DEFAULT_ID, generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") + QCOMPARE(it.value().toInt(), startVersion); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + else + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added +} + +void tst_SettingsAccessor::upgradeSettings_invalidId() +{ + const TestSettingsAccessor accessor; + const int startVersion = 8; + const QVariantMap input = versionedMap(startVersion, "foo", generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + // "OriginalVersion" was added. + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") + QCOMPARE(it.value().toInt(), startVersion); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + else + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added +} + +void tst_SettingsAccessor::upgradeSettings_tooOld() +{ + const TestSettingsAccessor accessor; + const int startVersion = 1; + const QVariantMap input = versionedMap(startVersion, TESTACCESSOR_DEFAULT_ID, generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + // "OriginalVersion" was added. + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") + QCOMPARE(it.value().toInt(), startVersion); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + else + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added +} + +void tst_SettingsAccessor::upgradeSettings_tooNew() +{ + const TestSettingsAccessor accessor; + const int startVersion = 42; + const QVariantMap input = versionedMap(startVersion, TESTACCESSOR_DEFAULT_ID, generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + // "OriginalVersion" was added. + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") + QCOMPARE(it.value().toInt(), startVersion); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + else + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 1); // OriginalVersion was added +} + +void tst_SettingsAccessor::upgradeSettings_oneStep() +{ + const TestSettingsAccessor accessor; + const int startVersion = 7; + const QVariantMap input = versionedMap(startVersion, TESTACCESSOR_DEFAULT_ID, generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") // was added + QCOMPARE(it.value().toInt(), startVersion); + else if (it.key() == "Version") // was overridden + QCOMPARE(it.value().toInt(), 8); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + else if (it.key() == "VERSION_7") + QCOMPARE(it.value().toInt(), 7); + else + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 2); // OriginalVersion + VERSION_7 was added +} + +void tst_SettingsAccessor::upgradeSettings_twoSteps() +{ + const TestSettingsAccessor accessor; + const int startVersion = 6; + const QVariantMap input = versionedMap(startVersion, TESTACCESSOR_DEFAULT_ID, generateExtraData()); + + const QVariantMap result = accessor.upgradeSettings(input); + + for (auto it = result.cbegin(); it != result.cend(); ++it) { + if (it.key() == "OriginalVersion") // was added + QCOMPARE(it.value().toInt(), startVersion); + else if (it.key() == "Version") // was overridden + QCOMPARE(it.value().toInt(), 8); + else if (input.contains(it.key())) // extra settings pass through unchanged! + QCOMPARE(it.value(), input.value(it.key())); + 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 + QVERIFY2(false, "Unexpected value found in upgraded result!"); + } + QCOMPARE(result.size(), input.size() + 3); // OriginalVersion + VERSION_6 + VERSION_7 was added +} + QTEST_MAIN(tst_SettingsAccessor) #include "tst_settings.moc" |