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"