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"