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;
|
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:
|
// BasicTestSettingsAccessor:
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
@@ -36,19 +62,33 @@ using namespace Utils;
|
|||||||
class BasicTestSettingsAccessor : public Utils::SettingsAccessor
|
class BasicTestSettingsAccessor : public Utils::SettingsAccessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BasicTestSettingsAccessor(const QByteArray &id = QByteArray("test"));
|
BasicTestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
|
||||||
|
Utils::SettingsAccessor(Utils::FileName::fromString("/foo/bar"))
|
||||||
using Utils::SettingsAccessor::isBetterMatch;
|
{
|
||||||
using Utils::SettingsAccessor::addVersionUpgrader;
|
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");
|
public:
|
||||||
setApplicationDisplayName("SettingsAccessor Test (Basic)");
|
TestSettingsAccessor(const QByteArray &id = QByteArray(TESTACCESSOR_DEFAULT_ID)) :
|
||||||
setSettingsId(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:
|
// tst_SettingsAccessor:
|
||||||
@@ -59,6 +99,13 @@ class tst_SettingsAccessor : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void addVersionUpgrader();
|
||||||
|
void addVersionUpgrader_negativeVersion();
|
||||||
|
void addVersionUpgrader_v3v2();
|
||||||
|
void addVersionUpgrader_v3v5();
|
||||||
|
void addVersionUpgrader_v3v4v5();
|
||||||
|
void addVersionUpgrader_v0v1();
|
||||||
|
|
||||||
void isBetterMatch();
|
void isBetterMatch();
|
||||||
void isBetterMatch_idMismatch();
|
void isBetterMatch_idMismatch();
|
||||||
void isBetterMatch_noId();
|
void isBetterMatch_noId();
|
||||||
@@ -79,12 +126,86 @@ static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray()
|
|||||||
return result;
|
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()
|
void tst_SettingsAccessor::isBetterMatch()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor;
|
const TestSettingsAccessor accessor;
|
||||||
|
|
||||||
const QVariantMap a = versionedMap(1, "test");
|
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||||
const QVariantMap b = versionedMap(2, "test");
|
const QVariantMap b = versionedMap(6, TESTACCESSOR_DEFAULT_ID);
|
||||||
|
|
||||||
QVERIFY(accessor.isBetterMatch(a, b));
|
QVERIFY(accessor.isBetterMatch(a, b));
|
||||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||||
@@ -92,10 +213,10 @@ void tst_SettingsAccessor::isBetterMatch()
|
|||||||
|
|
||||||
void tst_SettingsAccessor::isBetterMatch_idMismatch()
|
void tst_SettingsAccessor::isBetterMatch_idMismatch()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor;
|
const TestSettingsAccessor accessor;
|
||||||
|
|
||||||
const QVariantMap a = versionedMap(1, "test");
|
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||||
const QVariantMap b = versionedMap(2, "foo");
|
const QVariantMap b = versionedMap(6, "foo");
|
||||||
|
|
||||||
QVERIFY(!accessor.isBetterMatch(a, b));
|
QVERIFY(!accessor.isBetterMatch(a, b));
|
||||||
QVERIFY(accessor.isBetterMatch(b, a));
|
QVERIFY(accessor.isBetterMatch(b, a));
|
||||||
@@ -103,10 +224,10 @@ void tst_SettingsAccessor::isBetterMatch_idMismatch()
|
|||||||
|
|
||||||
void tst_SettingsAccessor::isBetterMatch_noId()
|
void tst_SettingsAccessor::isBetterMatch_noId()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor((QByteArray()));
|
const TestSettingsAccessor accessor((QByteArray()));
|
||||||
|
|
||||||
const QVariantMap a = versionedMap(1, "test");
|
const QVariantMap a = versionedMap(5, TESTACCESSOR_DEFAULT_ID);
|
||||||
const QVariantMap b = versionedMap(2, "foo");
|
const QVariantMap b = versionedMap(6, "foo");
|
||||||
|
|
||||||
QVERIFY(accessor.isBetterMatch(a, b));
|
QVERIFY(accessor.isBetterMatch(a, b));
|
||||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||||
@@ -114,10 +235,10 @@ void tst_SettingsAccessor::isBetterMatch_noId()
|
|||||||
|
|
||||||
void tst_SettingsAccessor::isBetterMatch_sameVersion()
|
void tst_SettingsAccessor::isBetterMatch_sameVersion()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor;
|
const TestSettingsAccessor accessor;
|
||||||
|
|
||||||
const QVariantMap a = versionedMap(10, "test");
|
const QVariantMap a = versionedMap(7, TESTACCESSOR_DEFAULT_ID);
|
||||||
const QVariantMap b = versionedMap(10, "test");
|
const QVariantMap b = versionedMap(7, TESTACCESSOR_DEFAULT_ID);
|
||||||
|
|
||||||
QVERIFY(!accessor.isBetterMatch(a, b));
|
QVERIFY(!accessor.isBetterMatch(a, b));
|
||||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||||
@@ -125,10 +246,10 @@ void tst_SettingsAccessor::isBetterMatch_sameVersion()
|
|||||||
|
|
||||||
void tst_SettingsAccessor::isBetterMatch_emptyMap()
|
void tst_SettingsAccessor::isBetterMatch_emptyMap()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor;
|
const TestSettingsAccessor accessor;
|
||||||
|
|
||||||
const QVariantMap a;
|
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(a, b));
|
||||||
QVERIFY(!accessor.isBetterMatch(b, a));
|
QVERIFY(!accessor.isBetterMatch(b, a));
|
||||||
@@ -136,13 +257,18 @@ void tst_SettingsAccessor::isBetterMatch_emptyMap()
|
|||||||
|
|
||||||
void tst_SettingsAccessor::isBetterMatch_twoEmptyMaps()
|
void tst_SettingsAccessor::isBetterMatch_twoEmptyMaps()
|
||||||
{
|
{
|
||||||
const BasicTestSettingsAccessor accessor;
|
const TestSettingsAccessor accessor;
|
||||||
|
|
||||||
const QVariantMap a;
|
const QVariantMap a;
|
||||||
const QVariantMap b;
|
const QVariantMap b;
|
||||||
|
|
||||||
QVERIFY(accessor.isBetterMatch(a, b));
|
// The following two fails are harmless: They claim an empty map is better than another empty
|
||||||
QVERIFY(accessor.isBetterMatch(b, a));
|
// 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)
|
QTEST_MAIN(tst_SettingsAccessor)
|
||||||
|
Reference in New Issue
Block a user