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