1 /* GCompris - ApplicationSettingsTest.cpp
2  *
3  * SPDX-FileCopyrightText: 2018 Himanshu Vishwakarma <himvish997@gmail.com>
4  *
5  * Authors:
6  *   Himanshu Vishwakarma <himvish997@gmail.com>
7  *
8  *   SPDX-License-Identifier: GPL-3.0-or-later
9  */
10 
11 #include <QtTest>
12 #include <QObject>
13 #include <QFile>
14 
15 #include "src/core/ApplicationSettings.h"
16 #include "ApplicationSettingsMock.h"
17 
18 #define APPLICATION_SETTINGS_TEST_ATTRIBUTE(attributeType, attributeName, accessorName, accessorNameChanged) \
19 { \
20     QFETCH(attributeType, attributeName); \
21     QSignalSpy spy(&applicationSettingsMock, &ApplicationSettings::accessorNameChanged); \
22     QVERIFY(spy.isValid()); \
23     QVERIFY(spy.count() == 0); \
24     applicationSettingsMock.accessorName(attributeName); \
25     QVERIFY(spy.count() == 1); \
26     QCOMPARE(applicationSettingsMock.attributeName(), attributeName); \
27 }
28 
29 class CoreApplicationSettingsTest : public QObject
30 {
31     Q_OBJECT
32 private slots:
33     void cleanup();
34     void ApplicationSettingsInitializationTest();
35     void ApplicationSettingsTest();
36     void ApplicationSettingsTest_data();
37     void ActivitySettingsTest();
38 };
39 
ApplicationSettingsInitializationTest()40 void CoreApplicationSettingsTest::ApplicationSettingsInitializationTest()
41 {
42     ApplicationSettingsMock applicationSettings;
43     QCOMPARE(applicationSettings.baseFontSizeMin(), -7);
44     QCOMPARE(applicationSettings.baseFontSizeMax(), 7);
45     QCOMPARE(applicationSettings.fontLetterSpacingMin(), (qreal)0.0);
46     QCOMPARE(applicationSettings.fontLetterSpacingMax(), (qreal)8.0);
47 }
48 
ApplicationSettingsTest_data()49 void CoreApplicationSettingsTest::ApplicationSettingsTest_data()
50 {
51     QTest::addColumn<bool>("isAudioVoicesEnabled");
52     QTest::addColumn<bool>("isAudioEffectsEnabled");
53     QTest::addColumn<bool>("isBackgroundMusicEnabled");
54     QTest::addColumn<quint32>("previousHeight");
55     QTest::addColumn<quint32>("previousWidth");
56     QTest::addColumn<bool>("isVirtualKeyboard");
57     QTest::addColumn<QString>("locale");
58     QTest::addColumn<QString>("font");
59     QTest::addColumn<bool>("isEmbeddedFont");
60     QTest::addColumn<quint32>("fontCapitalization");
61     QTest::addColumn<qreal>("fontLetterSpacing");
62     QTest::addColumn<bool>("isAutomaticDownloadsEnabled");
63     QTest::addColumn<quint32>("filterLevelMin");
64     QTest::addColumn<quint32>("filterLevelMax");
65     QTest::addColumn<bool>("isKioskMode");
66     QTest::addColumn<bool>("sectionVisible");
67     QTest::addColumn<QString>("wordset");
68     QTest::addColumn<QString>("downloadServerUrl");
69     QTest::addColumn<QString>("cachePath");
70     QTest::addColumn<QString>("userDataPath");
71     QTest::addColumn<quint32>("exeCount");
72     QTest::addColumn<bool>("isBarHidden");
73     QTest::addColumn<int>("baseFontSize");
74     QTest::addColumn<int>("lastGCVersionRan");
75     QTest::addColumn<bool>("isFullscreen");
76     QTest::addColumn<QString>("renderer");
77     QTest::addColumn<qreal>("backgroundMusicVolume");
78     QTest::addColumn<qreal>("audioEffectsVolume");
79     QTest::addColumn<QStringList>("filteredBackgroundMusic");
80 
81     QTest::newRow("dummySettings1") << true << true << true << (quint32)21 << (quint32)25 << true << "en_EN" << "font1" << true << (quint32)36 << (qreal)2.532 << true << (quint32)26 << (quint32)84 << true << true << "wordset1" << "downloadServerUrl1" << "cachePath1" << "userDataPath1" << (quint32)48 << true << 7 << 52 << false << "softwareRenderer" << (qreal)0.5 << (qreal)0.7 << (QStringList() << "music1");
82     QTest::newRow("dummySettings2") << false << false << false << (quint32)20 << (quint32)32 << false << "en_US" << "font2" << false << (quint32)34 <<(qreal)2.3 << false << (quint32)24 << (quint32)80 << false << false << "wordset2" << "downloadServerUrl2" << "cachePath2" << "userDataPath2" << (quint32)44 << false << 5 << 64 << false << "openglRenderer" << (qreal)1.0 << (qreal)0.0 << (QStringList() << "music2" << "music3");
83 }
84 
ApplicationSettingsTest()85 void CoreApplicationSettingsTest::ApplicationSettingsTest()
86 {
87     ApplicationSettingsMock applicationSettingsMock;
88     ApplicationSettingsMock::getInstance();
89 
90     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAudioVoicesEnabled, setIsAudioVoicesEnabled, audioVoicesEnabledChanged);
91     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAudioEffectsEnabled, setIsAudioEffectsEnabled, audioEffectsEnabledChanged);
92     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isBackgroundMusicEnabled, setIsBackgroundMusicEnabled, backgroundMusicEnabledChanged);
93     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, previousHeight, setPreviousHeight, previousHeightChanged);
94     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, previousWidth, setPreviousWidth, previousWidthChanged);
95     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isVirtualKeyboard, setVirtualKeyboard, virtualKeyboardChanged);
96     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, locale, setLocale, localeChanged);
97     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, font, setFont, fontChanged);
98     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isEmbeddedFont, setIsEmbeddedFont, embeddedFontChanged);
99     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, fontCapitalization, setFontCapitalization, fontCapitalizationChanged);
100     APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, fontLetterSpacing, setFontLetterSpacing, fontLetterSpacingChanged);
101     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAutomaticDownloadsEnabled, setIsAutomaticDownloadsEnabled, automaticDownloadsEnabledChanged);
102     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, filterLevelMin, setFilterLevelMin, filterLevelMinChanged);
103     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, filterLevelMax, setFilterLevelMax, filterLevelMaxChanged);
104     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isKioskMode, setKioskMode, kioskModeChanged);
105     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, sectionVisible, setSectionVisible, sectionVisibleChanged);
106     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, wordset, setWordset, wordsetChanged);
107     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, downloadServerUrl, setDownloadServerUrl, downloadServerUrlChanged);
108     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, cachePath, setCachePath, cachePathChanged);
109     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, userDataPath, setUserDataPath, userDataPathChanged);
110     APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, exeCount, setExeCount, exeCountChanged);
111     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isBarHidden, setBarHidden, barHiddenChanged);
112     APPLICATION_SETTINGS_TEST_ATTRIBUTE(int, baseFontSize, setBaseFontSize, baseFontSizeChanged);
113     APPLICATION_SETTINGS_TEST_ATTRIBUTE(int, lastGCVersionRan, setLastGCVersionRan, lastGCVersionRanChanged);
114     APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isFullscreen, setFullscreen, fullscreenChanged);
115     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, renderer, setRenderer, rendererChanged);
116     APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, backgroundMusicVolume, setBackgroundMusicVolume, backgroundMusicVolumeChanged);
117     APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, audioEffectsVolume, setAudioEffectsVolume, audioEffectsVolumeChanged);
118     APPLICATION_SETTINGS_TEST_ATTRIBUTE(QStringList, filteredBackgroundMusic, setFilteredBackgroundMusic, filteredBackgroundMusicChanged);
119 
120     delete ApplicationSettingsMock::getInstance();
121 }
122 
ActivitySettingsTest()123 void CoreApplicationSettingsTest::ActivitySettingsTest()
124 {
125     ApplicationSettingsMock applicationSettingsMock;
126     ApplicationSettingsMock::getInstance();
127     // Creating a dummyActivity
128     QString dummyActivity = QStringLiteral("DummyActivity");
129 
130     // By Default the DummyActivity is not favorite
131     QVERIFY(!applicationSettingsMock.isFavorite(dummyActivity));
132     // Setting Up the DummyActivity as Favorite
133     applicationSettingsMock.setFavorite(dummyActivity, true);
134     QVERIFY(applicationSettingsMock.isFavorite(dummyActivity));
135     // setting Up the DummyActivity as Not favorite
136     applicationSettingsMock.setFavorite(dummyActivity, false);
137     QVERIFY(!applicationSettingsMock.isFavorite(dummyActivity));
138 
139     // By Default the activity progress is zero
140     QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 0);
141     // Saving the Activity Progress
142     applicationSettingsMock.saveActivityProgress(dummyActivity, 3);
143     QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 3);
144     applicationSettingsMock.saveActivityProgress(dummyActivity, 10);
145     QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 10);
146     applicationSettingsMock.saveActivityProgress(dummyActivity, 0);
147     QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 0);
148 
149     // Test current level getter/setter
150     QCOMPARE(applicationSettingsMock.currentLevels(dummyActivity), {});
151     applicationSettingsMock.setCurrentLevels(dummyActivity, {"3"});
152     QCOMPARE(applicationSettingsMock.currentLevels(dummyActivity), {"3"});
153 
154     // By Default the activity
155     QVariantMap configuration;
156     configuration.insert(QStringLiteral("DummyKey1"), QStringLiteral("DummyValue1"));
157     configuration.insert(QStringLiteral("DummyKey2"), QStringLiteral("DummyValue2"));
158     configuration.insert(QStringLiteral("DummyKey3"), QStringLiteral("DummyValue3"));
159     configuration.insert(QStringLiteral("DummyKey4"), QStringLiteral("DummyValue4"));
160 
161     applicationSettingsMock.saveActivityConfiguration(dummyActivity, configuration);
162     QVariantMap newConfiguration = applicationSettingsMock.loadActivityConfiguration(dummyActivity);
163 
164     QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey1")), configuration.value(QStringLiteral("DummyKey1")));
165     QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey2")), configuration.value(QStringLiteral("DummyKey2")));
166     QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey3")), configuration.value(QStringLiteral("DummyKey3")));
167     QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey4")), configuration.value(QStringLiteral("DummyKey4")));
168 
169     delete ApplicationSettingsMock::getInstance();
170 }
171 
cleanup()172 void CoreApplicationSettingsTest::cleanup()
173 {
174     QFile::remove("./dummy_application_settings.conf");
175 }
176 
177 QTEST_MAIN(CoreApplicationSettingsTest)
178 #include "ApplicationSettingsTest.moc"
179