diff --git a/libssu/ssusettings.h b/libssu/ssusettings.h index 648c5c7..55a5c4e 100644 --- a/libssu/ssusettings.h +++ b/libssu/ssusettings.h @@ -13,6 +13,8 @@ class SsuSettings: public QSettings { Q_OBJECT + friend class SettingsTest; + public: SsuSettings(); SsuSettings(const QString &fileName, Format format, QObject *parent=0); diff --git a/tests/tests.pro b/tests/tests.pro index 47986fa..8767aac 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,6 +1,9 @@ TEMPLATE = subdirs CONFIG += qt ordered coverage debug -SUBDIRS = ut_urlresolver ut_variables +SUBDIRS = \ + ut_settings \ + ut_urlresolver \ + ut_variables \ !include( tests.pri ) { error("Unable to find tests include") } diff --git a/tests/tests.xml b/tests/tests.xml index 3a61f90..edf7c4e 100644 --- a/tests/tests.xml +++ b/tests/tests.xml @@ -3,6 +3,11 @@ + + + /opt/tests/ssu/ut_settings + + /opt/tests/ssu/ut_urlresolver diff --git a/tests/ut_settings/main.cpp b/tests/ut_settings/main.cpp new file mode 100644 index 0000000..d462a48 --- /dev/null +++ b/tests/ut_settings/main.cpp @@ -0,0 +1,19 @@ +/** + * @file main.cpp + * @copyright 2012 Jolla Ltd. + * @author Martin Kampas + * @date 2012 + */ + +#include + +#include "settingstest.h" + +int main(int argc, char **argv){ + SettingsTest settingsTest; + + if (QTest::qExec(&settingsTest, argc, argv)) + return 1; + + return 0; +} diff --git a/tests/ut_settings/settingstest.cpp b/tests/ut_settings/settingstest.cpp new file mode 100644 index 0000000..b54d097 --- /dev/null +++ b/tests/ut_settings/settingstest.cpp @@ -0,0 +1,63 @@ +/** + * @file settingstest.cpp + * @copyright 2013 Jolla Ltd. + * @author Martin Kampas + * @date 2013 + */ + +#include "settingstest.h" + +#include + +#include + +void SettingsTest::initTestCase(){ + +} + +void SettingsTest::cleanupTestCase(){ + +} + +void SettingsTest::testMerge_data(){ + // Key names state which file(s) a key is set in (master, foo or bar). Value + // is always in form "-value" based on which file it is taken from. + + const QScopedPointer masterFile( + QTemporaryFile::createLocalFile(":/testdata/merge/settings.ini")); + QSettings master(masterFile->fileName(), QSettings::IniFormat); + + const QStringList settingsFiles = QStringList() + << ":/testdata/merge/settings.d/bar.ini" + << ":/testdata/merge/settings.d/foo.ini"; + + SsuSettings::merge(&master, settingsFiles); + + QSettings expected(":/testdata/merge/merged.ini", QSettings::IniFormat); + + const QSet masterKeys = master.allKeys().toSet(); + const QSet expectedKeys = expected.allKeys().toSet(); + + QTest::addColumn("keyIsMerged"); + QTest::addColumn("keyShouldBeMerged"); + QTest::addColumn("actualValue"); + QTest::addColumn("expectedValue"); + + foreach (const QString &key, masterKeys + expectedKeys){ + QTest::newRow(qPrintable(key)) + << masterKeys.contains(key) + << expectedKeys.contains(key) + << master.value(key).toString() + << expected.value(key).toString(); + } +} + +void SettingsTest::testMerge(){ + QFETCH(bool, keyIsMerged); + QFETCH(bool, keyShouldBeMerged); + QFETCH(QString, actualValue); + QFETCH(QString, expectedValue); + + QCOMPARE(keyIsMerged, keyShouldBeMerged); + QCOMPARE(actualValue, expectedValue); +} diff --git a/tests/ut_settings/settingstest.h b/tests/ut_settings/settingstest.h new file mode 100644 index 0000000..dca974d --- /dev/null +++ b/tests/ut_settings/settingstest.h @@ -0,0 +1,25 @@ +/** + * @file settingstest.h + * @copyright 2013 Jolla Ltd. + * @author Martin Kampas + * @date 2013 + */ + +#ifndef _SETTINGSTEST_H +#define _SETTINGSTEST_H + +#include + +class SettingsTest: public QObject { + Q_OBJECT + + private slots: + void initTestCase(); + void cleanupTestCase(); + void testMerge_data(); + void testMerge(); + + private: +}; + +#endif diff --git a/tests/ut_settings/testdata.qrc b/tests/ut_settings/testdata.qrc new file mode 100644 index 0000000..d32916e --- /dev/null +++ b/tests/ut_settings/testdata.qrc @@ -0,0 +1,9 @@ + + + + testdata/merge/settings.d/bar.ini + testdata/merge/settings.d/foo.ini + testdata/merge/merged.ini + testdata/merge/settings.ini + + diff --git a/tests/ut_settings/testdata/merge/merged.ini b/tests/ut_settings/testdata/merge/merged.ini new file mode 100644 index 0000000..898f540 --- /dev/null +++ b/tests/ut_settings/testdata/merge/merged.ini @@ -0,0 +1,14 @@ +# Global values do not get overridden +global-master-only = master-value +global-master-foo = master-value +global-master-bar = master-value +global-master-foo-bar = master-value + +[groupA] +master-only = master-value +foo-only = foo-value +bar-only = bar-value +master-foo = foo-value +master-bar = bar-value +master-foo-bar = foo-value +foo-bar = foo-value diff --git a/tests/ut_settings/testdata/merge/settings.d/bar.ini b/tests/ut_settings/testdata/merge/settings.d/bar.ini new file mode 100644 index 0000000..4fa3d14 --- /dev/null +++ b/tests/ut_settings/testdata/merge/settings.d/bar.ini @@ -0,0 +1,10 @@ +global-bar-only = bar-value +global-master-bar = bar-value +global-master-foo-bar = bar-value +global-foo-bar = bar-value + +[groupA] +bar-only = bar-value +master-bar = bar-value +master-foo-bar = bar-value +foo-bar = bar-value diff --git a/tests/ut_settings/testdata/merge/settings.d/foo.ini b/tests/ut_settings/testdata/merge/settings.d/foo.ini new file mode 100644 index 0000000..8dc85ce --- /dev/null +++ b/tests/ut_settings/testdata/merge/settings.d/foo.ini @@ -0,0 +1,10 @@ +global-foo-only = foo-value +global-master-foo = foo-value +global-master-foo-bar = foo-value +global-foo-bar = foo-value + +[groupA] +foo-only = foo-value +master-foo = foo-value +master-foo-bar = foo-value +foo-bar = foo-value diff --git a/tests/ut_settings/testdata/merge/settings.ini b/tests/ut_settings/testdata/merge/settings.ini new file mode 100644 index 0000000..9b1b4fa --- /dev/null +++ b/tests/ut_settings/testdata/merge/settings.ini @@ -0,0 +1,10 @@ +global-master-only = master-value +global-master-foo = master-value +global-master-bar = master-value +global-master-foo-bar = master-value + +[groupA] +master-only = master-value +master-foo = master-value +master-bar = master-value +master-foo-bar = master-value diff --git a/tests/ut_settings/ut_settings.pro b/tests/ut_settings/ut_settings.pro new file mode 100644 index 0000000..20e4f2f --- /dev/null +++ b/tests/ut_settings/ut_settings.pro @@ -0,0 +1,22 @@ +HEADERS = \ + settingstest.h \ + +SOURCES = \ + main.cpp \ + settingstest.cpp \ + +RESOURCES = testdata.qrc +TEMPLATE = app +TARGET = ut_settings +LIBS += -lssu +CONFIG -= app_bundle +CONFIG += console qtestlib +QT -= gui +QT += network testlib + +!include( ../tests.pri ) { error("Unable to find tests include") } + +unix:target.path = $${PREFIX}/$$TESTS_PATH +INSTALLS += target + +!include( ../../buildpath.pri ) { error("Unable to find build path specification") }