SettingsAccessor: Add tests to save/load values

Change-Id: I08870a91c725eb6c5344545d8d829fc98a3231bc
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Tobias Hunger
2017-11-20 17:04:29 +01:00
parent c738198185
commit 1aaed7477e

View File

@@ -23,8 +23,11 @@
** **
****************************************************************************/ ****************************************************************************/
#include <utils/persistentsettings.h>
#include <utils/settingsaccessor.h> #include <utils/settingsaccessor.h>
#include <QTemporaryDir>
#include <QtTest> #include <QtTest>
using namespace Utils; using namespace Utils;
@@ -70,8 +73,9 @@ private:
class BasicTestSettingsAccessor : public Utils::SettingsAccessor class BasicTestSettingsAccessor : public Utils::SettingsAccessor
{ {
public: public:
BasicTestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : BasicTestSettingsAccessor(const Utils::FileName &baseName = Utils::FileName::fromString("/foo/bar"),
Utils::SettingsAccessor(Utils::FileName::fromString("/foo/bar")) const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
Utils::SettingsAccessor(baseName)
{ {
setDisplayName(TESTACCESSOR_DN); setDisplayName(TESTACCESSOR_DN);
setApplicationDisplayName(TESTACCESSOR_APPLICATION_DN); setApplicationDisplayName(TESTACCESSOR_APPLICATION_DN);
@@ -86,8 +90,9 @@ public:
class TestSettingsAccessor : public BasicTestSettingsAccessor class TestSettingsAccessor : public BasicTestSettingsAccessor
{ {
public: public:
TestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) : TestSettingsAccessor(const Utils::FileName &baseName = Utils::FileName::fromString("/foo/baz"),
BasicTestSettingsAccessor(id) const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
BasicTestSettingsAccessor(baseName, id)
{ {
addVersionUpgrader(std::make_unique<TestVersionUpgrader>(5)); addVersionUpgrader(std::make_unique<TestVersionUpgrader>(5));
addVersionUpgrader(std::make_unique<TestVersionUpgrader>(6)); addVersionUpgrader(std::make_unique<TestVersionUpgrader>(6));
@@ -142,6 +147,12 @@ private slots:
void findIssues_tooOld(); void findIssues_tooOld();
void findIssues_wrongId(); void findIssues_wrongId();
void findIssues_nonDefaultPath(); void findIssues_nonDefaultPath();
void saveSettings();
void loadSettings();
private:
QTemporaryDir m_tempDir;
}; };
static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(), static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(),
@@ -156,6 +167,11 @@ static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray()
return result; return result;
} }
static Utils::FileName testPath(const QTemporaryDir &td, const QString &name)
{
return Utils::FileName::fromString(td.path() + "/" + name);
}
void tst_SettingsAccessor::addVersionUpgrader() void tst_SettingsAccessor::addVersionUpgrader()
{ {
BasicTestSettingsAccessor accessor; BasicTestSettingsAccessor accessor;
@@ -273,7 +289,7 @@ void tst_SettingsAccessor::isBetterMatch_idMismatch()
void tst_SettingsAccessor::isBetterMatch_noId() 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 a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
const QVariantMap b = versionedMap(6, "foo"); const QVariantMap b = versionedMap(6, "foo");
@@ -471,7 +487,7 @@ void tst_SettingsAccessor::findIssues_ok()
{ {
const TestSettingsAccessor accessor; const TestSettingsAccessor accessor;
const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); 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<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path); const Utils::optional<Utils::SettingsAccessor::IssueInfo> info = accessor.findIssues(data, path);
@@ -533,6 +549,64 @@ void tst_SettingsAccessor::findIssues_nonDefaultPath()
QVERIFY(info); 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) QTEST_MAIN(tst_SettingsAccessor)
#include "tst_settings.moc" #include "tst_settings.moc"