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