summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp92
-rw-r--r--tests/benchmarks/corelib/tools/qstring/main.cpp92
2 files changed, 178 insertions, 6 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;
diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp
index 640bd7a625..1b9d366ef3 100644
--- a/tests/benchmarks/corelib/tools/qstring/main.cpp
+++ b/tests/benchmarks/corelib/tools/qstring/main.cpp
@@ -75,6 +75,13 @@ private slots:
void fromLatin1Alternatives() const;
void fromUtf8Alternatives_data() const;
void fromUtf8Alternatives() const;
+
+ void toUpper_data();
+ void toUpper();
+ void toLower_data();
+ void toLower();
+ void toCaseFolded_data();
+ void toCaseFolded();
};
void tst_QString::equals() const
@@ -2601,6 +2608,89 @@ void tst_QString::fromUtf8Alternatives() const
}
}
-QTEST_MAIN(tst_QString)
+void tst_QString::toUpper_data()
+{
+ QTest::addColumn<QString>("s");
+
+ QString lowerLatin1(300, QChar('a'));
+ QString upperLatin1(300, QChar('A'));
+
+ QString lowerDeseret;
+ {
+ QString pattern;
+ pattern += QChar(QChar::highSurrogate(0x10428));
+ pattern += QChar(QChar::lowSurrogate(0x10428));
+ for (int i = 0; i < 300 / pattern.size(); ++i)
+ lowerDeseret += pattern;
+ }
+ QString upperDeseret;
+ {
+ QString pattern;
+ pattern += QChar(QChar::highSurrogate(0x10400));
+ pattern += QChar(QChar::lowSurrogate(0x10400));
+ for (int i = 0; i < 300 / pattern.size(); ++i)
+ upperDeseret += pattern;
+ }
+
+ QString lowerLigature(600, QChar(0xFB03));
+
+ QTest::newRow("600<a>") << (lowerLatin1 + lowerLatin1);
+ QTest::newRow("600<A>") << (upperLatin1 + upperLatin1);
+
+ QTest::newRow("300<a>+300<A>") << (lowerLatin1 + upperLatin1);
+ QTest::newRow("300<A>+300<a>") << (upperLatin1 + lowerLatin1);
+
+ QTest::newRow("300<10428>") << (lowerDeseret + lowerDeseret);
+ QTest::newRow("300<10400>") << (upperDeseret + upperDeseret);
+
+ QTest::newRow("150<10428>+150<10400>") << (lowerDeseret + upperDeseret);
+ QTest::newRow("150<10400>+150<10428>") << (upperDeseret + lowerDeseret);
+
+ QTest::newRow("300a+150<10400>") << (lowerLatin1 + upperDeseret);
+ QTest::newRow("300a+150<10428>") << (lowerLatin1 + lowerDeseret);
+ QTest::newRow("300A+150<10400>") << (upperLatin1 + upperDeseret);
+ QTest::newRow("300A+150<10428>") << (upperLatin1 + lowerDeseret);
+
+ QTest::newRow("600<FB03> (ligature)") << lowerLigature;
+}
+
+void tst_QString::toUpper()
+{
+ QFETCH(QString, s);
+
+ QBENCHMARK {
+ s.toUpper();
+ }
+}
+
+void tst_QString::toLower_data()
+{
+ toUpper_data();
+}
+
+void tst_QString::toLower()
+{
+ QFETCH(QString, s);
+
+ QBENCHMARK {
+ s.toLower();
+ }
+}
+
+void tst_QString::toCaseFolded_data()
+{
+ toUpper_data();
+}
+
+void tst_QString::toCaseFolded()
+{
+ QFETCH(QString, s);
+
+ QBENCHMARK {
+ s.toCaseFolded();
+ }
+}
+
+QTEST_APPLESS_MAIN(tst_QString)
#include "main.moc"