File indexing completed on 2024-04-14 03:50:36

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Glen Ditchfield <GJDitchfield@acm.org>
0003  *  SPDX-License-Identifier: LGPL-2.0-or-later
0004  */
0005 
0006 #include "incidencebase.h"
0007 
0008 #include <QTest>
0009 #include <QTimeZone>
0010 
0011 using namespace KCalendarCore;
0012 
0013 class TestIdentical: public QObject
0014 {
0015     Q_OBJECT
0016 private Q_SLOTS:
0017 
0018     void testTrue_data()
0019     {
0020         QTest::addColumn<QDateTime>("dt1");
0021         QTest::addColumn<QDateTime>("dt2");
0022 
0023         QTest::newRow("local") << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::LocalTime)
0024                                << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::LocalTime);
0025 
0026         QTest::newRow("tz") << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone("Atlantic/Azores"))
0027                             << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone("Atlantic/Azores"));
0028 
0029         QTest::newRow("invalid") << QDateTime() << QDateTime();
0030 
0031 #pragma GCC diagnostic push
0032 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
0033         QTest::newRow("utc-tz") << QDateTime(QDate(2023, 11, 18), QTime(13, 31), Qt::UTC) << QDateTime(QDate(2023, 11, 18), QTime(13, 31), QTimeZone::utc());
0034         QTest::newRow("tz-newoffset") << QDateTime(QDate(2023, 11, 18), QTime(13, 31), Qt::UTC)
0035                                       << QDateTime(QDate(2023, 11, 18), QTime(13, 31), QTimeZone::fromSecondsAheadOfUtc(0));
0036         QTest::newRow("utc-newoffset") << QDateTime(QDate(2023, 11, 18), QTime(13, 31), Qt::UTC)
0037                                        << QDateTime(QDate(2023, 11, 18), QTime(13, 31), QTimeZone::fromSecondsAheadOfUtc(0));
0038         QTest::newRow("utc-oldoffset-newoffset") << QDateTime(QDate(2023, 11, 18), QTime(13, 31), Qt::OffsetFromUTC, 0)
0039                                                  << QDateTime(QDate(2023, 11, 18), QTime(13, 31), QTimeZone::fromSecondsAheadOfUtc(0));
0040 
0041         QTest::newRow("offset") << QDateTime(QDate(2023, 11, 18), QTime(13, 31), Qt::OffsetFromUTC, 3600)
0042                                 << QDateTime(QDate(2023, 11, 18), QTime(13, 31), QTimeZone::fromSecondsAheadOfUtc(3600));
0043 #pragma GCC diagnostic pop
0044     }
0045 
0046     void testTrue()
0047     {
0048         QFETCH(QDateTime, dt1);
0049         QFETCH(QDateTime, dt2);
0050 
0051         QVERIFY(identical(dt1, dt2));
0052         QVERIFY(identical(dt2, dt1));
0053     }
0054 
0055     void testFalse_data()
0056     {
0057         QTest::addColumn<QDateTime>("dt1");
0058         QTest::addColumn<QDateTime>("dt2");
0059 
0060         QTest::newRow("date") << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::LocalTime)
0061                               << QDateTime(QDate(2022, 02, 23), QTime(22, 22, 22), QTimeZone::LocalTime);
0062         QTest::newRow("time") << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::LocalTime)
0063                               << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 23), QTimeZone::LocalTime);
0064 
0065         // Note:  QTimeZone::LocalTime is used for "floating" date-times; "this time
0066         // in the current system time zone".
0067         QTest::newRow("timeSpec") << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::LocalTime)
0068                                   << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone::systemTimeZone());
0069 
0070         // Both zones are UTC+0.
0071         QTest::newRow("timeZone")
0072             << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone("Africa/Abidjan"))
0073             << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QTimeZone("Africa/Accra"));
0074 
0075 #pragma GCC diagnostic push
0076 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
0077         QTest::newRow("invalid timeSpec")
0078             << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QDateTime().timeSpec())
0079             << QDateTime();
0080 #pragma GCC diagnostic pop
0081         QTest::newRow("invalid timeZone")
0082             << QDateTime(QDate(2022, 02, 22), QTime(22, 22, 22), QDateTime().timeZone())
0083             << QDateTime();
0084     }
0085 
0086     void testFalse()
0087     {
0088         QFETCH(QDateTime, dt1);
0089         QFETCH(QDateTime, dt2);
0090         QVERIFY(!identical(dt1, dt2));
0091     }
0092 };
0093 
0094 QTEST_MAIN(TestIdentical)
0095 #include "testidentical.moc"