summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp')
-rw-r--r--tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp89
1 files changed, 58 insertions, 31 deletions
diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
index 2a8c47a51f..d3afee96cd 100644
--- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -152,6 +152,7 @@ private slots:
void isDaylightTime() const;
void daylightTransitions() const;
void timeZones() const;
+ void systemTimeZoneChange_data() const;
void systemTimeZoneChange() const;
void invalid_data() const;
@@ -825,7 +826,7 @@ void tst_QDateTime::toString_isoDate_data()
QTest::newRow("negative non-integral OffsetFromUTC")
<< dt << Qt::ISODate
<< QString("1978-11-09T13:28:34-00:15");
- QTest::newRow("invalid")
+ QTest::newRow("invalid") // ISODate < 2019 doesn't allow -ve year numbers; QTBUG-91070
<< QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), Qt::UTC)
<< Qt::ISODate << QString();
QTest::newRow("without-ms")
@@ -838,30 +839,31 @@ void tst_QDateTime::toString_isoDate_data()
void tst_QDateTime::toString_isoDate()
{
- QFETCH(QDateTime, datetime);
- QFETCH(Qt::DateFormat, format);
- QFETCH(QString, expected);
+ QFETCH(const QDateTime, datetime);
+ QFETCH(const Qt::DateFormat, format);
+ QFETCH(const QString, expected);
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QLocale oldLocale;
QLocale::setDefault(QLocale("en_US"));
#endif // ### Qt 6: remove
- QString result = datetime.toString(format);
+ const QString result = datetime.toString(format);
QCOMPARE(result, expected);
- QDateTime resultDatetime = QDateTime::fromString(result, format);
- // If expecting invalid result the datetime may still be valid, i.e. year < 0 or > 9999
- if (!expected.isEmpty()) {
- QEXPECT_FAIL("without-ms", "Qt::ISODate truncates milliseconds (QTBUG-56552)", Abort);
-
- QCOMPARE(resultDatetime, datetime);
- QCOMPARE(resultDatetime.date(), datetime.date());
- QCOMPARE(resultDatetime.time(), datetime.time());
- QCOMPARE(resultDatetime.timeSpec(), datetime.timeSpec());
- QCOMPARE(resultDatetime.offsetFromUtc(), datetime.offsetFromUtc());
- } else {
+ const QDateTime resultDatetime = QDateTime::fromString(result, format);
+ if (QByteArray(QTest::currentDataTag()) == "invalid") {
QCOMPARE(resultDatetime, QDateTime());
+ } else {
+ const QDateTime when =
+ QByteArray(QTest::currentDataTag()) == "without-ms"
+ ? datetime.addMSecs(-datetime.time().msec()) : datetime;
+ QCOMPARE(resultDatetime.toMSecsSinceEpoch(), when.toMSecsSinceEpoch());
+ QCOMPARE(resultDatetime, when);
+ QCOMPARE(resultDatetime.date(), when.date());
+ QCOMPARE(resultDatetime.time(), when.time());
+ QCOMPARE(resultDatetime.timeSpec(), when.timeSpec());
+ QCOMPARE(resultDatetime.offsetFromUtc(), when.offsetFromUtc());
}
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@@ -3721,38 +3723,63 @@ void tst_QDateTime::timeZones() const
#endif
}
-void tst_QDateTime::systemTimeZoneChange() const
+void tst_QDateTime::systemTimeZoneChange_data() 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"));
+ QTest::addColumn<QDate>("date");
+ QTest::newRow("short") << QDate(1970, 1, 1);
+ QTest::newRow("2012") << QDate(2012, 6, 1); // short on 64-bit, pimpled on 32-bit
+ QTest::newRow("pimpled") << QDate(1150000, 6, 1);
+}
+
+void tst_QDateTime::systemTimeZoneChange() const
+{
+ QFETCH(const QDate, date);
+ const QTime early(2, 15, 30);
- QDateTime localDate = QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::LocalTime);
- QDateTime utcDate = QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::UTC);
+ // Start out in Brisbane time:
+ TimeZoneRollback useZone(QByteArray("AEST-10:00"));
+ if (QDateTime(date, early, Qt::LocalTime).offsetFromUtc() != 600 * 60)
+ QSKIP("Test depends on system support for changing zone to AEST-10:00");
#if QT_CONFIG(timezone)
- QDateTime tzDate = QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), QTimeZone("Australia/Brisbane"));
+ QVERIFY(QTimeZone::systemTimeZone().isValid());
#endif
- qint64 localMsecs = localDate.toMSecsSinceEpoch();
- qint64 utcMsecs = utcDate.toMSecsSinceEpoch();
+
+ const QDateTime localDate = QDateTime(date, early, Qt::LocalTime);
+ const QDateTime utcDate = QDateTime(date, early, Qt::UTC);
+ const qint64 localMsecs = localDate.toMSecsSinceEpoch();
+ const qint64 utcMsecs = utcDate.toMSecsSinceEpoch();
#if QT_CONFIG(timezone)
- qint64 tzMsecs = tzDate.toMSecsSinceEpoch();
+ const QTimeZone aest("Australia/Brisbane"); // no transitions since 1992
+ // Check that Australia/Brisbane is known:
+ QVERIFY(aest.isValid());
+ const QDateTime tzDate = QDateTime(date, early, aest);
- // check that Australia/Brisbane is known
+ // Check we got the right zone !
QVERIFY(tzDate.timeZone().isValid());
+ QCOMPARE(tzDate.timeZone(), aest);
+ const qint64 tzMsecs = tzDate.toMSecsSinceEpoch();
#endif
// Change to Indian time
useZone.reset(QByteArray("IST-05:30"));
+ if (QDateTime(date, early, Qt::LocalTime).offsetFromUtc() != 330 * 60)
+ QSKIP("Test depends on system support for changing zone to IST-05:30");
+#if QT_CONFIG(timezone)
+ QVERIFY(QTimeZone::systemTimeZone().isValid());
+#endif
- QCOMPARE(localDate, QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::LocalTime));
- QVERIFY(localMsecs != localDate.toMSecsSinceEpoch());
- QCOMPARE(utcDate, QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), Qt::UTC));
+ QCOMPARE(localDate, QDateTime(date, early, Qt::LocalTime));
+ // Note: localDate.toMSecsSinceEpoch == localMsecs, unchanged, iff localDate is pimpled.
+ QVERIFY(localMsecs != QDateTime(date, early, Qt::LocalTime).toMSecsSinceEpoch());
+ QCOMPARE(utcDate, QDateTime(date, early, Qt::UTC));
QCOMPARE(utcDate.toMSecsSinceEpoch(), utcMsecs);
#if QT_CONFIG(timezone)
- QCOMPARE(tzDate, QDateTime(QDate(2012, 6, 1), QTime(2, 15, 30), QTimeZone("Australia/Brisbane")));
QCOMPARE(tzDate.toMSecsSinceEpoch(), tzMsecs);
+ QCOMPARE(tzDate.timeZone(), aest);
+ QCOMPARE(tzDate, QDateTime(date, early, aest));
#endif
}