diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2020-01-22 16:13:46 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2020-05-08 09:50:24 +0200 |
commit | 48e5a375369fb56aeaa5b6c523a0f1c0ee962d8f (patch) | |
tree | d0652902ba9459fd53a144b1fed09f34056cc927 /tests/auto/corelib/text/qlocale/tst_qlocale.cpp | |
parent | 1f13a0fbec627ea445cfad4a2863b51e31c1989d (diff) |
Move a test of QLocale's methods out of tst_QDateTime
It clearly belonged in tst_QDate::toDateTime(), for which it adds a
few more test-case and in which it inspires some further testing.
The new testing of case-insensitivity doesn't work if the format
contains stray non-format characters, so added a new data column to
take care of that.
Pick-to: 5.15
Change-Id: I73619be02091c97024a84cb963c7029e9fd0569a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/text/qlocale/tst_qlocale.cpp')
-rw-r--r-- | tests/auto/corelib/text/qlocale/tst_qlocale.cpp | 99 |
1 files changed, 69 insertions, 30 deletions
diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index e1f9d67ec2..570a1db9b3 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -1814,65 +1814,96 @@ void tst_QLocale::toDateTime_data() QTest::addColumn<QDateTime>("result"); QTest::addColumn<QString>("format"); QTest::addColumn<QString>("string"); + QTest::addColumn<bool>("clean"); // No non-format letters in format string QTest::newRow("1C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(5, 14, 0)) - << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14"; + << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14" << true; QTest::newRow("2C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) - << "d/M/yyyyy h" << "1/12/1974y 15"; + << "d/M/yyyyy h" << "1/12/1974y 15" << false; QTest::newRow("4C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1)) - << "d/M/yyyy zzz" << "1/1/1974 001"; + << "d/M/yyyy zzz" << "1/1/1974 001" << true; QTest::newRow("5C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1)) - << "dd/MM/yyy z" << "01/01/74y 001"; - QTest::newRow("5Cbis") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 100)) - << "dd/MM/yyy z" << "01/01/74y 1"; + << "dd/MM/yyy z" << "01/01/74y 001" << false; + QTest::newRow("6C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 100)) + << "dd/MM/yyy z" << "01/01/74y 1" << false; QTest::newRow("8C") << "C" << QDateTime(QDate(1974, 12, 2), QTime(0, 0, 13)) - << "ddddd/MMMMM/yy ss" << "Monday2/December12/74 13"; + << "ddddd/MMMMM/yy ss" << "Monday2/December12/74 13" << true; QTest::newRow("9C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 13)) - << "'dddd'/MMMM/yy s" << "dddd/December/74 13"; + << "'dddd'/MMMM/yy s" << "dddd/December/74 13" << false; QTest::newRow("10C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(0, 4, 0)) - << "d'dd'd/MMMM/yyy m'm'mm" << "1dd1/December/74y 4m04"; + << "d'dd'd/MMMM/yyy m'm'mm" << "1dd1/December/74y 4m04" << false; QTest::newRow("11C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 3)) - << "d'dd'd/MMM'M'/yysss" << "1dd1/DecM/74033"; + << "d'dd'd/MMM'M'/yysss" << "1dd1/DecM/74033" << false; QTest::newRow("12C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) - << "d'd'dd/M/yyh" << "1d01/12/7415"; + << "d'd'dd/M/yyh" << "1d01/12/7415" << false; // Unpadded value for fixed-width field is wrong: - QTest::newRow("bad-day-C") << "C" << QDateTime() << "dd-MMM-yy" << "4-Jun-11"; - QTest::newRow("bad-month-C") << "C" << QDateTime() << "d-MM-yy" << "4-6-11"; - QTest::newRow("bad-year-C") << "C" << QDateTime() << "d-MMM-yyyy" << "4-Jun-11"; - QTest::newRow("bad-hour-C") << "C" << QDateTime() << "d-MMM-yy hh:m" << "4-Jun-11 1:2"; - QTest::newRow("bad-min-C") << "C" << QDateTime() << "d-MMM-yy h:mm" << "4-Jun-11 1:2"; - QTest::newRow("bad-sec-C") << "C" << QDateTime() << "d-MMM-yy h:m:ss" << "4-Jun-11 1:2:3"; + QTest::newRow("bad-day-C") << "C" << QDateTime() << "dd-MMM-yy" << "4-Jun-11" << true; + QTest::newRow("bad-month-C") << "C" << QDateTime() << "d-MM-yy" << "4-6-11" << true; + QTest::newRow("bad-year-C") << "C" << QDateTime() << "d-MMM-yyyy" << "4-Jun-11" << true; + QTest::newRow("bad-hour-C") << "C" << QDateTime() << "d-MMM-yy hh:m" << "4-Jun-11 1:2" << true; + QTest::newRow("bad-min-C") << "C" << QDateTime() << "d-MMM-yy h:mm" << "4-Jun-11 1:2" << true; + QTest::newRow("bad-sec-C") + << "C" << QDateTime() << "d-MMM-yy h:m:ss" << "4-Jun-11 1:2:3" << true; QTest::newRow("bad-milli-C") - << "C" << QDateTime() << "d-MMM-yy h:m:s.zzz" << "4-Jun-11 1:2:3.4"; + << "C" << QDateTime() << "d-MMM-yy h:m:s.zzz" << "4-Jun-11 1:2:3.4" << true; QTest::newRow("ok-C") << "C" << QDateTime(QDate(1911, 6, 4), QTime(1, 2, 3, 400)) - << "d-MMM-yy h:m:s.z" << "4-Jun-11 1:2:3.4"; + << "d-MMM-yy h:m:s.z" << "4-Jun-11 1:2:3.4" << true; QTest::newRow("1no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(5, 14, 0)) - << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14"; + << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14" << true; QTest::newRow("2no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) - << "d/M/yyyyy h" << "1/12/1974y 15"; + << "d/M/yyyyy h" << "1/12/1974y 15" << false; QTest::newRow("4no_NO") << "no_NO" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0)) - << "d/M/yyyy zzz" << "1/1/1974 000"; + << "d/M/yyyy zzz" << "1/1/1974 000" << true; QTest::newRow("5no_NO") << "no_NO" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0)) - << "dd/MM/yyy z" << "01/01/74y 0"; + << "dd/MM/yyy z" << "01/01/74y 0" << false; QTest::newRow("8no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 2), QTime(0, 0, 13)) - << "ddddd/MMMMM/yy ss" << "mandag2/desember12/74 13"; + << "ddddd/MMMMM/yy ss" << "mandag2/desember12/74 13" << true; QTest::newRow("9no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 13)) - << "'dddd'/MMMM/yy s" << "dddd/desember/74 13"; + << "'dddd'/MMMM/yy s" << "dddd/desember/74 13" << false; QTest::newRow("10no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(0, 4, 0)) - << "d'dd'd/MMMM/yyy m'm'mm" << "1dd1/desember/74y 4m04"; + << "d'dd'd/MMMM/yyy m'm'mm" << "1dd1/desember/74y 4m04" << false; QTest::newRow("11no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 3)) - << "d'dd'd/MMM'M'/yysss" << "1dd1/des.M/74033"; + << "d'dd'd/MMM'M'/yysss" << "1dd1/des.M/74033" << false; QTest::newRow("12no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) - << "d'd'dd/M/yyh" << "1d01/12/7415"; + << "d'd'dd/M/yyh" << "1d01/12/7415" << false; QTest::newRow("RFC-1123") << "C" << QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30)) - << "ddd, dd MMM yyyy hh:mm:ss 'GMT'" << "Thu, 01 Nov 2007 18:08:30 GMT"; + << "ddd, dd MMM yyyy hh:mm:ss 'GMT'" << "Thu, 01 Nov 2007 18:08:30 GMT" << false; QTest::newRow("longFormat") << "en_US" << QDateTime(QDate(2009, 1, 5), QTime(11, 48, 32)) - << "dddd, MMMM d, yyyy h:mm:ss AP " << "Monday, January 5, 2009 11:48:32 AM "; + << "dddd, MMMM d, yyyy h:mm:ss AP " << "Monday, January 5, 2009 11:48:32 AM " << true; + + const QDateTime dt(QDate(2017, 02, 25), QTime(17, 21, 25)); + // These formats correspond to the locale formats, with the timezone removed. + // We hardcode them in case an update to the locale DB changes them. + + QTest::newRow("C:long") << "C" << dt << "dddd, d MMMM yyyy HH:mm:ss" + << "Saturday, 25 February 2017 17:21:25" << true; + QTest::newRow("C:short") + << "C" << dt << "d MMM yyyy HH:mm:ss" << "25 Feb 2017 17:21:25" << true; + QTest::newRow("C:narrow") + << "C" << dt << "d MMM yyyy HH:mm:ss" << "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") + << "fr" << dt.addSecs(-25) << "dd/MM/yyyy HH:mm" << "25/02/2017 17:21" << true; + + // In Turkish, the word for Friday ("Cuma") is a prefix for the word for + // Saturday ("Cumartesi") + QTest::newRow("tr:long") + << "tr" << dt << "d MMMM yyyy dddd HH:mm:ss" << "25 Şubat 2017 Cumartesi 17:21:25" << true; + QTest::newRow("tr:long2") << "tr" << dt.addDays(-1) << "d MMMM yyyy dddd HH:mm:ss" + << "24 Şubat 2017 Cuma 17:21:25" << true; + QTest::newRow("tr:mashed") + << "tr" << dt << "d MMMMyyyy ddddHH:mm:ss" << "25 Şubat2017 Cumartesi17:21:25" << true; + QTest::newRow("tr:mashed2") << "tr" << dt.addDays(-1) << "d MMMMyyyy ddddHH:mm:ss" + << "24 Şubat2017 Cuma17:21:25" << true; + QTest::newRow("tr:short") + << "tr" << dt.addSecs(-25) << "d.MM.yyyy HH:mm" << "25.02.2017 17:21" << true; } void tst_QLocale::toDateTime() @@ -1881,11 +1912,19 @@ void tst_QLocale::toDateTime() QFETCH(QDateTime, result); QFETCH(QString, format); QFETCH(QString, string); + QFETCH(bool, clean); QLocale l(localeName); QCOMPARE(l.toDateTime(string, format), result); + if (clean) { + QCOMPARE(l.toDateTime(string.toLower(), format), result); + QCOMPARE(l.toDateTime(string.toUpper(), format), result); + } + if (l.dateTimeFormat(QLocale::LongFormat) == format) QCOMPARE(l.toDateTime(string, QLocale::LongFormat), result); + if (l.dateTimeFormat(QLocale::ShortFormat) == format) + QCOMPARE(l.toDateTime(string, QLocale::ShortFormat), result); } #ifdef Q_OS_MAC |