diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-12-14 11:13:15 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-02-14 13:24:11 +0000 |
commit | 97cf4bb278388860642b7ce9bba6731ecec286d6 (patch) | |
tree | 9dcd0adf426bbe6271b644b8b9c0ede39cddd405 /tests/auto | |
parent | b95bbe1d57d5c55d714fae0a094b149faa02432c (diff) |
SettingsAccessor: Improve test by mocking out read/write operations
Change-Id: I4d4cf6ff0be3d4b8278a7613c26f2b1752304ad4
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/utils/settings/tst_settings.cpp | 97 |
1 files changed, 68 insertions, 29 deletions
diff --git a/tests/auto/utils/settings/tst_settings.cpp b/tests/auto/utils/settings/tst_settings.cpp index a0e2870b0b..5f4ef90229 100644 --- a/tests/auto/utils/settings/tst_settings.cpp +++ b/tests/auto/utils/settings/tst_settings.cpp @@ -23,7 +23,7 @@ ** ****************************************************************************/ -#include <utils/persistentsettings.h> +#include <utils/algorithm.h> #include <utils/settingsaccessor.h> #include <QTemporaryDir> @@ -71,12 +71,22 @@ class BasicTestSettingsAccessor : public Utils::MergingSettingsAccessor { public: BasicTestSettingsAccessor(const Utils::FileName &baseName = Utils::FileName::fromString("/foo/bar"), - const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : - Utils::MergingSettingsAccessor(std::make_unique<Utils::VersionedBackUpStrategy>(this), - "TestData", TESTACCESSOR_DN, TESTACCESSOR_APPLICATION_DN) + const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)); + + using Utils::MergingSettingsAccessor::addVersionUpgrader; + + QHash<Utils::FileName, QVariantMap> files() const { return m_files; } + void addFile(const Utils::FileName &path, const QVariantMap &data) const { m_files.insert(path, data); } + Utils::FileNameList fileNames() const { return m_files.keys(); } + QVariantMap fileContents(const Utils::FileName &path) const { return m_files.value(path); } + +protected: + RestoreData readFile(const Utils::FileName &path) const override { - setSettingsId(id); - setBaseFilePath(baseName); + if (!m_files.contains(path)) + return RestoreData("File not found.", "File not found.", Issue::Type::ERROR); + + return RestoreData(path, m_files.value(path)); } SettingsMergeResult merge(const SettingsMergeData &global, @@ -98,7 +108,42 @@ public: return qMakePair(key, secondary); } - using Utils::MergingSettingsAccessor::addVersionUpgrader; + Utils::optional<Issue> writeFile(const Utils::FileName &path, const QVariantMap &data) const override + { + if (data.isEmpty()) { + return Issue(QCoreApplication::translate("Utils::BasicSettingsAccessor", "Failed to Write File"), + QCoreApplication::translate("Utils::BasicSettingsAccessor", "There was nothing to write."), + Issue::Type::WARNING); + } + + addFile(path, data); + return nullopt; + } + +private: + mutable QHash<Utils::FileName, QVariantMap> m_files; +}; + +// -------------------------------------------------------------------- +// TestBackUpStrategy: +// -------------------------------------------------------------------- + +class BasicTestSettingsAccessor; + +class TestBackUpStrategy : public Utils::VersionedBackUpStrategy +{ +public: + TestBackUpStrategy(BasicTestSettingsAccessor *accessor) : + VersionedBackUpStrategy(accessor) + { } + + FileNameList readFileCandidates(const Utils::FileName &baseFileName) const + { + return Utils::filtered(static_cast<const BasicTestSettingsAccessor *>(accessor())->fileNames(), + [&baseFileName](const Utils::FileName &f) { + return f.parentDir() == baseFileName.parentDir() && f.toString().startsWith(baseFileName.toString()); + }); + } }; // -------------------------------------------------------------------- @@ -121,6 +166,14 @@ public: using Utils::MergingSettingsAccessor::upgradeSettings; }; +BasicTestSettingsAccessor::BasicTestSettingsAccessor(const FileName &baseName, const QByteArray &id) : + Utils::MergingSettingsAccessor(std::make_unique<TestBackUpStrategy>(this), + "TestData", TESTACCESSOR_DN, TESTACCESSOR_APPLICATION_DN) +{ + setSettingsId(id); + setBaseFilePath(baseName); +} + // -------------------------------------------------------------------- // tst_SettingsAccessor: // -------------------------------------------------------------------- @@ -167,9 +220,6 @@ private slots: void saveSettings(); void loadSettings(); - -private: - QTemporaryDir m_tempDir; }; static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(), @@ -196,11 +246,6 @@ static Utils::BasicSettingsAccessor::RestoreData restoreData(const QByteArray &p return restoreData(Utils::FileName::fromUtf8(path), data); } -static Utils::FileName testPath(const QTemporaryDir &td, const QString &name) -{ - return Utils::FileName::fromString(td.path() + "/" + name); -} - void tst_SettingsAccessor::addVersionUpgrader() { BasicTestSettingsAccessor accessor; @@ -621,15 +666,14 @@ void tst_SettingsAccessor::findIssues_nonDefaultPath() void tst_SettingsAccessor::saveSettings() { - const TestSettingsAccessor accessor(testPath(m_tempDir, "saveSettings")); + const Utils::FileName baseFile = Utils::FileName::fromString("/tmp/foo/saveSettings"); + const TestSettingsAccessor accessor(baseFile); const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); QVERIFY(accessor.saveSettings(data, nullptr)); - PersistentSettingsReader reader; - QVERIFY(reader.load(testPath(m_tempDir, "saveSettings"))); - - const QVariantMap read = reader.restoreValues(); + QCOMPARE(accessor.files().count(), 1); + const QVariantMap read = accessor.fileContents(baseFile); QVERIFY(!read.isEmpty()); for (auto it = read.cbegin(); it != read.cend(); ++it) { @@ -646,18 +690,13 @@ void tst_SettingsAccessor::saveSettings() void tst_SettingsAccessor::loadSettings() { const QVariantMap data = versionedMap(6, "loadSettings", generateExtraData()); - const Utils::FileName path = testPath(m_tempDir, "loadSettings"); - Utils::FileName fullPath = path; - - PersistentSettingsWriter writer(fullPath, "TestProfile"); - QString errorMessage; - writer.save(data, &errorMessage); + const Utils::FileName path = Utils::FileName::fromString("/tmp/foo/loadSettings"); + const TestSettingsAccessor accessor(path, "loadSettings"); + accessor.addFile(path, data); - QVERIFY(errorMessage.isEmpty()); + QCOMPARE(accessor.files().count(), 1); - 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 |