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"