From b50e81b5b189c98244bdc0d5081a90cd875982d0 Mon Sep 17 00:00:00 2001 From: Andreas Buhr Date: Mon, 21 Sep 2020 14:31:56 +0200 Subject: [PATCH] Add unit test to check emoji handling in date-time parsing Add some unit tests using emojis as separator characters to check utf handling. Change-Id: I03c4bb5cd349e649c58e8a908c38a0185d80e722 Reviewed-by: Mitch Curtis --- .../auto/corelib/text/qlocale/tst_qlocale.cpp | 22 +++++++++++++++++++ tests/auto/corelib/time/qdate/tst_qdate.cpp | 6 +++++ .../corelib/time/qdatetime/tst_qdatetime.cpp | 5 +++++ tests/auto/corelib/time/qtime/tst_qtime.cpp | 6 +++++ 4 files changed, 39 insertions(+) diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index f2e4dc0ea9..7d4cbbbcdd 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -1545,6 +1545,11 @@ void tst_QLocale::formatDate_data() << QDate(1974, 12, 1) << "hh:mm:ss.zzz ap d'd'dd/M/yy" << "hh:mm:ss.zzz ap 1d01/12/74"; QTest::newRow("dd MMMM yyyy") << QDate(1, 1, 1) << "dd MMMM yyyy" << "01 January 0001"; + + // Test unicode handling. + QTest::newRow("unicode in format string") << QDate(1, 1, 1) + << u8"πŸ”΄πŸ˜€πŸŒΌπŸ˜«ddβ˜€πŸ˜₯πŸ€€πŸ‘‰πŸ’ƒMMπŸ’›πŸ™‚πŸ’“πŸ€©yyyy😴" + << u8"πŸ”΄πŸ˜€πŸŒΌπŸ˜«01β˜€πŸ˜₯πŸ€€πŸ‘‰πŸ’ƒ01πŸ’›πŸ™‚πŸ’“πŸ€©0001😴"; } void tst_QLocale::formatDate() @@ -1601,6 +1606,10 @@ void tst_QLocale::formatTime_data() QTest::newRow("33") << QTime(1, 2, 3, 4) << "H:m:s.zzz" << "1:2:3.004"; QTest::newRow("34") << QTime() << "H:m:s.zzz" << ""; QTest::newRow("35") << QTime(1, 2, 3, 4) << "dd MM yyyy H:m:s.zzz" << "dd MM yyyy 1:2:3.004"; + + // Test unicode handling. + QTest::newRow("emoji in format string") + << QTime(17, 22, 05, 18) << u8"mπŸ“ŒssπŸ“’H.zzz" << u8"22πŸ“Œ05πŸ“’17.018"; } void tst_QLocale::formatTime() @@ -1762,6 +1771,11 @@ void tst_QLocale::formatDateTime_data() << QString("MMM") << QString("Dec"); QTest::newRow("empty") << "en_US" << testZeroHour << QString("") << QString(""); + + // Test unicode handling. + QTest::newRow("emoji in format string") + << "en_US" << QDateTime(QDate(1980, 2, 1), QTime(17, 12)) + << QString(u8"πŸ’–yyyyπŸ’–MMπŸ’–dd hhπŸ’–mm") << u8"πŸ’–1980πŸ’–02πŸ’–01 17πŸ’–12"; } void tst_QLocale::formatDateTime() @@ -1905,6 +1919,14 @@ void tst_QLocale::toDateTime_data() QTest::newRow("C:narrow") << "C" << dt << "d MMM yyyy HH:mm:ss" << "25 Feb 2017 17:21:25" << true; + // Test the same again with unicode and emoji. + QTest::newRow("C:long with emoji") << "C" << dt << u8"dddd, dπŸ’ͺMMMM yyyy HH:mm:ss" + << u8"Saturday, 25πŸ’ͺFebruary 2017 17:21:25" << true; + QTest::newRow("C:short with emoji") + << "C" << dt << u8"d MMM yyyy HHπŸ“žmmπŸ“žss" << u8"25 Feb 2017 17πŸ“ž21πŸ“ž25" << true; + QTest::newRow("C:narrow with emoji") + << "C" << dt << u8"πŸ‡¬πŸ‡§d MMM yyyy HH:mm:ssπŸ‡¬πŸ‡§" << u8"πŸ‡¬πŸ‡§25 Feb 2017 17:21:25πŸ‡¬πŸ‡§" << true; + QTest::newRow("fr:long") << "fr" << dt << "dddd d MMMM yyyy HH:mm:ss" << "Samedi 25 fΓ©vrier 2017 17:21:25" << true; QTest::newRow("fr:short") diff --git a/tests/auto/corelib/time/qdate/tst_qdate.cpp b/tests/auto/corelib/time/qdate/tst_qdate.cpp index 30917c8cfd..c133ed3c76 100644 --- a/tests/auto/corelib/time/qdate/tst_qdate.cpp +++ b/tests/auto/corelib/time/qdate/tst_qdate.cpp @@ -1289,6 +1289,12 @@ void tst_QDate::fromStringFormat_data() QTest::newRow("data43") << QString("060521") << QString("yyMMdd") << QDate(1906,5,21); QTest::newRow("lateMarch") << QString("9999-03-06") << QString("yyyy-MM-dd") << QDate(9999, 3, 6); QTest::newRow("late") << QString("9999-12-31") << QString("yyyy-MM-dd") << QDate(9999, 12, 31); + + // Test unicode handling. + QTest::newRow("Unicode in format string") + << QString(u8"2020🀣09🀣21") << QString(u8"yyyy🀣MM🀣dd") << QDate(2020, 9, 21); + QTest::newRow("Unicode in quoted format string") + << QString(u8"🀣🀣2020πŸ‘09🀣21") << QString(u8"'🀣🀣'yyyyπŸ‘MM🀣dd") << QDate(2020, 9, 21); } diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index c6ec869460..b942316c95 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -2673,6 +2673,11 @@ void tst_QDateTime::fromStringStringFormat_data() << QStringLiteral("2018 wilful long working block relief 12-19T21:09 cruel") << QStringLiteral("yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux") << QDateTime(); + + // test unicode + QTest::newRow("unicode handling") << QString(u8"2005🀣06🀣28T07🀣57🀣30.001Z") + << QString(u8"yyyy🀣MM🀣ddThh🀣mm🀣ss.zt") + << QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 1), Qt::UTC); } void tst_QDateTime::fromStringStringFormat() diff --git a/tests/auto/corelib/time/qtime/tst_qtime.cpp b/tests/auto/corelib/time/qtime/tst_qtime.cpp index eaa90971f2..c06e7c37a4 100644 --- a/tests/auto/corelib/time/qtime/tst_qtime.cpp +++ b/tests/auto/corelib/time/qtime/tst_qtime.cpp @@ -558,6 +558,12 @@ void tst_QTime::fromStringFormat_data() QTest::newRow("short-msecs-lt100") << QString("10:12:34:045") << QString("hh:m:ss:z") << QTime(10,12,34,45); QTest::newRow("short-msecs-gt100") << QString("10:12:34:45") << QString("hh:m:ss:z") << QTime(10,12,34,450); QTest::newRow("late") << QString("23:59:59.999") << QString("hh:mm:ss.z") << QTime(23, 59, 59, 999); + + // Test unicode handling. + QTest::newRow("emoji in format string 1") + << QString("12πŸ‘31:25.05") << QString("hhπŸ‘mm:ss.z") << QTime(12, 31, 25, 50); + QTest::newRow("emoji in format string 2") + << QString("πŸ’–12πŸ‘31🌈25😺05πŸš€") << QString("πŸ’–hhπŸ‘mm🌈ss😺zπŸš€") << QTime(12, 31, 25, 50); } void tst_QTime::fromStringFormat()