File indexing completed on 2024-06-23 11:14:26

0001 // SPDX-FileCopyrightText: Lukas Sommer <sommerluk@gmail.com>
0002 // SPDX-License-Identifier: BSD-2-Clause OR MIT
0003 
0004 // First included header is the public header of the class we are testing;
0005 // this forces the header to be self-contained.
0006 #include "settranslation.h"
0007 
0008 #include "colordialog.h"
0009 #include "rgbcolorspacefactory.h"
0010 #include <qcoreapplication.h>
0011 #include <qglobal.h>
0012 #include <qlocale.h>
0013 #include <qobject.h>
0014 #include <qstringliteral.h>
0015 #include <qtest.h>
0016 #include <qtestcase.h>
0017 
0018 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
0019 #include <qcontainerfwd.h>
0020 #include <qlist.h>
0021 #include <qstring.h>
0022 #include <qtmetamacros.h>
0023 #else
0024 #include <qobjectdefs.h>
0025 #include <qstring.h>
0026 #include <qstringlist.h>
0027 #endif
0028 
0029 namespace PerceptualColor
0030 {
0031 
0032 class TestSetTranslation : public QObject
0033 {
0034     Q_OBJECT
0035 
0036 public:
0037     explicit TestSetTranslation(QObject *parent = nullptr)
0038         : QObject(parent)
0039     {
0040     }
0041 
0042 private Q_SLOTS:
0043     void initTestCase()
0044     {
0045         // Called before the first test function is executed
0046     }
0047 
0048     void cleanupTestCase()
0049     {
0050         // Called after the last test function was executed
0051     }
0052 
0053     void init()
0054     {
0055         // Called before each test function is executed
0056     }
0057 
0058     void cleanup()
0059     {
0060         // Called after every test function
0061     }
0062 
0063     // NOTE This MUST be the very first test, so that still
0064     // PerceptualColor::initializeTranslation() has never been called before.
0065     void testIfTranslationIsActuallyLoaded()
0066     {
0067         auto m_srgbBuildinColorSpace = RgbColorSpaceFactory::createSrgb();
0068 
0069         QLocale::setDefault(QLocale(QStringLiteral("nl")));
0070         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0071                                         QLocale().uiLanguages());
0072         PerceptualColor::ColorDialog test1(m_srgbBuildinColorSpace);
0073         // Test if the window title is translated.
0074         QCOMPARE(test1.windowTitle(), QStringLiteral("Kleur selecteren"));
0075 
0076         // Try another language
0077         QLocale::setDefault(QLocale(QStringLiteral("es")));
0078         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0079                                         QLocale().uiLanguages());
0080         PerceptualColor::ColorDialog test2(m_srgbBuildinColorSpace);
0081         // Test if the window title is translated.
0082         QCOMPARE(test2.windowTitle(), QStringLiteral("Seleccionar color"));
0083 
0084         // try if capital language codes work
0085         QLocale::setDefault(QLocale(QStringLiteral("CA")));
0086         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0087                                         QStringList(QStringLiteral("CA")));
0088         PerceptualColor::ColorDialog test3(m_srgbBuildinColorSpace);
0089         // Test if the window title is translated.
0090         QCOMPARE(test3.windowTitle(), //
0091                  QStringLiteral("Selecció de color"));
0092 
0093         // Test if removing all translations works
0094         QLocale::setDefault(QLocale(QString()));
0095         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0096                                         QStringList(QString()));
0097         PerceptualColor::ColorDialog test4(m_srgbBuildinColorSpace);
0098         // Test if the window title is actually not translated.
0099         QCOMPARE(test4.windowTitle(), QStringLiteral("Select color"));
0100     }
0101 
0102     void testSetTranslationDoesNotCrash()
0103     {
0104         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0105                                         QLocale().uiLanguages());
0106     }
0107 
0108     void testSetTranslationDoesNotCrashOnSuccessiveCalls()
0109     {
0110         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0111                                         QLocale().uiLanguages());
0112         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0113                                         QLocale().uiLanguages());
0114         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0115                                         QLocale().uiLanguages());
0116         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0117                                         QLocale().uiLanguages());
0118         PerceptualColor::setTranslation(QCoreApplication::instance(), //
0119                                         QLocale().uiLanguages());
0120     }
0121 };
0122 
0123 } // namespace PerceptualColor
0124 
0125 QTEST_MAIN(PerceptualColor::TestSetTranslation)
0126 
0127 // The following “include” is necessary because we do not use a header file:
0128 #include "testsettranslation.moc"