summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2011-10-18 19:12:18 +0200
committerQt by Nokia <qt-info@nokia.com>2011-12-25 21:58:57 +0100
commitebe43992f922c49091eaaf9e0300b807775f34e9 (patch)
tree714a0d1c4c05f816b94c1a92f7108af9e668b9c2 /tests/auto/corelib
parent1ddecb0aa20c660ab086cbd0b87c8384ed6f444d (diff)
add tests and benchmarks for QString::toLower()/toUpper()/toCaseFolded()
Merge-request: 70 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Change-Id: I3929d4d8963c3cef6d2c6420d8ad1f7a45f7e042 Reviewed-by: Olivier Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp92
1 files changed, 87 insertions, 5 deletions
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 80e9984690..0c0d756e48 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -121,8 +121,9 @@ private slots:
void simplified_data();
void simplified();
void trimmed();
- void toLower();
void toUpper();
+ void toLower();
+ void toCaseFolded();
void rightJustified();
void leftJustified();
void mid();
@@ -1565,14 +1566,28 @@ void tst_QString::toUpper()
QCOMPARE( QString(1, QChar(0xdf)).toUpper(), QString("SS"));
- QString lower;
+ QString lower, upper;
lower += QChar(QChar::highSurrogate(0x10428));
lower += QChar(QChar::lowSurrogate(0x10428));
- QString upper;
upper += QChar(QChar::highSurrogate(0x10400));
upper += QChar(QChar::lowSurrogate(0x10400));
QCOMPARE( lower.toUpper(), upper);
+ lower += lower;
+ upper += upper;
+ QCOMPARE( lower.toUpper(), upper);
+ // test for broken surrogate pair handling (low low hi low hi low)
+ lower.prepend(QChar(QChar::lowSurrogate(0x10428)));
+ lower.prepend(QChar(QChar::lowSurrogate(0x10428)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10428)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10428)));
+ QCOMPARE(lower.toUpper(), upper);
+ // test for broken surrogate pair handling (low low hi low hi low hi hi)
+ lower += QChar(QChar::highSurrogate(0x10428));
+ lower += QChar(QChar::highSurrogate(0x10428));
+ upper += QChar(QChar::highSurrogate(0x10428));
+ upper += QChar(QChar::highSurrogate(0x10428));
+ QCOMPARE(lower.toUpper(), upper);
#ifdef QT_USE_ICU
// test doesn't work with ICU support, since QChar is unaware of any locale
@@ -1610,13 +1625,28 @@ void tst_QString::toLower()
QCOMPARE( QString(1, QChar(0x130)).toLower(), QString(QString(1, QChar(0x69)) + QChar(0x307)));
- QString lower;
+ QString lower, upper;
lower += QChar(QChar::highSurrogate(0x10428));
lower += QChar(QChar::lowSurrogate(0x10428));
- QString upper;
upper += QChar(QChar::highSurrogate(0x10400));
upper += QChar(QChar::lowSurrogate(0x10400));
QCOMPARE( upper.toLower(), lower);
+ lower += lower;
+ upper += upper;
+ QCOMPARE( upper.toLower(), lower);
+
+ // test for broken surrogate pair handling (low low hi low hi low)
+ lower.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ lower.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ QCOMPARE( upper.toLower(), lower);
+ // test for broken surrogate pair handling (low low hi low hi low hi hi)
+ lower += QChar(QChar::highSurrogate(0x10400));
+ lower += QChar(QChar::highSurrogate(0x10400));
+ upper += QChar(QChar::highSurrogate(0x10400));
+ upper += QChar(QChar::highSurrogate(0x10400));
+ QCOMPARE( upper.toLower(), lower);
#ifdef QT_USE_ICU
// test doesn't work with ICU support, since QChar is unaware of any locale
@@ -1633,6 +1663,58 @@ void tst_QString::toLower()
#endif
}
+void tst_QString::toCaseFolded()
+{
+ QCOMPARE( QString().toCaseFolded(), QString() );
+ QCOMPARE( QString("").toCaseFolded(), QString("") );
+ QCOMPARE( QString("text").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("Text").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("tExt").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("teXt").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("texT").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("TExt").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("teXT").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("tEXt").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("tExT").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("TEXT").toCaseFolded(), QString("text") );
+ QCOMPARE( QString("@ABYZ[").toCaseFolded(), QString("@abyz["));
+ QCOMPARE( QString("@abyz[").toCaseFolded(), QString("@abyz["));
+ QCOMPARE( QString("`ABYZ{").toCaseFolded(), QString("`abyz{"));
+ QCOMPARE( QString("`abyz{").toCaseFolded(), QString("`abyz{"));
+
+ QString lower, upper;
+ upper += QChar(QChar::highSurrogate(0x10400));
+ upper += QChar(QChar::lowSurrogate(0x10400));
+ lower += QChar(QChar::highSurrogate(0x10428));
+ lower += QChar(QChar::lowSurrogate(0x10428));
+ QCOMPARE( upper.toCaseFolded(), lower);
+ lower += lower;
+ upper += upper;
+ QCOMPARE( upper.toCaseFolded(), lower);
+
+ // test for broken surrogate pair handling (low low hi low hi low)
+ lower.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ lower.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ upper.prepend(QChar(QChar::lowSurrogate(0x10400)));
+ QCOMPARE(upper.toCaseFolded(), lower);
+ // test for broken surrogate pair handling (low low hi low hi low hi hi)
+ lower += QChar(QChar::highSurrogate(0x10400));
+ lower += QChar(QChar::highSurrogate(0x10400));
+ upper += QChar(QChar::highSurrogate(0x10400));
+ upper += QChar(QChar::highSurrogate(0x10400));
+ QCOMPARE(upper.toCaseFolded(), lower);
+
+ //### we currently don't support full case foldings
+ for (int i = 0; i < 65536; ++i) {
+ QString str(1, QChar(i));
+ QString lower = str.toCaseFolded();
+ QVERIFY(lower.length() >= 1);
+ if (lower.length() == 1)
+ QVERIFY(str.toCaseFolded() == QString(1, QChar(i).toCaseFolded()));
+ }
+}
+
void tst_QString::trimmed()
{
QString a;