aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-12-14 11:13:15 +0100
committerTobias Hunger <tobias.hunger@qt.io>2018-02-14 13:24:11 +0000
commit97cf4bb278388860642b7ce9bba6731ecec286d6 (patch)
tree9dcd0adf426bbe6271b644b8b9c0ede39cddd405 /tests/auto
parentb95bbe1d57d5c55d714fae0a094b149faa02432c (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.cpp97
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