diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tools/linguist/tests | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'tools/linguist/tests')
-rw-r--r-- | tools/linguist/tests/data/main.cpp | 35 | ||||
-rw-r--r-- | tools/linguist/tests/data/test.pro | 9 | ||||
-rw-r--r-- | tools/linguist/tests/tests.pro | 16 | ||||
-rw-r--r-- | tools/linguist/tests/tst_linguist.cpp | 4 | ||||
-rw-r--r-- | tools/linguist/tests/tst_linguist.h | 22 | ||||
-rw-r--r-- | tools/linguist/tests/tst_lupdate.cpp | 165 | ||||
-rw-r--r-- | tools/linguist/tests/tst_simtexth.cpp | 43 |
7 files changed, 294 insertions, 0 deletions
diff --git a/tools/linguist/tests/data/main.cpp b/tools/linguist/tests/data/main.cpp new file mode 100644 index 0000000..ebbda0a --- /dev/null +++ b/tools/linguist/tests/data/main.cpp @@ -0,0 +1,35 @@ + +#include <QtGui> +#include <QtCore> + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + QStringList args = app.arguments(); + + if (argc <= 1) { + qDebug() << "Usage: " << qPrintable(args[0]) << " <ts-file>"; + return 1; + } + + QTranslator trans; + trans.load(args[1], "."); + app.installTranslator(&trans); + + QWidget w; + QVBoxLayout *layout = new QVBoxLayout(&w); + + QLabel label1(QObject::tr("XXXXXXXXX \33 XXXXXXXXXXX • and → "), 0); + QLabel label2(QObject::tr("\32"), 0); + QLabel label3(QObject::tr("\176"), 0); + QLabel label4(QObject::tr("\301"), 0); + + layout->addWidget(&label1); + layout->addWidget(&label2); + layout->addWidget(&label3); + layout->addWidget(&label4); + + w.show(); + + return app.exec(); +} diff --git a/tools/linguist/tests/data/test.pro b/tools/linguist/tests/data/test.pro new file mode 100644 index 0000000..90e5704 --- /dev/null +++ b/tools/linguist/tests/data/test.pro @@ -0,0 +1,9 @@ +TEMPLATE = app +TARGET += +DEPENDPATH += . +INCLUDEPATH += . + +SOURCES += main.cpp + +TRANSLATIONS += t1_en.ts +TRANSLATIONS += t1_de.ts diff --git a/tools/linguist/tests/tests.pro b/tools/linguist/tests/tests.pro new file mode 100644 index 0000000..a67725c --- /dev/null +++ b/tools/linguist/tests/tests.pro @@ -0,0 +1,16 @@ +load(qttest_p4) + +QT += xml + +HEADERS += \ + tst_linguist.h \ + ../shared/translator.h + +SOURCES += \ + tst_linguist.cpp \ + tst_lupdate.cpp \ + tst_simtexth.cpp \ + ../shared/simtexth.cpp \ + ../shared/translator.cpp \ + ../shared/translatormessage.cpp \ + ../shared/xliff.cpp diff --git a/tools/linguist/tests/tst_linguist.cpp b/tools/linguist/tests/tst_linguist.cpp new file mode 100644 index 0000000..199ddbb --- /dev/null +++ b/tools/linguist/tests/tst_linguist.cpp @@ -0,0 +1,4 @@ +#include "tst_linguist.h" +#include "moc_tst_linguist.cpp" + +QTEST_MAIN(tst_linguist) diff --git a/tools/linguist/tests/tst_linguist.h b/tools/linguist/tests/tst_linguist.h new file mode 100644 index 0000000..27a53bb --- /dev/null +++ b/tools/linguist/tests/tst_linguist.h @@ -0,0 +1,22 @@ +#ifndef TST_LINGUIST +#define TST_LINGUIST + +#include <QtTest/QtTest> +#include <QtCore/QtCore> + +//TESTED_CLASS= +//TESTED_FILES= + + +class tst_linguist : public QObject +{ + Q_OBJECT +private slots: + void fetchtr(); + void fetchtr_data(); + + void simtexth(); + void simtexth_data(); +}; + +#endif diff --git a/tools/linguist/tests/tst_lupdate.cpp b/tools/linguist/tests/tst_lupdate.cpp new file mode 100644 index 0000000..043e653 --- /dev/null +++ b/tools/linguist/tests/tst_lupdate.cpp @@ -0,0 +1,165 @@ + +/**************************************************************************** + ** + ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ****************************************************************************/ + +#include <QtTest/QtTest> +#include <QtCore/QtCore> + +//TESTED_CLASS= +//TESTED_FILES= + +#include "tst_linguist.h" + +void tst_linguist::fetchtr() +{ + // FIXME: This probably should use some yet-to-be-invented + // binary interface to 'lupdate' instead of playing around + // with the filesystem, + + QRegExp reg("\\s*"); + QString lupdate("lupdate"); + + QFETCH(QString, input); + + QFETCH(QString, name); + QFETCH(QString, file); + QFETCH(QString, line); + QFETCH(QString, src); + + QString result; + + QTemporaryFile profile("tst_lu_XXXXXX.pro"); + QTemporaryFile cppfile("tst_lu_XXXXXX.cpp"); + QTemporaryFile tsfile("tst_lu_XXXXXX.ts"); + + profile.open(); + cppfile.open(); + tsfile.open(); + +#if 0 + profile.setAutoRemove(false); + cppfile.setAutoRemove(false); + tsfile.setAutoRemove(false); + + qDebug() << ".pro: " << profile.fileName(); + qDebug() << ".cpp: " << cppfile.fileName(); + qDebug() << ".ts: " << tsfile.fileName(); +#endif + + QTextStream prots(&profile); + prots << "SOURCES += " << cppfile.fileName() << "\n"; + prots << "TRANSLATIONS += " << tsfile.fileName() << "\n"; + prots.flush(); + + QTextStream cppts(&cppfile); + cppts.setCodec("ISO 8859-1"); + cppts << input << '\n'; + cppts.flush(); + + QProcess proc; + proc.start(lupdate, QStringList() << profile.fileName()); + proc.waitForFinished(); + + result = tsfile.readAll(); + + static QRegExp re( + "<name>(.+)</name>\\s*" + "<message.*>\\s*" // there might be a numerus="yes" attribiute + "<location filename=\"(.+)\" line=\"(\\d+)\"/>\\s*" + "<source>(.+)</source>\\s*" + "<translation type=\"unfinished\">.*</translation>\\s*" + ); + + re.indexIn(result); + QString resname = re.cap(1); + //QString resfile = re.cap(2); + QString resline = re.cap(3); + QString ressrc = re.cap(4); + + //qDebug() << "pattern:" << re.pattern(); + //qDebug() << "result:" << result; + //qDebug() << "resname:" << resname; + ////qDebug() << "resfile:" << resfile; + //qDebug() << "resline:" << resline; + //qDebug() << "ressource:" << ressrc; + + QCOMPARE(src + ": " + resname, src + ": " + name); + QCOMPARE(src + ": " + resline, src + ": " + line); + QCOMPARE(src + ": " + ressrc, src + ": " + src); +} + +void tst_linguist::fetchtr_data() +{ + using namespace QTest; + + addColumn<QString>("input"); + addColumn<QString>("name"); + addColumn<QString>("file"); + addColumn<QString>("line"); + addColumn<QString>("src"); + + // plain stuff + newRow("00") << "int main() { tr(\"foo\"); }" + << "@default" << "XXXXXX" << "1" << "foo"; + + // space at beginning of text + newRow("01") << "int main() { tr(\" foo\"); }" + << "@default" << "XXXXXX" << "1" << " foo"; + // space at end of text + newRow("02") << "int main() { tr(\"foo \"); }" + << "@default" << "XXXXXX" << "1" << "foo "; + // space in the middle of the text + newRow("03") << "int main() { tr(\"foo bar\"); }" + << "@default" << "XXXXXX" << "1" << "foo bar"; + + // tab at beginning of text + newRow("04") << "int main() { tr(\"\tfoo\"); }" + << "@default" << "XXXXXX" << "1" << "<byte value=\"x9\"/>foo"; + // tab at end of text + newRow("05") << "int main() { tr(\"foo\t\"); }" + << "@default" << "XXXXXX" << "1" << "foo<byte value=\"x9\"/>"; + // tab in the middle of the text + newRow("06") << "int main() { tr(\"foo\tbar\"); }" + << "@default" << "XXXXXX" << "1" << "foo<byte value=\"x9\"/>bar"; + + // check for unicode + newRow("07") << "int main() { tr(\"\32\"); }" // 26 dec + << "@default" << "XXXXXX" << "1" << "<byte value=\"x1a\"/>"; + // check for unicode + newRow("08") << "int main() { tr(\"\33\"); }" // 27 dec + << "@default" << "XXXXXX" << "1" << "<byte value=\"x1b\"/>"; + // check for unicode + newRow("09") << "int main() { tr(\"\176\"); }" // 124 dec + << "@default" << "XXXXXX" << "1" << "~"; + // check for unicode + newRow("10") << "int main() { tr(\"\301\"); }" // 193 dec + << "@default" << "XXXXXX" << "1" << "Á"; + + // Bug 162562: lupdate does not find QCoreApplication::translate() strings + newRow("11") << "int main() { QString s = QCoreApplication::translate" + "(\"mycontext\", \"msg\", \"\", QCoreApplication::CodecForTr, 2);" + << "mycontext" << "XXXXXX" << "1" << "msg"; + + // Bug 161504: lupdate produces wrong ts file with context "N::QObject" + newRow("12") << "namespace N { QString foo() " + "{ return QObject::tr(\"msg\"); }" + << "QObject" << "XXXXXX" << "1" << "msg"; + + // Correct example from 161504: + newRow("13") << "namespace N { QString foo(); }" + "QString N::anyfunc() { return QObject::tr(\"msg\"); }" + << "QObject" << "XXXXXX" << "1" << "msg"; + + // Bug 161106: When specifying ::QObject::tr() then lupdate will + // take the previous word as being the namespace + newRow("14") << " std::cout << ::QObject::tr(\"msg\");" + << "QObject" << "XXXXXX" << "1" << "msg"; + +} diff --git a/tools/linguist/tests/tst_simtexth.cpp b/tools/linguist/tests/tst_simtexth.cpp new file mode 100644 index 0000000..81a7f19 --- /dev/null +++ b/tools/linguist/tests/tst_simtexth.cpp @@ -0,0 +1,43 @@ + +/**************************************************************************** + ** + ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ****************************************************************************/ + +#include <QtTest/QtTest> +#include <QtCore/QtCore> + +//int getSimilarityScore(const QString &str1, const char* str2); +#include "../shared/simtexth.h" +#include "tst_linguist.h" + +void tst_linguist::simtexth() +{ + QFETCH(QString, one); + QFETCH(QString, two); + QFETCH(int, expected); + + int measured = getSimilarityScore(one, two.toLatin1()); + QCOMPARE(measured, expected); +} + + +void tst_linguist::simtexth_data() +{ + using namespace QTest; + + addColumn<QString>("one"); + addColumn<QString>("two"); + addColumn<int>("expected"); + + newRow("00") << "" << "" << 1024; + newRow("01") << "a" << "a" << 1024; + newRow("02") << "ab" << "ab" << 1024; + newRow("03") << "abc" << "abc" << 1024; + newRow("04") << "abcd" << "abcd" << 1024; +} |