File indexing completed on 2024-04-21 03:52:41

0001 /*
0002   This file is part of the kcalcore library.
0003 
0004   SPDX-FileCopyrightText: 2006 Narayan Newton <narayannewton@gmail.com>
0005   SPDX-FileCopyrightText: 2010 Casey Link <unnamedrambler@gmail.com>
0006   SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
0007 
0008   SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 #include "testperiod.h"
0012 #include "period.h"
0013 #include "utils_p.h"
0014 
0015 #include <QTest>
0016 #include <QTimeZone>
0017 
0018 QTEST_MAIN(PeriodTest)
0019 
0020 using namespace KCalendarCore;
0021 
0022 void PeriodTest::testValidity()
0023 {
0024     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC);
0025     Period p1(p1DateTime, Duration(60));
0026     Period p2;
0027 
0028     QVERIFY(p1.hasDuration());
0029     QCOMPARE(p1.duration().asSeconds(), 60);
0030     QVERIFY(p1.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC));
0031 
0032     p2 = p1;
0033 
0034     QVERIFY(p2.hasDuration());
0035     QVERIFY(p2.duration().asSeconds() == 60);
0036     QVERIFY(p2.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC));
0037 
0038     const QDateTime p3DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC);
0039     Period p3(p3DateTime, Duration(24 * 60 * 60));
0040 
0041     QVERIFY(p3.hasDuration());
0042     QVERIFY(p3.duration().asSeconds() == 24 * 60 * 60);
0043     QVERIFY(p3.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC));
0044 }
0045 
0046 void PeriodTest::testCompare()
0047 {
0048     const QDateTime p1DateTime(QDate(2006, 8, 30), {});
0049     Period p1(p1DateTime, Duration(24 * 60 * 60));
0050     const QDateTime p2DateTime(QDate(2006, 8, 29), {});
0051     Period p2(p2DateTime, Duration(23 * 60 * 60));
0052     const QDateTime p3DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC);
0053     Period p3(p3DateTime, Duration(24 * 60 * 60));
0054     Period p1copy {p1}; // test copy constructor
0055     Period p1assign;
0056     p1assign = p1; // test operator=
0057     Period p3copy {p3};
0058     Period p3assign = p3;
0059 
0060     QVERIFY(p2 < p1);
0061     QVERIFY(!(p1 == p2));
0062     QVERIFY(p1copy == p1);
0063     QVERIFY(p1assign == p1);
0064     QVERIFY(p3copy == p3);
0065     QVERIFY(p3assign == p3);
0066 }
0067 
0068 void PeriodTest::testDataStreamOut()
0069 {
0070     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC);
0071     const Duration duration(24 * 60 * 60);
0072     Period p1(p1DateTime, duration);
0073 
0074     QByteArray byteArray;
0075     QDataStream out_stream(&byteArray, QIODevice::WriteOnly);
0076 
0077     out_stream << p1;
0078 
0079     QDataStream in_stream(&byteArray, QIODevice::ReadOnly);
0080 
0081     QDateTime begin;
0082     deserializeKDateTimeAsQDateTime(in_stream, begin);
0083     // There is no way to serialize KDateTime as of KDE4.5
0084     // and the to/fromString methods do not perform a perfect reconstruction
0085     // of a datetime
0086     QVERIFY(begin == p1.start());
0087 
0088     QDateTime end;
0089     deserializeKDateTimeAsQDateTime(in_stream, end);
0090     QVERIFY(end == p1.end());
0091 
0092     bool dailyduration;
0093     in_stream >> dailyduration;
0094     QVERIFY(dailyduration == duration.isDaily());
0095 
0096     bool hasduration;
0097     in_stream >> hasduration;
0098     QVERIFY(hasduration == p1.hasDuration());
0099 }
0100 
0101 void PeriodTest::testDataStreamIn()
0102 {
0103     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), QTimeZone::UTC);
0104     const Duration duration(24 * 60 * 60);
0105     Period p1(p1DateTime, duration);
0106 
0107     QByteArray byteArray;
0108     QDataStream out_stream(&byteArray, QIODevice::WriteOnly);
0109 
0110     out_stream << p1;
0111 
0112     QDataStream in_stream(&byteArray, QIODevice::ReadOnly);
0113 
0114     Period p2;
0115 
0116     in_stream >> p2;
0117 
0118     QVERIFY(p1 == p2);
0119 }
0120 
0121 #include "moc_testperiod.cpp"