File indexing completed on 2024-04-14 03:58:19

0001 /**
0002  * test_settings.cpp
0003  *
0004  * SPDX-FileCopyrightText: 2015 Kåre Särs <kare.sars@iki.fi>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-or-later
0007  */
0008 
0009 #include "test_settings.h"
0010 
0011 #include "settingsimpl_p.h"
0012 #include "speller.h"
0013 
0014 #include <QDateTime>
0015 #include <QDebug>
0016 #include <QFileInfo>
0017 #include <QSettings>
0018 #include <QStandardPaths>
0019 #include <QTest>
0020 
0021 QTEST_GUILESS_MAIN(SonnetSettingsTest)
0022 
0023 using namespace Sonnet;
0024 
0025 void SonnetSettingsTest::initTestCase()
0026 {
0027     QStandardPaths::setTestModeEnabled(true);
0028 }
0029 
0030 void SonnetSettingsTest::testRestoreDoesNotSave()
0031 {
0032     QSettings settings(QStringLiteral("KDE"), QStringLiteral("Sonnet"));
0033     QString fileName = settings.fileName();
0034 
0035     QDateTime startTime = QFileInfo(fileName).lastModified();
0036 
0037     // NOTE: We use new/delete to be able to test that the settings are not
0038     // needlessly saved on deletion of Speller
0039     Speller *speller = new Speller();
0040     // NOTE: This test works on Unix, but should _not_ fail on Windows as
0041     // QFileInfo::lastModified() always returns invalid QDateTime
0042     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0043 
0044     speller->language();
0045     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0046 
0047     QStringList langs = speller->availableLanguages();
0048     for (int i = 0; i < langs.count(); ++i) {
0049         speller->setLanguage(langs[i]);
0050     }
0051     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0052 
0053     speller->availableLanguages();
0054     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0055 
0056     speller->restore();
0057     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0058 
0059     // Test that the settings are not saved needlessly on delete
0060     delete speller;
0061     QCOMPARE(QFileInfo(fileName).lastModified(), startTime);
0062 }
0063 
0064 void SonnetSettingsTest::testSpellerAPIChangeSaves()
0065 {
0066     QSettings settings(QStringLiteral("KDE"), QStringLiteral("Sonnet"));
0067     Speller speller;
0068 
0069     // Default Language
0070     QString defLang = speller.defaultLanguage();
0071     QString settingsLang = settings.value(QStringLiteral("defaultLanguage"), QLocale::system().name()).toString();
0072     QCOMPARE(defLang, settingsLang);
0073 
0074     QStringList langs = speller.availableLanguages();
0075     for (int i = 0; i < langs.count(); ++i) {
0076         if (langs[i] != defLang) {
0077             speller.setDefaultLanguage(langs[i]);
0078             settingsLang = settings.value(QStringLiteral("defaultLanguage"), QLocale::system().name()).toString();
0079             QCOMPARE(settingsLang, langs[i]);
0080             QCOMPARE(speller.defaultLanguage(), langs[i]);
0081             break;
0082         }
0083     }
0084     // set the original value
0085     speller.setDefaultLanguage(defLang);
0086     settingsLang = settings.value(QStringLiteral("defaultLanguage"), QLocale::system().name()).toString();
0087     QCOMPARE(settingsLang, defLang);
0088     QCOMPARE(speller.defaultLanguage(), defLang);
0089 
0090     // Default Client
0091     QString defClient = speller.defaultClient();
0092     QString settingsClient = settings.value(QStringLiteral("defaultClient"), QString()).toString();
0093     QCOMPARE(defClient, settingsClient);
0094 
0095     QStringList clients = speller.availableBackends();
0096     qDebug() << clients;
0097     for (int i = 0; i < clients.count(); ++i) {
0098         if (clients[i] != defLang) {
0099             speller.setDefaultClient(clients[i]);
0100             settingsClient = settings.value(QStringLiteral("defaultClient"), QString()).toString();
0101             QCOMPARE(settingsClient, clients[i]);
0102             QCOMPARE(speller.defaultClient(), clients[i]);
0103             break;
0104         }
0105     }
0106     // set the original value
0107     if (defClient.isEmpty()) {
0108         // setting default to "" does not work.
0109         settings.remove(QStringLiteral("defaultClient"));
0110     } else {
0111         speller.setDefaultClient(defClient);
0112     }
0113     settingsClient = settings.value(QStringLiteral("defaultClient"), QString()).toString();
0114     QCOMPARE(settingsClient, defClient);
0115     if (!defClient.isEmpty()) {
0116         QCOMPARE(speller.defaultClient(), defClient);
0117     }
0118 
0119     // Check uppercase
0120     bool checkUppercase = speller.testAttribute(Speller::CheckUppercase);
0121     bool settingsUppercase = settings.value(QStringLiteral("checkUppercase"), true).toBool();
0122     QCOMPARE(checkUppercase, settingsUppercase);
0123     // Change the attribute
0124     speller.setAttribute(Speller::CheckUppercase, !checkUppercase);
0125     settingsUppercase = settings.value(QStringLiteral("checkUppercase"), true).toBool();
0126     QCOMPARE(!checkUppercase, settingsUppercase);
0127     QCOMPARE(!checkUppercase, speller.testAttribute(Speller::CheckUppercase));
0128     // now set it back to what it was
0129     speller.setAttribute(Speller::CheckUppercase, checkUppercase);
0130     settingsUppercase = settings.value(QStringLiteral("checkUppercase"), true).toBool();
0131     QCOMPARE(checkUppercase, settingsUppercase);
0132     QCOMPARE(checkUppercase, speller.testAttribute(Speller::CheckUppercase));
0133 
0134     // Skip Run Together
0135     bool skipRunTogether = speller.testAttribute(Speller::SkipRunTogether);
0136     bool settingsSkipRunTogether = settings.value(QStringLiteral("skipRunTogether"), true).toBool();
0137     QCOMPARE(skipRunTogether, settingsSkipRunTogether);
0138     // Change the attribute
0139     speller.setAttribute(Speller::SkipRunTogether, !skipRunTogether);
0140     settingsSkipRunTogether = settings.value(QStringLiteral("skipRunTogether"), true).toBool();
0141     QCOMPARE(!skipRunTogether, settingsSkipRunTogether);
0142     QCOMPARE(!skipRunTogether, speller.testAttribute(Speller::SkipRunTogether));
0143     // now set it back to what it was
0144     speller.setAttribute(Speller::SkipRunTogether, skipRunTogether);
0145     settingsSkipRunTogether = settings.value(QStringLiteral("skipRunTogether"), true).toBool();
0146     QCOMPARE(skipRunTogether, settingsSkipRunTogether);
0147     QCOMPARE(skipRunTogether, speller.testAttribute(Speller::SkipRunTogether));
0148 
0149     // Auto Detect Language
0150     bool autodetectLanguage = speller.testAttribute(Speller::AutoDetectLanguage);
0151     bool settingsAutoDetectLanguage = settings.value(QStringLiteral("autodetectLanguage"), true).toBool();
0152     QCOMPARE(autodetectLanguage, settingsAutoDetectLanguage);
0153     // Change the attribute
0154     speller.setAttribute(Speller::AutoDetectLanguage, !autodetectLanguage);
0155     settingsAutoDetectLanguage = settings.value(QStringLiteral("autodetectLanguage"), true).toBool();
0156     QCOMPARE(!autodetectLanguage, settingsAutoDetectLanguage);
0157     QCOMPARE(!autodetectLanguage, speller.testAttribute(Speller::AutoDetectLanguage));
0158     // now set it back to what it was
0159     speller.setAttribute(Speller::AutoDetectLanguage, autodetectLanguage);
0160     settingsAutoDetectLanguage = settings.value(QStringLiteral("autodetectLanguage"), true).toBool();
0161     QCOMPARE(autodetectLanguage, settingsAutoDetectLanguage);
0162     QCOMPARE(autodetectLanguage, speller.testAttribute(Speller::AutoDetectLanguage));
0163 }
0164 
0165 #include "moc_test_settings.cpp"