[poppler] 4 commits - qt4/src qt4/tests
Pino Toscano
pino at kemper.freedesktop.org
Fri Sep 17 05:32:39 PDT 2010
qt4/src/poppler-private.cc | 4 -
qt4/tests/CMakeLists.txt | 3
qt4/tests/Makefile.am | 7 +
qt4/tests/check_strings.cpp | 174 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 186 insertions(+), 2 deletions(-)
New commits:
commit ffd227b7669895325d752009d5185973cf86ce5b
Author: Pino Toscano <pino at kde.org>
Date: Fri Sep 17 14:25:57 2010 +0200
[Qt4] optimize UnicodeParsedString using less memory from QString
- reserve() the right number of chars in the result string, so there is less possibility to make it gr
ow its buffer
- do not call unicodeToQString() just to create a 1 character string, but directly append a QChar crea
ted with the resulting unicode value (always belonging to the BMP)
this should reduce of a very little bit the memory usage, while give a sensible speedup of UnicodeParsedString invocations
diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index 4612fcf..df55b20 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -71,11 +71,13 @@ namespace Poppler {
{
isUnicode = gTrue;
i = 2;
+ result.reserve( ( s1->getLength() - 2 ) / 2 );
}
else
{
isUnicode = gFalse;
i = 0;
+ result.reserve( s1->getLength() );
}
while ( i < s1->getLength() )
{
@@ -89,7 +91,7 @@ namespace Poppler {
u = s1->getChar(i) & 0xff;
++i;
}
- result += unicodeToQString( &u, 1 );
+ result += QChar( u );
}
return result;
}
commit 6180890008f2b1814f092f50b8f75376399905ba
Author: Pino Toscano <pino at kde.org>
Date: Fri Sep 17 13:23:25 2010 +0200
[Qt4/tests] check_strings: add a test case for UnicodeParsedString
very simple test data for it, at the moment
diff --git a/qt4/tests/check_strings.cpp b/qt4/tests/check_strings.cpp
index f45556a..f9913c8 100644
--- a/qt4/tests/check_strings.cpp
+++ b/qt4/tests/check_strings.cpp
@@ -15,6 +15,8 @@ private slots:
void cleanupTestCase();
void check_unicodeToQString_data();
void check_unicodeToQString();
+ void check_UnicodeParsedString_data();
+ void check_UnicodeParsedString();
void check_QStringToGooString_data();
void check_QStringToGooString();
@@ -81,6 +83,52 @@ void TestStrings::check_unicodeToQString()
delete [] data;
}
+void TestStrings::check_UnicodeParsedString_data()
+{
+ QTest::addColumn<GooString*>("string");
+ QTest::addColumn<QString>("result");
+
+ // non-unicode strings
+ QTest::newRow("<empty>") << 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("<unicode marks>") << 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_QStringToGooString_data()
{
QTest::addColumn<QString>("string");
commit c5f78d7d3953d62a746c6f5a90085ea020fe5ec7
Author: Pino Toscano <pino at kde.org>
Date: Fri Sep 17 12:54:32 2010 +0200
[Qt4/tests] check_string: use a pool of GooString
this way we can reuse the GooString in a data set even after a test run (eg in benchmarks),
making sure they all are properly freed
diff --git a/qt4/tests/check_strings.cpp b/qt4/tests/check_strings.cpp
index 474556e..f45556a 100644
--- a/qt4/tests/check_strings.cpp
+++ b/qt4/tests/check_strings.cpp
@@ -12,10 +12,17 @@ class TestStrings : public QObject
private slots:
void initTestCase();
+ void cleanupTestCase();
void check_unicodeToQString_data();
void check_unicodeToQString();
void check_QStringToGooString_data();
void check_QStringToGooString();
+
+private:
+ GooString* newGooString(const char *s);
+ GooString* newGooString(const char *s, int l);
+
+ QVector<GooString *> m_gooStrings;
};
void TestStrings::initTestCase()
@@ -24,6 +31,11 @@ void TestStrings::initTestCase()
qRegisterMetaType<Unicode*>("Unicode*");
}
+void TestStrings::cleanupTestCase()
+{
+ qDeleteAll(m_gooStrings);
+}
+
void TestStrings::check_unicodeToQString_data()
{
QTest::addColumn<Unicode*>("data");
@@ -75,13 +87,13 @@ void TestStrings::check_QStringToGooString_data()
QTest::addColumn<GooString*>("result");
QTest::newRow("<null>") << QString()
- << new GooString("");
+ << newGooString("");
QTest::newRow("<empty>") << QString::fromUtf8("")
- << new GooString("");
+ << newGooString("");
QTest::newRow("a") << QString::fromUtf8("a")
- << new GooString("a");
+ << newGooString("a");
QTest::newRow("ab") << QString::fromUtf8("ab")
- << new GooString("ab");
+ << newGooString("ab");
}
void TestStrings::check_QStringToGooString()
@@ -93,7 +105,20 @@ void TestStrings::check_QStringToGooString()
QCOMPARE(goo->getCString(), result->getCString());
delete goo;
- delete result;
+}
+
+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)
commit 0cd5a256bdf7778c0c720941a611ad8ab56fa2e9
Author: Pino Toscano <pino at kde.org>
Date: Fri Sep 17 00:27:53 2010 +0200
[Qt4/tests] first version of a unit test for strings
this is used for testing the various string conversions:
- unicodeToQString
- UnicodeParsedString
- QStringToUnicodeGooString
- QStringToGooString
the 1st and the 4th have basic tests
given private symbols are used, this unit test is not compiled on windows (at least, it supposed to be so)
diff --git a/qt4/tests/CMakeLists.txt b/qt4/tests/CMakeLists.txt
index 3a67614..d0ba762 100644
--- a/qt4/tests/CMakeLists.txt
+++ b/qt4/tests/CMakeLists.txt
@@ -55,3 +55,6 @@ qt4_add_qtest(check_password check_password.cpp)
qt4_add_qtest(check_permissions check_permissions.cpp)
qt4_add_qtest(check_search check_search.cpp)
qt4_add_qtest(check_actualtext check_actualtext.cpp)
+if (NOT WIN32)
+ qt4_add_qtest(check_strings check_strings.cpp)
+endif (NOT WIN32)
diff --git a/qt4/tests/Makefile.am b/qt4/tests/Makefile.am
index 244097c..93e1132 100644
--- a/qt4/tests/Makefile.am
+++ b/qt4/tests/Makefile.am
@@ -78,7 +78,8 @@ TESTS = \
check_pagemode \
check_password \
check_pagelayout \
- check_search
+ check_search \
+ check_strings
check_PROGRAMS = $(TESTS)
@@ -130,5 +131,9 @@ check_search_SOURCES = check_search.cpp
check_search.$(OBJEXT): check_search.moc
check_search_LDADD = $(LDADDS) $(POPPLER_QT4_TEST_LIBS)
+check_strings_SOURCES = check_strings.cpp
+check_strings.$(OBJEXT): check_strings.moc
+check_strings_LDADD = $(LDADDS) $(POPPLER_QT4_TEST_LIBS)
+
endif
diff --git a/qt4/tests/check_strings.cpp b/qt4/tests/check_strings.cpp
new file mode 100644
index 0000000..474556e
--- /dev/null
+++ b/qt4/tests/check_strings.cpp
@@ -0,0 +1,101 @@
+#include <QtTest/QtTest>
+
+#include <poppler-qt4.h>
+#include <poppler-private.h>
+
+Q_DECLARE_METATYPE(GooString*)
+Q_DECLARE_METATYPE(Unicode*)
+
+class TestStrings : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void check_unicodeToQString_data();
+ void check_unicodeToQString();
+ void check_QStringToGooString_data();
+ void check_QStringToGooString();
+};
+
+void TestStrings::initTestCase()
+{
+ qRegisterMetaType<GooString*>("GooString*");
+ qRegisterMetaType<Unicode*>("Unicode*");
+}
+
+void TestStrings::check_unicodeToQString_data()
+{
+ QTest::addColumn<Unicode*>("data");
+ QTest::addColumn<int>("length");
+ QTest::addColumn<QString>("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");
+ }
+}
+
+void TestStrings::check_unicodeToQString()
+{
+ QFETCH(Unicode*, data);
+ QFETCH(int, length);
+ QFETCH(QString, result);
+
+ QCOMPARE(Poppler::unicodeToQString(data, length), result);
+
+ delete [] data;
+}
+
+void TestStrings::check_QStringToGooString_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<GooString*>("result");
+
+ QTest::newRow("<null>") << QString()
+ << new GooString("");
+ QTest::newRow("<empty>") << QString::fromUtf8("")
+ << new GooString("");
+ QTest::newRow("a") << QString::fromUtf8("a")
+ << new GooString("a");
+ QTest::newRow("ab") << QString::fromUtf8("ab")
+ << new GooString("ab");
+}
+
+void TestStrings::check_QStringToGooString()
+{
+ QFETCH(QString, string);
+ QFETCH(GooString*, result);
+
+ GooString *goo = Poppler::QStringToGooString(string);
+ QCOMPARE(goo->getCString(), result->getCString());
+
+ delete goo;
+ delete result;
+}
+
+QTEST_MAIN(TestStrings)
+
+#include "check_strings.moc"
More information about the poppler
mailing list