UserFileAccessor: Add tests

Change-Id: I310fdd542f0629a2353229be3e479a9f916fec19
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2017-12-15 10:30:09 +01:00
parent 5f8ac59ef8
commit 5ec295383d
4 changed files with 200 additions and 3 deletions

View File

@@ -139,6 +139,8 @@ protected:
virtual Utils::optional<IssueInfo> findIssues(const QVariantMap &data, virtual Utils::optional<IssueInfo> findIssues(const QVariantMap &data,
const Utils::FileName &path) const; const Utils::FileName &path) const;
QVariantMap mergeSettings(const QVariantMap &userMap, const QVariantMap &sharedMap) const;
virtual void storeSharedSettings(const QVariantMap &data) const; virtual void storeSharedSettings(const QVariantMap &data) const;
virtual QVariant retrieveSharedSettings() const; virtual QVariant retrieveSharedSettings() const;
@@ -151,7 +153,6 @@ private:
QVariantMap readUserSettings(QWidget *parent) const; QVariantMap readUserSettings(QWidget *parent) const;
QVariantMap readSharedSettings(QWidget *parent) const; QVariantMap readSharedSettings(QWidget *parent) const;
QVariantMap mergeSettings(const QVariantMap &userMap, const QVariantMap &sharedMap) const;
static QByteArray settingsIdFromMap(const QVariantMap &data); static QByteArray settingsIdFromMap(const QVariantMap &data);
static QString differentEnvironmentMsg(const QString &projectName); static QString differentEnvironmentMsg(const QString &projectName);

View File

@@ -233,6 +233,14 @@ private slots:
void testToolChainManager_data(); void testToolChainManager_data();
void testToolChainManager(); void testToolChainManager();
void testUserFileAccessor_prepareSettings();
void testUserFileAccessor_prepareSettingsObsoleteVersion();
void testUserFileAccessor_prepareSettingsObsoleteVersionNewVersion();
void testUserFileAccessor_prepareToSaveSettings();
void testUserFileAccessor_mergeSettings();
void testUserFileAccessor_mergeSettingsEmptyUser();
void testUserFileAccessor_mergeSettingsEmptyShared();
#endif // WITH_TESTS #endif // WITH_TESTS
}; };

View File

