diff options
Diffstat (limited to 'tests/auto/qml/qqmllocale')
-rw-r--r-- | tests/auto/qml/qqmllocale/data/timeZoneUpdated.qml | 51 | ||||
-rw-r--r-- | tests/auto/qml/qqmllocale/tst_qqmllocale.cpp | 41 |
2 files changed, 92 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmllocale/data/timeZoneUpdated.qml b/tests/auto/qml/qqmllocale/data/timeZoneUpdated.qml new file mode 100644 index 0000000000..92d1f5bc40 --- /dev/null +++ b/tests/auto/qml/qqmllocale/data/timeZoneUpdated.qml @@ -0,0 +1,51 @@ +import QtQuick 2.0 + +Item { + property bool success: false + + property date localDate + property date utcDate + + Component.onCompleted: { + // Test date: 2012-06-01T02:15:30+10:00 (AEST timezone) + localDate = new Date(2012, 6-1, 1, 2, 15, 30) + utcDate = new Date(Date.UTC(2012, 6-1, 1, 2, 15, 30)) + + if (localDate.getTimezoneOffset() != -600) return + + if (localDate.toLocaleString() != "Friday, June 1, 2012 2:15:30 AM AEST") return + if (localDate.toISOString() != "2012-05-31T16:15:30.000Z") return + + if (utcDate.toISOString() != "2012-06-01T02:15:30.000Z") return + if (utcDate.toLocaleString() != "Friday, June 1, 2012 12:15:30 PM AEST") return + + success = true + } + + function check() { + success = false + + // We have changed to IST time zone - inform JS: + Date.timeZoneUpdated() + + if (localDate.getTimezoneOffset() != -330) return + + if (localDate.toLocaleString() != "Friday, June 1, 2012 2:15:30 AM IST") return + if (localDate.toISOString() != "2012-05-31T20:45:30.000Z") return + + if (utcDate.toISOString() != "2012-06-01T06:45:30.000Z") return + if (utcDate.toLocaleString() != "Friday, June 1, 2012 12:15:30 PM IST") return + + // Create new dates in this timezone + localDate = new Date(2012, 6-1, 1, 2, 15, 30) + utcDate = new Date(Date.UTC(2012, 6-1, 1, 2, 15, 30)) + + if (localDate.toLocaleString() != "Friday, June 1, 2012 2:15:30 AM IST") return + if (localDate.toISOString() != "2012-05-31T20:45:30.000Z") return + + if (utcDate.toISOString() != "2012-06-01T02:15:30.000Z") return + if (utcDate.toLocaleString() != "Friday, June 1, 2012 7:45:30 AM IST") return + + success = true + } +} diff --git a/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp b/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp index e74570261f..c39426375f 100644 --- a/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp +++ b/tests/auto/qml/qqmllocale/tst_qqmllocale.cpp @@ -47,6 +47,8 @@ #include <qcolor.h> #include "../../shared/util.h" +#include <time.h> + class tst_qqmllocale : public QQmlDataTest { Q_OBJECT @@ -80,6 +82,7 @@ private slots: void dateTimeFormat(); void timeFormat_data(); void timeFormat(); + void timeZoneUpdated(); void dateToLocaleString_data(); void dateToLocaleString(); @@ -1214,6 +1217,44 @@ void tst_qqmllocale::stringLocaleCompare() QCOMPARE(obj->property("comparison").toInt(), QString::localeAwareCompare(string1, string2)); } +static void setTimeZone(const QByteArray &tz) +{ + qputenv("TZ", tz); +#if defined(Q_OS_WIN32) + ::_tzset(); +#elif defined(Q_OS_UNIX) + ::tzset(); +#endif +} + +void tst_qqmllocale::timeZoneUpdated() +{ +#if !defined(Q_OS_WIN32) && !defined(Q_OS_UINX) + QSKIP("Timezone manipulation not available for this platform"); +#endif + + QByteArray original(qgetenv("TZ")); + + // Set the timezone to Brisbane time + setTimeZone(QByteArray("AEST-10:00")); + + QQmlEngine e; + QQmlComponent c(&e, testFileUrl("timeZoneUpdated.qml")); + QScopedPointer<QObject> obj(c.create()); + QVERIFY(obj); + QCOMPARE(obj->property("success").toBool(), true); + + // Change to Indian time + setTimeZone(QByteArray("IST-05:30")); + + QMetaObject::invokeMethod(obj.data(), "check"); + + // Reset to original time + setTimeZone(original); + + QCOMPARE(obj->property("success").toBool(), true); +} + QTEST_MAIN(tst_qqmllocale) #include "tst_qqmllocale.moc" |