diff options
Diffstat (limited to 'tests/auto/qtranslator')
-rw-r--r-- | tests/auto/qtranslator/.gitignore | 1 | ||||
-rw-r--r-- | tests/auto/qtranslator/hellotr_la.qm | bin | 0 -> 230 bytes | |||
-rw-r--r-- | tests/auto/qtranslator/hellotr_la.ts | 16 | ||||
-rw-r--r-- | tests/auto/qtranslator/msgfmt_from_po.qm | bin | 0 -> 176988 bytes | |||
-rw-r--r-- | tests/auto/qtranslator/qtranslator.pro | 11 | ||||
-rw-r--r-- | tests/auto/qtranslator/tst_qtranslator.cpp | 241 |
6 files changed, 269 insertions, 0 deletions
diff --git a/tests/auto/qtranslator/.gitignore b/tests/auto/qtranslator/.gitignore new file mode 100644 index 0000000..ce24e10 --- /dev/null +++ b/tests/auto/qtranslator/.gitignore @@ -0,0 +1 @@ +tst_qtranslator diff --git a/tests/auto/qtranslator/hellotr_la.qm b/tests/auto/qtranslator/hellotr_la.qm Binary files differnew file mode 100644 index 0000000..cc42afe --- /dev/null +++ b/tests/auto/qtranslator/hellotr_la.qm diff --git a/tests/auto/qtranslator/hellotr_la.ts b/tests/auto/qtranslator/hellotr_la.ts new file mode 100644 index 0000000..2a4a41b --- /dev/null +++ b/tests/auto/qtranslator/hellotr_la.ts @@ -0,0 +1,16 @@ +<!DOCTYPE TS><TS version="1.1" language="de"> +<context> + <name>QPushButton</name> + <message> + <source>Hello world!</source> + <translation>Hallo Welt!</translation> + </message> + <message numerus="yes"> + <source>Hello %n world(s)!</source> + <translation> + <numerusform>Hallo %n Welt!</numerusform> + <numerusform>Hallo %n Welten!</numerusform> + </translation> + </message> +</context> +</TS> diff --git a/tests/auto/qtranslator/msgfmt_from_po.qm b/tests/auto/qtranslator/msgfmt_from_po.qm Binary files differnew file mode 100644 index 0000000..7b62819 --- /dev/null +++ b/tests/auto/qtranslator/msgfmt_from_po.qm diff --git a/tests/auto/qtranslator/qtranslator.pro b/tests/auto/qtranslator/qtranslator.pro new file mode 100644 index 0000000..e4ad22a --- /dev/null +++ b/tests/auto/qtranslator/qtranslator.pro @@ -0,0 +1,11 @@ +load(qttest_p4) +SOURCES += tst_qtranslator.cpp + + +wince*: { + addFiles.sources = hellotr_la.qm + addFiles.path = . + DEPLOYMENT += addFiles +} + + diff --git a/tests/auto/qtranslator/tst_qtranslator.cpp b/tests/auto/qtranslator/tst_qtranslator.cpp new file mode 100644 index 0000000..fb0e930 --- /dev/null +++ b/tests/auto/qtranslator/tst_qtranslator.cpp @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QWidget> +#include <qtranslator.h> +#include <qfile.h> + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QTranslator : public QWidget +{ + Q_OBJECT + +public: + tst_QTranslator(); + virtual ~tst_QTranslator(); + +public slots: + void init(); + void cleanup(); + +protected: + bool event(QEvent *event); + +private slots: + void load(); + void load2(); + void threadLoad(); + void testLanguageChange(); + void plural(); + void translate_qm_file_generated_with_msgfmt(); + +private: + int languageChangeEventCounter; +}; + + +tst_QTranslator::tst_QTranslator() + : languageChangeEventCounter(0) +{ + show(); + hide(); +} + +tst_QTranslator::~tst_QTranslator() +{ +} + +void tst_QTranslator::init() +{ +} + +void tst_QTranslator::cleanup() +{ +} + +bool tst_QTranslator::event(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + ++languageChangeEventCounter; + return QWidget::event(event); +} + +void tst_QTranslator::load() +{ + + QTranslator tor( 0 ); + tor.load("hellotr_la"); + QVERIFY(!tor.isEmpty()); + QCOMPARE(tor.translate("QPushButton", "Hello world!"), QString::fromLatin1("Hallo Welt!")); +} + +void tst_QTranslator::load2() +{ + QTranslator tor( 0 ); + QFile file("hellotr_la.qm"); + file.open(QFile::ReadOnly); + QByteArray data = file.readAll(); + tor.load((const uchar *)data.constData(), data.length()); + QVERIFY(!tor.isEmpty()); + QCOMPARE(tor.translate("QPushButton", "Hello world!"), QString::fromLatin1("Hallo Welt!")); +} + +class TranslatorThread : public QThread +{ + void run() { + QTranslator tor( 0 ); + tor.load("hellotr_la"); + + if (tor.isEmpty()) + qFatal("Could not load translation"); + if (tor.translate("QPushButton", "Hello world!") != QString::fromLatin1("Hallo Welt!")) + qFatal("Test string was not translated correctlys"); + } +}; + + +void tst_QTranslator::threadLoad() +{ + TranslatorThread thread; + thread.start(); + QVERIFY(thread.wait(10 * 1000)); +} + +void tst_QTranslator::testLanguageChange() +{ + languageChangeEventCounter = 0; + + QTranslator *tor = new QTranslator; + tor->load("hellotr_la.qm"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 0); + + tor->load("doesn't exist, same as clearing"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 0); + + tor->load("hellotr_la.qm"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 0); + + qApp->installTranslator(tor); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 1); + + tor->load("doesn't exist, same as clearing"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 2); + + tor->load("hellotr_la.qm"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 3); + + qApp->removeTranslator(tor); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 4); + + tor->load("doesn't exist, same as clearing"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 4); + + qApp->installTranslator(tor); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 4); + + tor->load("hellotr_la.qm"); + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 5); + + delete tor; + tor = 0; + qApp->sendPostedEvents(); + qApp->sendPostedEvents(); + QCOMPARE(languageChangeEventCounter, 6); +} + + +void tst_QTranslator::plural() +{ + + QTranslator tor( 0 ); + tor.load("hellotr_la"); + QVERIFY(!tor.isEmpty()); + QCoreApplication::installTranslator(&tor); + QCoreApplication::Encoding e = QCoreApplication::UnicodeUTF8; + QCOMPARE(QCoreApplication::translate("QPushButton", "Hello %n world(s)!", 0, e, 0), QString::fromLatin1("Hallo 0 Welten!")); + QCOMPARE(QCoreApplication::translate("QPushButton", "Hello %n world(s)!", 0, e, 1), QString::fromLatin1("Hallo 1 Welt!")); + QCOMPARE(QCoreApplication::translate("QPushButton", "Hello %n world(s)!", 0, e, 2), QString::fromLatin1("Hallo 2 Welten!")); +} + +void tst_QTranslator::translate_qm_file_generated_with_msgfmt() +{ + QTranslator translator; + translator.load("msgfmt_from_po"); + qApp->installTranslator(&translator); + + QCOMPARE(QCoreApplication::translate("", "Intro"), QLatin1String("Einleitung")); + // The file is converted from a po file, thus it does not have any context info. + // The following should then not be translated + QCOMPARE(QCoreApplication::translate("contekst", "Intro"), QLatin1String("Intro")); + QCOMPARE(QCoreApplication::translate("contekst", "Intro\0\0"), QLatin1String("Intro")); + QCOMPARE(QCoreApplication::translate("contekst", "Intro\0x"), QLatin1String("Intro")); + QCOMPARE(QCoreApplication::translate("", "Intro\0\0"), QLatin1String("Einleitung")); + QCOMPARE(QCoreApplication::translate("", "Intro\0x"), QLatin1String("Einleitung")); + + qApp->removeTranslator(&translator); +} + +QTEST_MAIN(tst_QTranslator) +#include "tst_qtranslator.moc" |