2
* Copyright (c) 2008, Benjamin C. Meyer
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
7
* 1. Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* 2. Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
* 3. Neither the name of the Benjamin Meyer nor the names of its contributors
13
* may be used to endorse or promote products derived from this software
14
* without specific prior written permission.
16
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30
#include <qsignalspy.h>
32
#include <languagemanager.h>
35
class tst_LanguageManager : public QObject
41
void cleanupTestCase();
46
void languagemanager_data();
47
void languagemanager();
49
void isLanguageAvailable_data();
50
void isLanguageAvailable();
51
void chooseNewLanguage_data();
52
void chooseNewLanguage();
53
void setCurrentLanguage_data();
54
void setCurrentLanguage();
57
// Subclass that exposes the protected functions.
58
class SubLanguageManager : public LanguageManager
61
SubLanguageManager() : LanguageManager() {
62
addLocaleDirectory(qApp->applicationDirPath() + QLatin1String("/.qm/locale"));
67
class TestWidget : public QWidget
70
void changeEvent(QEvent *event) {
71
if (event->type() == QEvent::LanguageChange)
73
QWidget::changeEvent(event);
79
// This will be called before the first test function is executed.
80
// It is only called once.
81
void tst_LanguageManager::initTestCase()
85
// This will be called after the last test function is executed.
86
// It is only called once.
87
void tst_LanguageManager::cleanupTestCase()
91
// This will be called before each test function is executed.
92
void tst_LanguageManager::init()
94
SubLanguageManager manager;
95
manager.setCurrentLanguage(QString());
98
// This will be called after every test function.
99
void tst_LanguageManager::cleanup()
103
void tst_LanguageManager::languagemanager_data()
107
void tst_LanguageManager::languagemanager()
109
SubLanguageManager manager;
111
// spawns an event loop...
112
// manager.chooseNewLanguage();
114
QString fallbackLanguage;
115
if (manager.isLanguageAvailable(QLocale::system().name()))
116
fallbackLanguage = QLocale::system().name();
118
QCOMPARE(manager.currentLanguage(), fallbackLanguage);
119
manager.setCurrentLanguage(QString());
122
void tst_LanguageManager::isLanguageAvailable_data()
124
QTest::addColumn<QString>("language");
125
QTest::addColumn<bool>("available");
126
QTest::newRow("null") << QString() << true;
127
QTest::newRow("fallback0") << "ca_ES" << true;
128
QTest::newRow("fallback1") << "ca_ES.UTF-8" << true;
129
QTest::newRow("fallback2") << "de_AT" << true;
132
void tst_LanguageManager::isLanguageAvailable()
134
QFETCH(QString, language);
135
QFETCH(bool, available);
136
SubLanguageManager manager;
137
QCOMPARE(manager.isLanguageAvailable(language), available);
140
void tst_LanguageManager::chooseNewLanguage_data()
142
QTest::addColumn<int>("foo");
143
QTest::newRow("null") << 0;
146
// public void chooseNewLanguage()
147
void tst_LanguageManager::chooseNewLanguage()
149
// how do you test this?
153
SubLanguageManager manager;
155
manager.chooseNewLanguage();
157
QSKIP("Test is not implemented.", SkipAll);
160
void tst_LanguageManager::setCurrentLanguage_data()
162
SubLanguageManager manager;
164
QString fallbackLanguage;
165
if (manager.isLanguageAvailable(QLocale::system().name()))
166
fallbackLanguage = QLocale::system().name();
168
QTest::addColumn<QString>("language");
169
QTest::addColumn<bool>("success");
170
QTest::addColumn<QString>("result");
171
QTest::newRow("null-foo") << QString("foo") << false << fallbackLanguage;
172
QTest::newRow("null-null") << QString() << false << fallbackLanguage;
174
QString validLanguage = manager.languages().value(0);
175
if (validLanguage.isEmpty())
176
QSKIP("no languages to test with", SkipAll);
177
QTest::newRow(validLanguage.toLatin1()) << validLanguage << true << validLanguage;
178
QTest::newRow("fallback") << "ca_ES" << true << "ca_ES";
181
// public void setCurrentLanguage(QString const &language)
182
void tst_LanguageManager::setCurrentLanguage()
184
QFETCH(QString, language);
185
QFETCH(bool, success);
186
QFETCH(QString, result);
188
SubLanguageManager manager;
189
QString initialLanguage = manager.currentLanguage();
190
QSignalSpy spy(&manager, SIGNAL(languageChanged(const QString &)));
193
widget.retranslate = false;
194
QCOMPARE(manager.setCurrentLanguage(language), success);
195
QCOMPARE(manager.currentLanguage(), result);
197
// test if we set the default locale properly
198
// this is essential for opensearch localization
199
QLocale currentLocale(manager.currentLanguage());
200
if (manager.currentLanguage().isEmpty())
201
currentLocale = QLocale();
202
QCOMPARE(currentLocale, QLocale());
204
qApp->processEvents();
205
QCOMPARE(widget.retranslate, success);
206
QCOMPARE(spy.count(), success ? 1 : 0);
208
QVERIFY(manager.setCurrentLanguage(QString()));
209
QCOMPARE(spy.count(), 2);
213
QTEST_MAIN(tst_LanguageManager)
214
#include "tst_languagemanager.moc"