File indexing completed on 2024-04-28 05:11:29

0001 /*
0002   SPDX-FileCopyrightText: 2009 Thomas McGuire <mcguire@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 #include "ktimezonecomboboxtest.h"
0007 #include "../src/ktimezonecombobox.h"
0008 
0009 #include <QTest>
0010 
0011 #include <QTimeZone>
0012 
0013 QTEST_MAIN(KTimeZoneComboBoxTest)
0014 
0015 const auto TEST_TZ = "Asia/Tokyo"; // Not UTC, not Paris.
0016 
0017 void KTimeZoneComboBoxTest::initTestCase()
0018 {
0019     qputenv("TZ", TEST_TZ);
0020 }
0021 
0022 void KTimeZoneComboBoxTest::test_timeSpec()
0023 {
0024     IncidenceEditorNG::KTimeZoneComboBox combo;
0025     combo.selectLocalTimeZone();
0026     QVERIFY(!combo.isFloating());
0027     QCOMPARE(combo.selectedTimeZone(), QTimeZone::systemTimeZone());
0028 
0029     combo.selectTimeZone(QTimeZone());
0030     QCOMPARE(combo.selectedTimeZone(), QTimeZone::systemTimeZone());
0031 
0032     combo.setFloating(true);
0033     QVERIFY(combo.isFloating());
0034     QCOMPARE(combo.selectedTimeZone(), QTimeZone::systemTimeZone());
0035 }
0036 
0037 void KTimeZoneComboBoxTest::test_selectTimeZoneFor()
0038 {
0039     IncidenceEditorNG::KTimeZoneComboBox combo;
0040 
0041     // Floating
0042     QDateTime dt(QDate(2021, 12, 12), QTime(12, 0, 0));
0043     QCOMPARE(dt.timeSpec(), Qt::LocalTime);
0044     combo.selectTimeZoneFor(dt);
0045     QVERIFY(combo.isFloating());
0046 
0047     // System time zone.
0048     QDateTime dtSys(QDate(2021, 12, 12), QTime(12, 0, 0), QTimeZone::systemTimeZone());
0049     combo.selectTimeZoneFor(dtSys);
0050     QVERIFY(!combo.isFloating());
0051     QCOMPARE(combo.selectedTimeZone(), QTimeZone::systemTimeZone());
0052 
0053     // UTC.
0054     QDateTime dtUtc = QDateTime::currentDateTimeUtc();
0055     combo.selectTimeZoneFor(dtUtc);
0056     QVERIFY(!combo.isFloating());
0057     QCOMPARE(combo.selectedTimeZone(), QTimeZone::utc());
0058 
0059     // General case.
0060     const QDateTime dtParis(QDate(2021, 12, 12), QTime(12, 0, 0), QTimeZone("Europe/Paris"));
0061     QCOMPARE(dtParis.timeSpec(), Qt::TimeZone);
0062     combo.selectTimeZoneFor(dtParis);
0063     QVERIFY(!combo.isFloating());
0064     QCOMPARE(combo.selectedTimeZone().id(), "Europe/Paris");
0065 }
0066 
0067 void KTimeZoneComboBoxTest::test_applyTimeZoneTo()
0068 {
0069     IncidenceEditorNG::KTimeZoneComboBox combo;
0070     QDateTime dt = QDateTime::currentDateTime();
0071 
0072     combo.selectTimeZoneFor(QDateTime(QDate(2021, 12, 12), QTime(12, 0, 0), QTimeZone::LocalTime));
0073     combo.applyTimeZoneTo(dt);
0074     QCOMPARE(dt.timeZone(), QTimeZone("Asia/Tokyo"));
0075 
0076     combo.selectTimeZoneFor(QDateTime(QDate(2021, 12, 12), QTime(12, 0, 0), QTimeZone::systemTimeZone()));
0077     combo.applyTimeZoneTo(dt);
0078     QCOMPARE(dt.timeSpec(), Qt::TimeZone);
0079     QCOMPARE(dt.timeZone(), QTimeZone::systemTimeZone());
0080 
0081     combo.selectTimeZoneFor(QDateTime::currentDateTimeUtc());
0082     combo.applyTimeZoneTo(dt);
0083     QCOMPARE(dt.timeSpec(), Qt::TimeZone);
0084     QCOMPARE(dt.timeZone(), QTimeZone::utc());
0085 
0086     combo.selectTimeZoneFor(QDateTime(QDate(2021, 12, 12), QTime(12, 0, 0), QTimeZone("Europe/Paris")));
0087     combo.applyTimeZoneTo(dt);
0088     QCOMPARE(dt.timeSpec(), Qt::TimeZone);
0089     QCOMPARE(dt.timeZone().id(), "Europe/Paris");
0090 }
0091 
0092 /**
0093  * For the user's convenience, the first three items are the system time zone,
0094  * "floating", and UTC.
0095  */
0096 void KTimeZoneComboBoxTest::test_convenience()
0097 {
0098     IncidenceEditorNG::KTimeZoneComboBox combo;
0099     combo.setCurrentIndex(0);
0100     QVERIFY(!combo.isFloating());
0101     QCOMPARE(combo.selectedTimeZone(), QTimeZone::systemTimeZone());
0102 
0103     combo.setCurrentIndex(1);
0104     QVERIFY(combo.isFloating());
0105 
0106     combo.setCurrentIndex(2);
0107     QVERIFY(!combo.isFloating());
0108     QCOMPARE(combo.selectedTimeZone(), QTimeZone::utc());
0109 }
0110 
0111 #include "moc_ktimezonecomboboxtest.cpp"