/* * Copyright (C) 2010, 2011, Pino Toscano * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include Q_DECLARE_METATYPE(GooString*) Q_DECLARE_METATYPE(Unicode*) class TestStrings : public QObject { Q_OBJECT private slots: void initTestCase(); void cleanupTestCase(); void check_unicodeToQString_data(); void check_unicodeToQString(); void check_UnicodeParsedString_data(); void check_UnicodeParsedString(); void check_QStringToUnicodeGooString_data(); void check_QStringToUnicodeGooString(); void check_QStringToGooString_data(); void check_QStringToGooString(); private: GooString* newGooString(const char *s); GooString* newGooString(const char *s, int l); QVector m_gooStrings; }; void TestStrings::initTestCase() { qRegisterMetaType("GooString*"); qRegisterMetaType("Unicode*"); globalParams = new GlobalParams(); } void TestStrings::cleanupTestCase() { qDeleteAll(m_gooStrings); delete globalParams; } void TestStrings::check_unicodeToQString_data() { QTest::addColumn("data"); QTest::addColumn("length"); QTest::addColumn("result"); { const int l = 1; Unicode *u = new Unicode[l]; u[0] = int('a'); QTest::newRow("a") << u << l << QString::fromUtf8("a"); } { const int l = 1; Unicode *u = new Unicode[l]; u[0] = 0x0161; QTest::newRow("\u0161") << u << l << QString::fromUtf8("\u0161"); } { const int l = 2; Unicode *u = new Unicode[l]; u[0] = int('a'); u[1] = int('b'); QTest::newRow("ab") << u << l << QString::fromUtf8("ab"); } { const int l = 2; Unicode *u = new Unicode[l]; u[0] = int('a'); u[1] = 0x0161; QTest::newRow("a\u0161") << u << l << QString::fromUtf8("a\u0161"); } { const int l = 2; Unicode *u = new Unicode[l]; u[0] = 0x5c01; u[1] = 0x9762; QTest::newRow("\xe5\xb0\x81\xe9\x9d\xa2") << u << l << QString::fromUtf8("\xe5\xb0\x81\xe9\x9d\xa2"); } { const int l = 3; Unicode *u = new Unicode[l]; u[0] = 0x5c01; u[1] = 0x9762; u[2] = 0x0; QTest::newRow("\xe5\xb0\x81\xe9\x9d\xa2 + 0") << u << l << QString::fromUtf8("\xe5\xb0\x81\xe9\x9d\xa2"); } } void TestStrings::check_unicodeToQString() { QFETCH(Unicode*, data); QFETCH(int, length); QFETCH(QString, result); QCOMPARE(Poppler::unicodeToQString(data, length), result); delete [] data; } void TestStrings::check_UnicodeParsedString_data() { QTest::addColumn("string"); QTest::addColumn("result"); // non-unicode strings QTest::newRow("") << newGooString("") << QString(); QTest::newRow("a") << newGooString("a") << QString::fromUtf8("a"); QTest::newRow("ab") << newGooString("ab") << QString::fromUtf8("ab"); QTest::newRow("~") << newGooString("~") << QString::fromUtf8("~"); QTest::newRow("test string") << newGooString("test string") << QString::fromUtf8("test string"); // unicode strings QTest::newRow("") << newGooString("\xFE\xFF") << QString(); QTest::newRow("U a") << newGooString("\xFE\xFF\0a", 4) << QString::fromUtf8("a"); QTest::newRow("U ~") << newGooString("\xFE\xFF\0~", 4) << QString::fromUtf8("~"); QTest::newRow("U aa") << newGooString("\xFE\xFF\0a\0a", 6) << QString::fromUtf8("aa"); QTest::newRow("U \xC3\x9F") << newGooString("\xFE\xFF\0\xDF", 4) << QString::fromUtf8("\xC3\x9F"); QTest::newRow("U \xC3\x9F\x61") << newGooString("\xFE\xFF\0\xDF\0\x61", 6) << QString::fromUtf8("\xC3\x9F\x61"); QTest::newRow("U \xC5\xA1") << newGooString("\xFE\xFF\x01\x61", 4) << QString::fromUtf8("\xC5\xA1"); QTest::newRow("U \xC5\xA1\x61") << newGooString("\xFE\xFF\x01\x61\0\x61", 6) << QString::fromUtf8("\xC5\xA1\x61"); QTest::newRow("test string") << newGooString("\xFE\xFF\0t\0e\0s\0t\0 \0s\0t\0r\0i\0n\0g", 24) << QString::fromUtf8("test string"); } void TestStrings::check_UnicodeParsedString() { QFETCH(GooString*, string); QFETCH(QString, result); QCOMPARE(Poppler::UnicodeParsedString(string), result); } void TestStrings::check_QStringToUnicodeGooString_data() { QTest::addColumn("string"); QTest::addColumn("result"); QTest::newRow("") << QString() << QByteArray(""); QTest::newRow("") << QString::fromUtf8("") << QByteArray(""); QTest::newRow("a") << QString::fromUtf8("a") << QByteArray("\0a", 2); QTest::newRow("ab") << QString::fromUtf8("ab") << QByteArray("\0a\0b", 4); QTest::newRow("test string") << QString::fromUtf8("test string") << QByteArray("\0t\0e\0s\0t\0 \0s\0t\0r\0i\0n\0g", 22); QTest::newRow("\xC3\x9F") << QString::fromUtf8("\xC3\x9F") << QByteArray("\0\xDF", 2); QTest::newRow("\xC3\x9F\x61") << QString::fromUtf8("\xC3\x9F\x61") << QByteArray("\0\xDF\0\x61", 4); } void TestStrings::check_QStringToUnicodeGooString() { QFETCH(QString, string); QFETCH(QByteArray, result); GooString *goo = Poppler::QStringToUnicodeGooString(string); QVERIFY(goo->hasUnicodeMarker()); QCOMPARE(goo->getLength(), string.length() * 2 + 2); QCOMPARE(result, QByteArray::fromRawData(goo->getCString() + 2, goo->getLength() - 2)); delete goo; } void TestStrings::check_QStringToGooString_data() { QTest::addColumn("string"); QTest::addColumn("result"); QTest::newRow("") << QString() << newGooString(""); QTest::newRow("") << QString::fromUtf8("") << newGooString(""); QTest::newRow("a") << QString::fromUtf8("a") << newGooString("a"); QTest::newRow("ab") << QString::fromUtf8("ab") << newGooString("ab"); } void TestStrings::check_QStringToGooString() { QFETCH(QString, string); QFETCH(GooString*, result); GooString *goo = Poppler::QStringToGooString(string); QCOMPARE(goo->getCString(), result->getCString()); delete goo; } GooString* TestStrings::newGooString(const char *s) { GooString *goo = new GooString(s); m_gooStrings.append(goo); return goo; } GooString* TestStrings::newGooString(const char *s, int l) { GooString *goo = new GooString(s, l); m_gooStrings.append(goo); return goo; } QTEST_MAIN(TestStrings) #include "check_strings.moc"