diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-10-14 17:46:16 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-10-14 17:46:34 +0200 |
commit | 440286655e0ca271506cf7cc02ad0dbf4baef9ca (patch) | |
tree | 896fa81adb8b14a69355a3a6cf64d06ec8173c9a /tests/auto/corelib/time | |
parent | 1e27ad1697187549151657ba187928e439300db7 (diff) | |
parent | e164d61ca8263fc4b46fdd916e1ea77c7dd2b735 (diff) |
Merge remote-tracking branch 'origin/dev' into wip/cmake
Change-Id: I4a78428a8ea273b6960792e3b8043f816fa37fcf
Diffstat (limited to 'tests/auto/corelib/time')
-rw-r--r-- | tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp | 4 | ||||
-rw-r--r-- | tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp | 56 | ||||
-rw-r--r-- | tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp | 169 |
3 files changed, 172 insertions, 57 deletions
diff --git a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp index 5cfdb6daf4..9b41014394 100644 --- a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp +++ b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp @@ -55,13 +55,13 @@ void tst_QCalendar::checkYear(const QCalendar &cal, int year, bool normal) QVERIFY(moons > 0); QVERIFY(!cal.isDateValid(year, moons + 1, 1)); QVERIFY(!cal.isDateValid(year, 0, 1)); - QVERIFY(moons <= cal.maxMonthsInYear()); + QVERIFY(moons <= cal.maximumMonthsInYear()); const int days = cal.daysInYear(year); QVERIFY(days > 0); int sum = 0; - const int longest = cal.maxDaysInMonth(); + const int longest = cal.maximumDaysInMonth(); for (int i = moons; i > 0; i--) { const int last = cal.daysInMonth(i, year); sum += last; diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index ac1b903aa1..216ae1f79e 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -360,6 +360,7 @@ void tst_QDateTime::ctor() void tst_QDateTime::operator_eq() { + QVERIFY(QDateTime() != QDateTime(QDate(1970, 1, 1), QTime(0, 0))); // QTBUG-79006 QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC); QDateTime dt2(QDate(2005, 3, 11), QTime(), Qt::UTC); dt2 = dt1; @@ -1675,29 +1676,30 @@ void tst_QDateTime::currentDateTimeUtc2() void tst_QDateTime::toSecsSinceEpoch_data() { QTest::addColumn<QString>("dateTimeStr"); - QTest::addColumn<bool>("res"); + QTest::addColumn<bool>("valid"); - QTest::newRow( "data1" ) << str( 1800, 1, 1, 12, 0, 0 ) << false; - QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << false; + QTest::newRow( "data1" ) << str( 1800, 1, 1, 12, 0, 0 ) << true; + QTest::newRow( "data2" ) << str( 1969, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data3" ) << str( 2002, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data4" ) << str( 2002, 6, 1, 12, 0, 0 ) << true; QTest::newRow( "data5" ) << QString("INVALID") << false; QTest::newRow( "data6" ) << str( 2038, 1, 1, 12, 0, 0 ) << true; QTest::newRow( "data7" ) << str( 2063, 4, 5, 12, 0, 0 ) << true; // the day of First Contact - QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) - << bool( sizeof(uint) > 32 && sizeof(time_t) > 32 ); + QTest::newRow( "data8" ) << str( 2107, 1, 1, 12, 0, 0 ) << true; } void tst_QDateTime::toSecsSinceEpoch() { - QFETCH( QString, dateTimeStr ); - QDateTime datetime = dt( dateTimeStr ); + QFETCH(const QString, dateTimeStr); + const QDateTime datetime = dt(dateTimeStr); + QFETCH(const bool, valid); + QCOMPARE(datetime.isValid(), valid); - qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch(); - QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000); - - QDateTime datetime2 = QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch); - QCOMPARE(datetime, datetime2); + if (valid) { + const qint64 asSecsSinceEpoch = datetime.toSecsSinceEpoch(); + QCOMPARE(asSecsSinceEpoch, datetime.toMSecsSinceEpoch() / 1000); + QCOMPARE(QDateTime::fromSecsSinceEpoch(asSecsSinceEpoch), datetime); + } } #if QT_DEPRECATED_SINCE(5, 8) @@ -1725,14 +1727,10 @@ void tst_QDateTime::toTime_t() uint asTime_t = datetime.toTime_t(); QFETCH( bool, res ); if (res) { - QVERIFY( asTime_t != (uint)-1 ); + QVERIFY(asTime_t != uint(-1)); + QCOMPARE(QDateTime::fromTime_t(asTime_t), datetime); } else { - QVERIFY( asTime_t == (uint)-1 ); - } - - if ( asTime_t != (uint) -1 ) { - QDateTime datetime2 = QDateTime::fromTime_t( asTime_t ); - QCOMPARE(datetime, datetime2); + QCOMPARE(asTime_t, uint(-1)); } } #endif @@ -1929,8 +1927,8 @@ void tst_QDateTime::operator_eqeq_data() QDateTime dateTime1(QDate(2012, 6, 20), QTime(14, 33, 2, 500)); QDateTime dateTime1a = dateTime1.addMSecs(1); - QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); - QDateTime dateTime2a = dateTime2.addMSecs(-1); + QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); // Invalid + QDateTime dateTime2a = dateTime2.addMSecs(-1); // Still invalid QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0, 0, 0), Qt::UTC); // UTC epoch QDateTime dateTime3a = dateTime3.addDays(1); QDateTime dateTime3b = dateTime3.addDays(-1); @@ -1946,7 +1944,7 @@ void tst_QDateTime::operator_eqeq_data() QTest::newRow("data2") << dateTime1a << dateTime1a << true << false; QTest::newRow("data3") << dateTime1 << dateTime2 << false << false; QTest::newRow("data4") << dateTime1 << dateTime1a << false << false; - QTest::newRow("data5") << dateTime2 << dateTime2a << false << false; + QTest::newRow("data5") << dateTime2 << dateTime2a << true << false; QTest::newRow("data6") << dateTime2 << dateTime3 << false << false; QTest::newRow("data7") << dateTime3 << dateTime3a << false << false; QTest::newRow("data8") << dateTime3 << dateTime3b << false << false; @@ -3352,6 +3350,14 @@ void tst_QDateTime::timeZones() const QCOMPARE(dt3.timeSpec(), dt1.timeSpec()); QCOMPARE(dt3.timeZone(), dt1.timeZone()); + // The start of year 1 should be *describable* in any zone (QTBUG-78051) + dt3 = QDateTime(QDate(1, 1, 1), QTime(0, 0, 0), ausTz); + QVERIFY(dt3.isValid()); + // Likewise the end of year -1 (a.k.a. 1 BCE). + dt3 = dt3.addMSecs(-1); + QVERIFY(dt3.isValid()); + QCOMPARE(dt3, QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59, 999), ausTz)); + // Check datastream serialises the time zone QByteArray tmp; { @@ -3460,6 +3466,9 @@ void tst_QDateTime::timeZones() const void tst_QDateTime::systemTimeZoneChange() const { +#ifdef Q_OS_WINRT + QSKIP("UWP applications cannot change the system`s time zone (sandboxing)"); +#endif // Set the timezone to Brisbane time TimeZoneRollback useZone(QByteArray("AEST-10:00")); @@ -3477,9 +3486,6 @@ void tst_QDateTime::systemTimeZoneChange() const useZone.reset(QByteArray("IST-05:30")); QCOMPARE(localDate, QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::LocalTime)); -#ifdef Q_OS_WINRT - QEXPECT_FAIL("", "WinRT gets this wrong, QTBUG-71185", Continue); -#endif QVERIFY(localMsecs != localDate.toMSecsSinceEpoch()); QCOMPARE(utcDate, QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::UTC)); QCOMPARE(utcDate.toMSecsSinceEpoch(), utcMsecs); diff --git a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp index 9904719f7c..5b1bde8ea3 100644 --- a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp +++ b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -49,6 +49,8 @@ private slots: void dataStreamTest(); void isTimeZoneIdAvailable(); void availableTimeZoneIds(); + void utcOffsetId_data(); + void utcOffsetId(); void specificTransition_data(); void specificTransition(); void transitionEachZone_data(); @@ -375,33 +377,121 @@ void tst_QTimeZone::dataStreamTest() void tst_QTimeZone::isTimeZoneIdAvailable() { QList<QByteArray> available = QTimeZone::availableTimeZoneIds(); - foreach (const QByteArray &id, available) + foreach (const QByteArray &id, available) { QVERIFY(QTimeZone::isTimeZoneIdAvailable(id)); + QVERIFY(QTimeZone(id).isValid()); + } +} -#ifdef QT_BUILD_INTERNAL - // a-z, A-Z, 0-9, '.', '-', '_' are valid chars - // Can't start with '-' - // Parts separated by '/', each part min 1 and max of 14 chars - QCOMPARE(QTimeZonePrivate::isValidId("az"), true); - QCOMPARE(QTimeZonePrivate::isValidId("AZ"), true); - QCOMPARE(QTimeZonePrivate::isValidId("09"), true); - QCOMPARE(QTimeZonePrivate::isValidId("a/z"), true); - QCOMPARE(QTimeZonePrivate::isValidId("a.z"), true); - QCOMPARE(QTimeZonePrivate::isValidId("a-z"), true); - QCOMPARE(QTimeZonePrivate::isValidId("a_z"), true); - QCOMPARE(QTimeZonePrivate::isValidId(".z"), true); - QCOMPARE(QTimeZonePrivate::isValidId("_z"), true); - QCOMPARE(QTimeZonePrivate::isValidId("12345678901234"), true); - QCOMPARE(QTimeZonePrivate::isValidId("12345678901234/12345678901234"), true); - QCOMPARE(QTimeZonePrivate::isValidId("a z"), false); - QCOMPARE(QTimeZonePrivate::isValidId("a\\z"), false); - QCOMPARE(QTimeZonePrivate::isValidId("a,z"), false); - QCOMPARE(QTimeZonePrivate::isValidId("/z"), false); - QCOMPARE(QTimeZonePrivate::isValidId("-z"), false); - QCOMPARE(QTimeZonePrivate::isValidId("123456789012345"), false); - QCOMPARE(QTimeZonePrivate::isValidId("123456789012345/12345678901234"), false); - QCOMPARE(QTimeZonePrivate::isValidId("12345678901234/123456789012345"), false); -#endif // QT_BUILD_INTERNAL +void tst_QTimeZone::utcOffsetId_data() +{ + QTest::addColumn<QByteArray>("id"); + QTest::addColumn<bool>("valid"); + QTest::addColumn<int>("offset"); // ignored unless valid + + // Some of these are actual CLDR zone IDs, some are known Windows IDs; the + // rest rely on parsing the offset. Since CLDR and Windows may add to their + // known IDs, which fall in which category may vary. Only the CLDR and + // Windows ones are known to isTimeZoneAvailable() or listed in + // availableTimeZoneIds(). +#define ROW(name, valid, offset) \ + QTest::newRow(name) << QByteArray(name) << valid << offset + + // See qtbase/util/locale_database/cldr2qtimezone.py for source + // CLDR v35.1 IDs: + ROW("UTC", true, 0); + ROW("UTC-14:00", true, -50400); + ROW("UTC-13:00", true, -46800); + ROW("UTC-12:00", true, -43200); + ROW("UTC-11:00", true, -39600); + ROW("UTC-10:00", true, -36000); + ROW("UTC-09:00", true, -32400); + ROW("UTC-08:00", true, -28800); + ROW("UTC-07:00", true, -25200); + ROW("UTC-06:00", true, -21600); + ROW("UTC-05:00", true, -18000); + ROW("UTC-04:30", true, -16200); + ROW("UTC-04:00", true, -14400); + ROW("UTC-03:30", true, -12600); + ROW("UTC-03:00", true, -10800); + ROW("UTC-02:00", true, -7200); + ROW("UTC-01:00", true, -3600); + ROW("UTC-00:00", true, 0); + ROW("UTC+00:00", true, 0); + ROW("UTC+01:00", true, 3600); + ROW("UTC+02:00", true, 7200); + ROW("UTC+03:00", true, 10800); + ROW("UTC+03:30", true, 12600); + ROW("UTC+04:00", true, 14400); + ROW("UTC+04:30", true, 16200); + ROW("UTC+05:00", true, 18000); + ROW("UTC+05:30", true, 19800); + ROW("UTC+05:45", true, 20700); + ROW("UTC+06:00", true, 21600); + ROW("UTC+06:30", true, 23400); + ROW("UTC+07:00", true, 25200); + ROW("UTC+08:00", true, 28800); + ROW("UTC+08:30", true, 30600); + ROW("UTC+09:00", true, 32400); + ROW("UTC+09:30", true, 34200); + ROW("UTC+10:00", true, 36000); + ROW("UTC+11:00", true, 39600); + ROW("UTC+12:00", true, 43200); + ROW("UTC+13:00", true, 46800); + ROW("UTC+14:00", true, 50400); + // Windows IDs known to CLDR v35.1: + ROW("UTC-11", true, -39600); + ROW("UTC-09", true, -32400); + ROW("UTC-08", true, -28800); + ROW("UTC-02", true, -7200); + ROW("UTC+12", true, 43200); + ROW("UTC+13", true, 46800); + // Encountered in bug reports: + ROW("UTC+10", true, 36000); // QTBUG-77738 + + // Bounds: + ROW("UTC+23", true, 82800); + ROW("UTC-23", true, -82800); + ROW("UTC+23:59", true, 86340); + ROW("UTC-23:59", true, -86340); + ROW("UTC+23:59:59", true, 86399); + ROW("UTC-23:59:59", true, -86399); + + // Out of range + ROW("UTC+24:0:0", false, 0); + ROW("UTC-24:0:0", false, 0); + ROW("UTC+0:60:0", false, 0); + ROW("UTC-0:60:0", false, 0); + ROW("UTC+0:0:60", false, 0); + ROW("UTC-0:0:60", false, 0); + + // Malformed + ROW("UTC+", false, 0); + ROW("UTC-", false, 0); + ROW("UTC10", false, 0); + ROW("UTC:10", false, 0); + ROW("UTC+cabbage", false, 0); + ROW("UTC+10:rice", false, 0); + ROW("UTC+9:3:oat", false, 0); + ROW("UTC+9+3", false, 0); + ROW("UTC+9-3", false, 0); + ROW("UTC+9:3-4", false, 0); + ROW("UTC+9:3:4:more", false, 0); + ROW("UTC+9:3:4:5", false, 0); +} + +void tst_QTimeZone::utcOffsetId() +{ + QFETCH(QByteArray, id); + QFETCH(bool, valid); + QTimeZone zone(id); + QCOMPARE(zone.isValid(), valid); + if (valid) { + QDateTime epoch(QDate(1970, 1, 1), QTime(0, 0, 0), Qt::UTC); + QFETCH(int, offset); + QCOMPARE(zone.offsetFromUtc(epoch), offset); + QVERIFY(!zone.hasDaylightTime()); + } } void tst_QTimeZone::specificTransition_data() @@ -733,10 +823,16 @@ void tst_QTimeZone::isValidId_data() QTest::newRow(name " middle") << QByteArray("xyz/" section "/xyz") << valid; \ QTest::newRow(name " back") << QByteArray("xyz/xyz/" section) << valid + // a-z, A-Z, 0-9, '.', '-', '_' are valid chars + // Can't start with '-' + // Parts separated by '/', each part min 1 and max of 14 chars TESTSET("empty", "", false); TESTSET("minimal", "m", true); TESTSET("maximal", "12345678901234", true); + TESTSET("maximal twice", "12345678901234/12345678901234", true); TESTSET("too long", "123456789012345", false); + TESTSET("too-long/maximal", "123456789012345/12345678901234", false); + TESTSET("maximal/too-long", "12345678901234/123456789012345", false); TESTSET("bad hyphen", "-hyphen", false); TESTSET("good hyphen", "hy-phen", true); @@ -752,6 +848,22 @@ void tst_QTimeZone::isValidId_data() TESTSET("valid char 0", "0", true); TESTSET("valid char 9", "9", true); + TESTSET("valid pair az", "az", true); + TESTSET("valid pair AZ", "AZ", true); + TESTSET("valid pair 09", "09", true); + TESTSET("valid pair .z", ".z", true); + TESTSET("valid pair _z", "_z", true); + TESTSET("invalid pair -z", "-z", false); + + TESTSET("valid triple a/z", "a/z", true); + TESTSET("valid triple a.z", "a.z", true); + TESTSET("valid triple a-z", "a-z", true); + TESTSET("valid triple a_z", "a_z", true); + TESTSET("invalid triple a z", "a z", false); + TESTSET("invalid triple a\\z", "a\\z", false); + TESTSET("invalid triple a,z", "a,z", false); + + TESTSET("invalid space", " ", false); TESTSET("invalid char ^", "^", false); TESTSET("invalid char \"", "\"", false); TESTSET("invalid char $", "$", false); @@ -760,6 +872,7 @@ void tst_QTimeZone::isValidId_data() TESTSET("invalid char (", "(", false); TESTSET("invalid char )", ")", false); TESTSET("invalid char =", "=", false); + TESTSET("invalid char -", "-", false); TESTSET("invalid char ?", "?", false); TESTSET("invalid char ß", "ß", false); TESTSET("invalid char \\x01", "\x01", false); @@ -824,10 +937,6 @@ void tst_QTimeZone::utcTest() QCOMPARE(tz.standardTimeOffset(now), 36000); QCOMPARE(tz.daylightTimeOffset(now), 0); - // Test invalid UTC ID, must be in available list - tz = QTimeZone("UTC+00:01"); - QCOMPARE(tz.isValid(), false); - // Test create custom zone tz = QTimeZone("QST", 123456, "Qt Standard Time", "QST", QLocale::Norway, "Qt Testing"); QCOMPARE(tz.isValid(), true); |