ssu
settingstest.cpp
Go to the documentation of this file.
1 
8 #include "settingstest.h"
9 
10 #include <QtTest/QtTest>
11 
12 #include "libssu/ssusettings_p.h"
13 #include "upgradetesthelper.h"
14 
15 void SettingsTest::initTestCase()
16 {
17 
18 }
19 
20 void SettingsTest::cleanupTestCase()
21 {
22 
23 }
24 
25 void SettingsTest::testMerge_data()
26 {
27  // Key names state which file(s) a key is set in (master, foo or bar). Value
28  // is always in form "<file>-value" based on which file it is taken from.
29 
30  const QScopedPointer<QTemporaryFile> masterFile(
31  QTemporaryFile::createLocalFile(":/testdata/merge/settings.ini"));
32  QSettings master(masterFile->fileName(), QSettings::IniFormat);
33 
34  const QStringList settingsFiles = QStringList()
35  << ":/testdata/merge/settings.d/bar.ini"
36  << ":/testdata/merge/settings.d/foo.ini";
37 
38  SsuSettings::merge(&master, settingsFiles);
39 
40  QSettings expected(":/testdata/merge/merged.ini", QSettings::IniFormat);
41 
42  const QSet<QString> masterKeys = master.allKeys().toSet();
43  const QSet<QString> expectedKeys = expected.allKeys().toSet();
44 
45  QTest::addColumn<bool>("keyIsMerged");
46  QTest::addColumn<bool>("keyShouldBeMerged");
47  QTest::addColumn<QString>("actualValue");
48  QTest::addColumn<QString>("expectedValue");
49 
50  foreach (const QString &key, masterKeys + expectedKeys) {
51  QTest::newRow(qPrintable(key))
52  << masterKeys.contains(key)
53  << expectedKeys.contains(key)
54  << master.value(key).toString()
55  << expected.value(key).toString();
56  }
57 }
58 
59 void SettingsTest::testMerge()
60 {
61  QFETCH(bool, keyIsMerged);
62  QFETCH(bool, keyShouldBeMerged);
63  QFETCH(QString, actualValue);
64  QFETCH(QString, expectedValue);
65 
66  QCOMPARE(keyIsMerged, keyShouldBeMerged);
67  QCOMPARE(actualValue, expectedValue);
68 }
69 
70 void SettingsTest::testUpgrade_data()
71 {
72  // Read recipe
73  QFile recipe(":/testdata/upgrade/recipe");
74  QVERIFY(recipe.open(QIODevice::ReadOnly));
75  QList<UpgradeTestHelper::TestCase> testCases = UpgradeTestHelper::readRecipe(&recipe);
76 
77  // Generate settings file according to recipe
78  QTemporaryFile settingsFile;
79  QVERIFY(settingsFile.open() == true);
80 
81  QSettings settings(settingsFile.fileName(), QSettings::IniFormat);
82 
83  UpgradeTestHelper::fillSettings(&settings, testCases);
84 
85  // Generate defaults file according to recipe
86  QTemporaryFile defaultSettingsFile;
87  QVERIFY(defaultSettingsFile.open() == true);
88 
89  QSettings defaultSettings(defaultSettingsFile.fileName(), QSettings::IniFormat);
90 
91  UpgradeTestHelper::fillDefaultSettings(&defaultSettings, testCases);
92 
93  // Parse settings -- do upgrade
94 #if 0
95  settingsFile.seek(0);
96  defaultSettingsFile.seek(0);
97  qDebug() << "SETTINGS {{{\n" << settingsFile.readAll() << "\n}}}";
98  qDebug() << "DEFAULT SETTINGS {{{\n" << defaultSettingsFile.readAll() << "\n}}}";
99 #endif
100 
101  SsuSettings ssuSettings(settingsFile.fileName(), QSettings::IniFormat,
102  defaultSettingsFile.fileName());
103 
104 #if 0
105  settingsFile.seek(0);
106  qDebug() << "SETTINGS UPGRADED {{{\n" << settingsFile.readAll() << "\n}}}";
107 #endif
108 
109  // Record data for verification phase
110  QTest::addColumn<bool>("keyIsSet");
111  QTest::addColumn<bool>("keyShouldBeSet");
112  QTest::addColumn<QString>("actualValue");
113  QTest::addColumn<QString>("expectedValue");
114 
115  foreach (const UpgradeTestHelper::TestCase &testCase, testCases) {
116  foreach (const QString &group, UpgradeTestHelper::groups()) {
117  const QString key = group.isEmpty() ? testCase.key() : group + '/' + testCase.key();
118  QTest::newRow(qPrintable(QString("%1%2:%3:%4")
119  .arg(group.isEmpty() ? "" : group + "/")
120  .arg(testCase.history())
121  .arg(testCase.current())
122  .arg(testCase.expected())))
123  << ssuSettings.contains(key)
124  << testCase.keyShouldBeSet()
125  << ssuSettings.value(key).toString()
126  << testCase.expected();
127  }
128  }
129 }
130 
131 void SettingsTest::testUpgrade()
132 {
133  QFETCH(bool, keyIsSet);
134  QFETCH(bool, keyShouldBeSet);
135  QFETCH(QString, actualValue);
136  QFETCH(QString, expectedValue);
137 
138  QCOMPARE(keyIsSet, keyShouldBeSet);
139  if (keyIsSet) {
140  QCOMPARE(actualValue, expectedValue);
141  }
142 }
SsuSettings
Definition: ssusettings_p.h:30
UpgradeTestHelper::TestCase
Definition: upgradetesthelper.h:33
upgradetesthelper.h
settingstest.h
ssusettings_p.h