File indexing completed on 2023-09-24 07:47:39
0001 /* GCompris - ApplicationSettingsTest.cpp 0002 * 0003 * SPDX-FileCopyrightText: 2018 Himanshu Vishwakarma <himvish997@gmail.com> 0004 * 0005 * Authors: 0006 * Himanshu Vishwakarma <himvish997@gmail.com> 0007 * 0008 * SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 0011 #include <QtTest> 0012 #include <QObject> 0013 #include <QFile> 0014 0015 #include "src/core/ApplicationSettings.h" 0016 #include "ApplicationSettingsMock.h" 0017 0018 #define APPLICATION_SETTINGS_TEST_ATTRIBUTE(attributeType, attributeName, accessorName, accessorNameChanged) \ 0019 { \ 0020 QFETCH(attributeType, attributeName); \ 0021 QSignalSpy spy(&applicationSettingsMock, &ApplicationSettings::accessorNameChanged); \ 0022 QVERIFY(spy.isValid()); \ 0023 QVERIFY(spy.count() == 0); \ 0024 applicationSettingsMock.accessorName(attributeName); \ 0025 QVERIFY(spy.count() == 1); \ 0026 QCOMPARE(applicationSettingsMock.attributeName(), attributeName); \ 0027 } 0028 0029 class CoreApplicationSettingsTest : public QObject 0030 { 0031 Q_OBJECT 0032 private slots: 0033 void cleanup(); 0034 void ApplicationSettingsInitializationTest(); 0035 void ApplicationSettingsTest(); 0036 void ApplicationSettingsTest_data(); 0037 void ActivitySettingsTest(); 0038 }; 0039 0040 void CoreApplicationSettingsTest::ApplicationSettingsInitializationTest() 0041 { 0042 ApplicationSettingsMock applicationSettings; 0043 QCOMPARE(applicationSettings.baseFontSizeMin(), -7); 0044 QCOMPARE(applicationSettings.baseFontSizeMax(), 7); 0045 QCOMPARE(applicationSettings.fontLetterSpacingMin(), (qreal)0.0); 0046 QCOMPARE(applicationSettings.fontLetterSpacingMax(), (qreal)8.0); 0047 } 0048 0049 void CoreApplicationSettingsTest::ApplicationSettingsTest_data() 0050 { 0051 QTest::addColumn<bool>("isAudioVoicesEnabled"); 0052 QTest::addColumn<bool>("isAudioEffectsEnabled"); 0053 QTest::addColumn<bool>("isBackgroundMusicEnabled"); 0054 QTest::addColumn<quint32>("previousHeight"); 0055 QTest::addColumn<quint32>("previousWidth"); 0056 QTest::addColumn<bool>("isVirtualKeyboard"); 0057 QTest::addColumn<QString>("locale"); 0058 QTest::addColumn<QString>("font"); 0059 QTest::addColumn<bool>("isEmbeddedFont"); 0060 QTest::addColumn<quint32>("fontCapitalization"); 0061 QTest::addColumn<qreal>("fontLetterSpacing"); 0062 QTest::addColumn<bool>("isAutomaticDownloadsEnabled"); 0063 QTest::addColumn<quint32>("filterLevelMin"); 0064 QTest::addColumn<quint32>("filterLevelMax"); 0065 QTest::addColumn<bool>("isKioskMode"); 0066 QTest::addColumn<bool>("sectionVisible"); 0067 QTest::addColumn<QString>("wordset"); 0068 QTest::addColumn<QString>("downloadServerUrl"); 0069 QTest::addColumn<QString>("cachePath"); 0070 QTest::addColumn<QString>("userDataPath"); 0071 QTest::addColumn<quint32>("exeCount"); 0072 QTest::addColumn<bool>("isBarHidden"); 0073 QTest::addColumn<int>("baseFontSize"); 0074 QTest::addColumn<int>("lastGCVersionRan"); 0075 QTest::addColumn<bool>("isFullscreen"); 0076 QTest::addColumn<QString>("renderer"); 0077 QTest::addColumn<qreal>("backgroundMusicVolume"); 0078 QTest::addColumn<qreal>("audioEffectsVolume"); 0079 QTest::addColumn<QStringList>("filteredBackgroundMusic"); 0080 0081 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"); 0082 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"); 0083 } 0084 0085 void CoreApplicationSettingsTest::ApplicationSettingsTest() 0086 { 0087 ApplicationSettingsMock applicationSettingsMock; 0088 ApplicationSettingsMock::getInstance(); 0089 0090 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAudioVoicesEnabled, setIsAudioVoicesEnabled, audioVoicesEnabledChanged); 0091 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAudioEffectsEnabled, setIsAudioEffectsEnabled, audioEffectsEnabledChanged); 0092 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isBackgroundMusicEnabled, setIsBackgroundMusicEnabled, backgroundMusicEnabledChanged); 0093 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, previousHeight, setPreviousHeight, previousHeightChanged); 0094 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, previousWidth, setPreviousWidth, previousWidthChanged); 0095 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isVirtualKeyboard, setVirtualKeyboard, virtualKeyboardChanged); 0096 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, locale, setLocale, localeChanged); 0097 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, font, setFont, fontChanged); 0098 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isEmbeddedFont, setIsEmbeddedFont, embeddedFontChanged); 0099 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, fontCapitalization, setFontCapitalization, fontCapitalizationChanged); 0100 APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, fontLetterSpacing, setFontLetterSpacing, fontLetterSpacingChanged); 0101 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isAutomaticDownloadsEnabled, setIsAutomaticDownloadsEnabled, automaticDownloadsEnabledChanged); 0102 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, filterLevelMin, setFilterLevelMin, filterLevelMinChanged); 0103 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, filterLevelMax, setFilterLevelMax, filterLevelMaxChanged); 0104 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isKioskMode, setKioskMode, kioskModeChanged); 0105 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, sectionVisible, setSectionVisible, sectionVisibleChanged); 0106 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, wordset, setWordset, wordsetChanged); 0107 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, downloadServerUrl, setDownloadServerUrl, downloadServerUrlChanged); 0108 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, cachePath, setCachePath, cachePathChanged); 0109 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, userDataPath, setUserDataPath, userDataPathChanged); 0110 APPLICATION_SETTINGS_TEST_ATTRIBUTE(quint32, exeCount, setExeCount, exeCountChanged); 0111 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isBarHidden, setBarHidden, barHiddenChanged); 0112 APPLICATION_SETTINGS_TEST_ATTRIBUTE(int, baseFontSize, setBaseFontSize, baseFontSizeChanged); 0113 APPLICATION_SETTINGS_TEST_ATTRIBUTE(int, lastGCVersionRan, setLastGCVersionRan, lastGCVersionRanChanged); 0114 APPLICATION_SETTINGS_TEST_ATTRIBUTE(bool, isFullscreen, setFullscreen, fullscreenChanged); 0115 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QString, renderer, setRenderer, rendererChanged); 0116 APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, backgroundMusicVolume, setBackgroundMusicVolume, backgroundMusicVolumeChanged); 0117 APPLICATION_SETTINGS_TEST_ATTRIBUTE(qreal, audioEffectsVolume, setAudioEffectsVolume, audioEffectsVolumeChanged); 0118 APPLICATION_SETTINGS_TEST_ATTRIBUTE(QStringList, filteredBackgroundMusic, setFilteredBackgroundMusic, filteredBackgroundMusicChanged); 0119 0120 delete ApplicationSettingsMock::getInstance(); 0121 } 0122 0123 void CoreApplicationSettingsTest::ActivitySettingsTest() 0124 { 0125 ApplicationSettingsMock applicationSettingsMock; 0126 ApplicationSettingsMock::getInstance(); 0127 // Creating a dummyActivity 0128 QString dummyActivity = QStringLiteral("DummyActivity"); 0129 0130 // By Default the DummyActivity is not favorite 0131 QVERIFY(!applicationSettingsMock.isFavorite(dummyActivity)); 0132 // Setting Up the DummyActivity as Favorite 0133 applicationSettingsMock.setFavorite(dummyActivity, true); 0134 QVERIFY(applicationSettingsMock.isFavorite(dummyActivity)); 0135 // setting Up the DummyActivity as Not favorite 0136 applicationSettingsMock.setFavorite(dummyActivity, false); 0137 QVERIFY(!applicationSettingsMock.isFavorite(dummyActivity)); 0138 0139 // By Default the activity progress is zero 0140 QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 0); 0141 // Saving the Activity Progress 0142 applicationSettingsMock.saveActivityProgress(dummyActivity, 3); 0143 QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 3); 0144 applicationSettingsMock.saveActivityProgress(dummyActivity, 10); 0145 QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 10); 0146 applicationSettingsMock.saveActivityProgress(dummyActivity, 0); 0147 QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 0); 0148 0149 // Test current level getter/setter 0150 QCOMPARE(applicationSettingsMock.currentLevels(dummyActivity), {}); 0151 applicationSettingsMock.setCurrentLevels(dummyActivity, {"3"}); 0152 QCOMPARE(applicationSettingsMock.currentLevels(dummyActivity), {"3"}); 0153 0154 // By Default the activity 0155 QVariantMap configuration; 0156 configuration.insert(QStringLiteral("DummyKey1"), QStringLiteral("DummyValue1")); 0157 configuration.insert(QStringLiteral("DummyKey2"), QStringLiteral("DummyValue2")); 0158 configuration.insert(QStringLiteral("DummyKey3"), QStringLiteral("DummyValue3")); 0159 configuration.insert(QStringLiteral("DummyKey4"), QStringLiteral("DummyValue4")); 0160 0161 applicationSettingsMock.saveActivityConfiguration(dummyActivity, configuration); 0162 QVariantMap newConfiguration = applicationSettingsMock.loadActivityConfiguration(dummyActivity); 0163 0164 QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey1")), configuration.value(QStringLiteral("DummyKey1"))); 0165 QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey2")), configuration.value(QStringLiteral("DummyKey2"))); 0166 QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey3")), configuration.value(QStringLiteral("DummyKey3"))); 0167 QCOMPARE(newConfiguration.value(QStringLiteral("DummyKey4")), configuration.value(QStringLiteral("DummyKey4"))); 0168 0169 delete ApplicationSettingsMock::getInstance(); 0170 } 0171 0172 void CoreApplicationSettingsTest::cleanup() 0173 { 0174 QFile::remove("./dummy_application_settings.conf"); 0175 } 0176 0177 QTEST_MAIN(CoreApplicationSettingsTest) 0178 #include "ApplicationSettingsTest.moc"