forked from qt-creator/qt-creator
SettingsAccessor: Add test for version upgrader registration
Change-Id: I04195b84b551333ef34f0f193d5c2237ad1c86c6 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -29,6 +29,32 @@
|
||||
|
||||
using namespace Utils;
|
||||
|
||||
const char TESTACCESSOR_DN[] = "Test Settings Accessor";
|
||||
const char TESTACCESSOR_APPLICATION_DN[] = "SettingsAccessor Test (Basic)";
|
||||
const char TESTACCESSOR_DEFAULT_ID[] = "testId";
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// TestVersionUpgrader:
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
class TestVersionUpgrader : public Utils::VersionUpgrader
|
||||
{
|
||||
public:
|
||||
TestVersionUpgrader(int version) : m_version(version) { }
|
||||
|
||||
int version() const final { return m_version; }
|
||||
QString backupExtension() const final { return QString("v") + QString::number(m_version); }
|
||||
QVariantMap upgrade(const QVariantMap &data) final
|
||||
{
|
||||
QVariantMap result = data;
|
||||
result.insert(QString("VERSION_") + QString::number(m_version), m_version);
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
const int m_version = -1;
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// BasicTestSettingsAccessor:
|
||||
// --------------------------------------------------------------------
|
||||
@@ -36,19 +62,33 @@ using namespace Utils;
|
||||
class BasicTestSettingsAccessor : public Utils::SettingsAccessor
|
||||
{
|
||||
public:
|
||||
BasicTestSettingsAccessor(const QByteArray &id = QByteArray("test"));
|
||||
|
||||
using Utils::SettingsAccessor::isBetterMatch;
|
||||
using Utils::SettingsAccessor::addVersionUpgrader;
|
||||
BasicTestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
|
||||
Utils::SettingsAccessor(Utils::FileName::fromString("/foo/bar"))
|
||||
{
|
||||
setDisplayName(TESTACCESSOR_DN);
|
||||
setApplicationDisplayName(TESTACCESSOR_APPLICATION_DN);
|
||||
setSettingsId(id);
|
||||
}
|
||||
};
|
||||
|
||||
BasicTestSettingsAccessor::BasicTestSettingsAccessor(const QByteArray &id) :
|
||||
Utils::SettingsAccessor(Utils::FileName::fromString("/foo/bar"))
|
||||
// --------------------------------------------------------------------
|
||||
// TestSettingsAccessor:
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
class TestSettingsAccessor : public BasicTestSettingsAccessor
|
||||
{
|
||||
setDisplayName("Basic Test Settings Accessor");
|
||||
setApplicationDisplayName("SettingsAccessor Test (Basic)");
|
||||
setSettingsId(id);
|
||||
}
|
||||
public:
|
||||
TestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
|
||||
BasicTestSettingsAccessor(id)
|
||||
{
|
||||
addVersionUpgrader(std::make_unique<TestVersionUpgrader>(5));
|
||||
addVersionUpgrader(std::make_unique<TestVersionUpgrader>(6));
|
||||
addVersionUpgrader(std::make_unique<TestVersionUpgrader>(7));
|
||||
}
|
||||
|
||||
// Make methods public for the tests:
|
||||
using Utils::SettingsAccessor::isBetterMatch;
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// tst_SettingsAccessor:
|
||||
@@ -59,6 +99,13 @@ class tst_SettingsAccessor : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void addVersionUpgrader();
|
||||
void addVersionUpgrader_negativeVersion();
|
||||
void addVersionUpgrader_v3v2();
|
||||
void addVersionUpgrader_v3v5();
|
||||
void addVersionUpgrader_v3v4v5();
|
||||
void addVersionUpgrader_v0v1();
|
||||
|
||||
void isBetterMatch();
|
||||
void isBetterMatch_idMismatch();
|
||||
void isBetterMatch_noId();
|
||||
@@ -79,12 +126,86 @@ static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray()
|
||||
return result;
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QCOMPARE(accessor.firstSupportedVersion(), -1);
|
||||
QCOMPARE(accessor.currentVersion(), 0);
|
||||
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader_negativeVersion()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QVERIFY(!accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(-1)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), -1);
|
||||
QCOMPARE(accessor.currentVersion(), 0);
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader_v3v2()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(3)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 4);
|
||||
|
||||
QVERIFY(!accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(2)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 4);
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader_v3v5()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(3)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 4);
|
||||
|
||||
QVERIFY(!accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(5)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 4);
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader_v3v4v5()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(3)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 4);
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(4)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 5);
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(5)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 3);
|
||||
QCOMPARE(accessor.currentVersion(), 6);
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::addVersionUpgrader_v0v1()
|
||||
{
|
||||
BasicTestSettingsAccessor accessor;
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(0)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 0);
|
||||
QCOMPARE(accessor.currentVersion(), 1);
|
||||
|
||||
QVERIFY(accessor.addVersionUpgrader(std::make_unique<TestVersionUpgrader>(1)));
|
||||
QCOMPARE(accessor.firstSupportedVersion(), 0);
|
||||
QCOMPARE(accessor.currentVersion(), 2);
|
||||
}
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor;
|
||||
const TestSettingsAccessor accessor;
|
||||
|
||||
const QVariantMap a = versionedMap(1, "test");
|
||||
const QVariantMap b = versionedMap(2, "test");
|
||||
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||
const QVariantMap b = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
||||
|
||||
QVERIFY(accessor.isBetterMatch(a, b));
|
||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||
@@ -92,10 +213,10 @@ void tst_SettingsAccessor::isBetterMatch()
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch_idMismatch()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor;
|
||||
const TestSettingsAccessor accessor;
|
||||
|
||||
const QVariantMap a = versionedMap(1, "test");
|
||||
const QVariantMap b = versionedMap(2, "foo");
|
||||
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||
const QVariantMap b = versionedMap(6, "foo");
|
||||
|
||||
QVERIFY(!accessor.isBetterMatch(a, b));
|
||||
QVERIFY(accessor.isBetterMatch(b, a));
|
||||
@@ -103,10 +224,10 @@ void tst_SettingsAccessor::isBetterMatch_idMismatch()
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch_noId()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor((QByteArray()));
|
||||
const TestSettingsAccessor accessor((QByteArray()));
|
||||
|
||||
const QVariantMap a = versionedMap(1, "test");
|
||||
const QVariantMap b = versionedMap(2, "foo");
|
||||
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||
const QVariantMap b = versionedMap(6, "foo");
|
||||
|
||||
QVERIFY(accessor.isBetterMatch(a, b));
|
||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||
@@ -114,10 +235,10 @@ void tst_SettingsAccessor::isBetterMatch_noId()
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch_sameVersion()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor;
|
||||
const TestSettingsAccessor accessor;
|
||||
|
||||
const QVariantMap a = versionedMap(10, "test");
|
||||
const QVariantMap b = versionedMap(10, "test");
|
||||
const QVariantMap a = versionedMap(7, TESTACCESSOR_DEFAULT_ID);
|
||||
const QVariantMap b = versionedMap(7, TESTACCESSOR_DEFAULT_ID);
|
||||
|
||||
QVERIFY(!accessor.isBetterMatch(a, b));
|
||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||
@@ -125,10 +246,10 @@ void tst_SettingsAccessor::isBetterMatch_sameVersion()
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch_emptyMap()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor;
|
||||
const TestSettingsAccessor accessor;
|
||||
|
||||
const QVariantMap a;
|
||||
const QVariantMap b = versionedMap(10, "test");
|
||||
const QVariantMap b = versionedMap(7, TESTACCESSOR_DEFAULT_ID);
|
||||
|
||||
QVERIFY(accessor.isBetterMatch(a, b));
|
||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||
@@ -136,13 +257,18 @@ void tst_SettingsAccessor::isBetterMatch_emptyMap()
|
||||
|
||||
void tst_SettingsAccessor::isBetterMatch_twoEmptyMaps()
|
||||
{
|
||||
const BasicTestSettingsAccessor accessor;
|
||||
const TestSettingsAccessor accessor;
|
||||
|
||||
const QVariantMap a;
|
||||
const QVariantMap b;
|
||||
|
||||
QVERIFY(accessor.isBetterMatch(a, b));
|
||||
QVERIFY(accessor.isBetterMatch(b, a));
|
||||
// The following two fails are harmless: They claim an empty map is better than another empty
|
||||
// map, so it will trigger a useless copy of one empty map over another.
|
||||
// This copy will be avoided when reworking isBetterMatch later.
|
||||
QEXPECT_FAIL("", "harmless but unexpected behavior", Continue);
|
||||
QVERIFY(!accessor.isBetterMatch(a, b));
|
||||
QEXPECT_FAIL("", "harmless but unexpected behavior", Continue);
|
||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_SettingsAccessor)
|
||||
|
Reference in New Issue
Block a user