forked from qt-creator/qt-creator
SettingsAccessor: Add tests to save/load values
Change-Id: I08870a91c725eb6c5344545d8d829fc98a3231bc Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -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"
|
||||||
|
Reference in New Issue
Block a user