@@ -1969,3 +1969,191 @@ QVariant UserFileVersion17Upgrader::process(const QVariant &entry)
return entry; return entry;
} }
} }
#if defined(WITH_TESTS)
#include <QTest>
#include "projectexplorer.h"
namespace {
class TestUserFileAccessor : public UserFileAccessor
{
public:
TestUserFileAccessor(Project *project) : UserFileAccessor(project) { }
void storeSharedSettings(const QVariantMap &data) const final { m_storedSettings = data; }
QVariant retrieveSharedSettings() const final { return m_storedSettings; }
using UserFileAccessor::prepareSettings;
using UserFileAccessor::prepareToSaveSettings;
using UserFileAccessor::mergeSettings;
private:
mutable QVariantMap m_storedSettings;
};
class TestProject : public Project
{
public:
TestProject() : Project("x-test/testproject", Utils::FileName::fromString("/test/project")) {
setDisplayName("Test Project");
}
};
} // namespace
void ProjectExplorerPlugin::testUserFileAccessor_prepareSettings()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap data;
data.insert("Version", 4);
data.insert("Foo", "bar");
QVariantMap result = accessor.prepareSettings(data);
QCOMPARE(result, data);
}
void ProjectExplorerPlugin::testUserFileAccessor_prepareSettingsObsoleteVersion()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap data;
data.insert("ProjectExplorer.Project.Updater.FileVersion", 4);
data.insert("Foo", "bar");
QVariantMap result = accessor.prepareSettings(data);
QCOMPARE(result.count(), data.count());
QCOMPARE(result.value("Foo"), data.value("Foo"));
QCOMPARE(result.value("Version"), data.value("ProjectExplorer.Project.Updater.FileVersion"));
}
void ProjectExplorerPlugin::testUserFileAccessor_prepareSettingsObsoleteVersionNewVersion()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap data;
data.insert("ProjectExplorer.Project.Updater.FileVersion", 4);
data.insert("Version", 5);
data.insert("Foo", "bar");
QVariantMap result = accessor.prepareSettings(data);
QCOMPARE(result.count(), data.count() - 1);
QCOMPARE(result.value("Foo"), data.value("Foo"));
// TODO: Does this make sense? Shouldn't the Version stay unchanged?
QCOMPARE(result.value("Version"), data.value("ProjectExplorer.Project.Updater.FileVersion"));
}
void ProjectExplorerPlugin::testUserFileAccessor_prepareToSaveSettings()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap sharedData;
sharedData.insert("Version", 10);
sharedData.insert("shared1", "bar");
sharedData.insert("shared2", "baz");
sharedData.insert("shared3", "foo");
accessor.storeSharedSettings(sharedData);
QVariantMap data;
data.insert("Version", 10);
data.insert("shared1", "bar1");
data.insert("unique1", 1234);
data.insert("shared3", "foo");
QVariantMap result = accessor.prepareToSaveSettings(data);
QCOMPARE(result.count(), data.count() + 3);
QCOMPARE(result.value("EnvironmentId"), ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
QCOMPARE(result.value("UserStickyKeys"), QVariant(QStringList({"shared1"})));
QCOMPARE(result.value("Version"), accessor.currentVersion());
QCOMPARE(result.value("shared1"), data.value("shared1"));
QCOMPARE(result.value("shared3"), data.value("shared3"));
QCOMPARE(result.value("unique1"), data.value("unique1"));
}
void ProjectExplorerPlugin::testUserFileAccessor_mergeSettings()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap sharedData;
sharedData.insert("Version", accessor.currentVersion());
sharedData.insert("EnvironmentId", "foobar");
sharedData.insert("shared1", "bar");
sharedData.insert("shared2", "baz");
sharedData.insert("shared3", "foooo");
QVariantMap data;
data.insert("Version", accessor.currentVersion());
data.insert("EnvironmentId", ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
data.insert("UserStickyKeys", QStringList({"shared1"}));
data.insert("shared1", "bar1");
data.insert("unique1", 1234);
data.insert("shared3", "foo");
QVariantMap result = accessor.mergeSettings(data, sharedData);
QCOMPARE(result.count(), data.count() + 1);
QCOMPARE(result.value("OriginalVersion"), accessor.currentVersion());
QCOMPARE(result.value("EnvironmentId"), ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray()); // unchanged
QCOMPARE(result.value("UserStickyKeys"), QVariant(QStringList({"shared1"}))); // unchanged
QCOMPARE(result.value("Version"), accessor.currentVersion()); // forced
QCOMPARE(result.value("shared1"), data.value("shared1")); // from data
// FIXME: Why is this missing?
// QCOMPARE(result.value("shared2"), sharedData.value("shared2")); // from shared, missing!
QCOMPARE(result.value("shared3"), sharedData.value("shared3")); // from shared
QCOMPARE(result.value("unique1"), data.value("unique1"));
}
void ProjectExplorerPlugin::testUserFileAccessor_mergeSettingsEmptyUser()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap sharedData;
sharedData.insert("Version", accessor.currentVersion());
sharedData.insert("EnvironmentId", "foobar");
sharedData.insert("shared1", "bar");
sharedData.insert("shared2", "baz");
sharedData.insert("shared3", "foooo");
QVariantMap data;
QVariantMap result = accessor.mergeSettings(data, sharedData);
QCOMPARE(result, sharedData);
}
void ProjectExplorerPlugin::testUserFileAccessor_mergeSettingsEmptyShared()
{
TestProject project;
TestUserFileAccessor accessor(&project);
QVariantMap sharedData;
QVariantMap data;
data.insert("Version", accessor.currentVersion());
data.insert("EnvironmentId", ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
data.insert("UserStickyKeys", QStringList({"shared1"}));
data.insert("shared1", "bar1");
data.insert("unique1", 1234);
data.insert("shared3", "foo");
QVariantMap result = accessor.mergeSettings(data, sharedData);
// FIXME: OriginalVersion should not have been added by merge!
QCOMPARE(result.value("OriginalVersion"), accessor.currentVersion());
result.remove("OriginalVersion");
QCOMPARE(result, data);
}
#endif // WITH_TESTS

View File

@@ -48,8 +48,8 @@ protected:
QVariantMap prepareSettings(const QVariantMap &data) const final; QVariantMap prepareSettings(const QVariantMap &data) const final;
QVariantMap prepareToSaveSettings(const QVariantMap &data) const final; QVariantMap prepareToSaveSettings(const QVariantMap &data) const final;
void storeSharedSettings(const QVariantMap &data) const final; void storeSharedSettings(const QVariantMap &data) const override;
QVariant retrieveSharedSettings() const final; QVariant retrieveSharedSettings() const override;
private: private:
Project *m_project; Project *m_project;