File indexing completed on 2024-04-21 04:41:08
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "../src/lib/datatypes/mergeutil.cpp" 0008 0009 #include <QDateTime> 0010 #include <QTest> 0011 #include <QTimeZone> 0012 0013 using namespace KPublicTransport; 0014 0015 class MergeUtilTest : public QObject 0016 { 0017 Q_OBJECT 0018 private Q_SLOTS: 0019 void initTestCase() 0020 { 0021 qputenv("TZ", "UTC-8"); // something far away from the test data, to be sure local TZ doesn't interfere 0022 } 0023 0024 void testDateTimeDistance_data() 0025 { 0026 QTest::addColumn<QDateTime>("lhs"); 0027 QTest::addColumn<QDateTime>("rhs"); 0028 QTest::addColumn<int>("dist"); 0029 0030 QTest::newRow("empty") << QDateTime() << QDateTime() << 0; 0031 QTest::newRow("local vs tz eq") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << 0; 0032 QTest::newRow("local vs tz diff") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {13, 23}, QTimeZone("Asia/Seoul")) << 3600; 0033 QTest::newRow("local vs offset eq") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << 0; 0034 QTest::newRow("local vs offset diff") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {13, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << 3600; 0035 QTest::newRow("offset vs tz eq") << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << 0; 0036 QTest::newRow("offset vs tz diff") << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {13, 23}, QTimeZone("Asia/Seoul")) << 3600; 0037 } 0038 0039 void testDateTimeDistance() 0040 { 0041 QFETCH(QDateTime, lhs); 0042 QFETCH(QDateTime, rhs); 0043 QFETCH(int, dist); 0044 0045 QCOMPARE(MergeUtil::distance(lhs, rhs), dist); 0046 QCOMPARE(MergeUtil::distance(rhs, lhs), dist); 0047 0048 QCOMPARE(MergeUtil::isBefore(lhs, rhs), dist > 0); 0049 QCOMPARE(MergeUtil::isBefore(rhs, lhs), dist < 0); 0050 } 0051 0052 void testDateTimeMerge_data() 0053 { 0054 QTest::addColumn<QDateTime>("lhs"); 0055 QTest::addColumn<QDateTime>("rhs"); 0056 QTest::addColumn<QDateTime>("result"); 0057 0058 QTest::newRow("empty") << QDateTime() << QDateTime() << QDateTime(); 0059 QTest::newRow("invalid") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime() << QDateTime({1970, 1, 1}, {12, 23}); 0060 QTest::newRow("local vs tz") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")); 0061 QTest::newRow("local vs offset") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)); 0062 QTest::newRow("offset vs tz") << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")); 0063 } 0064 0065 void testDateTimeMerge() 0066 { 0067 QFETCH(QDateTime, lhs); 0068 QFETCH(QDateTime, rhs); 0069 QFETCH(QDateTime, result); 0070 0071 QCOMPARE(MergeUtil::mergeDateTimeEqual(lhs, rhs), result); 0072 QCOMPARE(MergeUtil::mergeDateTimeEqual(rhs, lhs), result); 0073 } 0074 0075 void testDateTimeMax_data() 0076 { 0077 QTest::addColumn<QDateTime>("lhs"); 0078 QTest::addColumn<QDateTime>("rhs"); 0079 QTest::addColumn<QDateTime>("result"); 0080 0081 QTest::newRow("empty") << QDateTime() << QDateTime() << QDateTime(); 0082 QTest::newRow("invalid") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime() << QDateTime({1970, 1, 1}, {12, 23}); 0083 QTest::newRow("local vs tz eq") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")); 0084 QTest::newRow("local vs tz gt") << QDateTime({1970, 1, 1}, {14, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")); 0085 QTest::newRow("local vs tz lt") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")); 0086 QTest::newRow("local vs offset eq") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)); 0087 QTest::newRow("local vs offset gt") << QDateTime({1970, 1, 1}, {15, 23}) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << QDateTime({1970, 1, 1}, {15, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)); 0088 QTest::newRow("local vs offset lt") << QDateTime({1970, 1, 1}, {12, 23}) << QDateTime({1970, 1, 1}, {15, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)) << QDateTime({1970, 1, 1}, {15, 23}, QTimeZone::fromSecondsAheadOfUtc(7200)); 0089 QTest::newRow("offset vs tz eq") << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")); 0090 QTest::newRow("offset vs tz gt") << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")); 0091 QTest::newRow("offset vs tz lt") << QDateTime({1970, 1, 1}, {12, 23}, QTimeZone::fromSecondsAheadOfUtc(9 * 3600)) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")) << QDateTime({1970, 1, 1}, {14, 23}, QTimeZone("Asia/Seoul")); 0092 } 0093 0094 void testDateTimeMax() 0095 { 0096 QFETCH(QDateTime, lhs); 0097 QFETCH(QDateTime, rhs); 0098 QFETCH(QDateTime, result); 0099 0100 QCOMPARE(MergeUtil::mergeDateTimeMax(lhs, rhs), result); 0101 QCOMPARE(MergeUtil::mergeDateTimeMax(rhs, lhs), result); 0102 } 0103 }; 0104 0105 QTEST_GUILESS_MAIN(MergeUtilTest) 0106 0107 #include "mergeutiltest.moc"