File indexing completed on 2024-04-28 15:18:55

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 QTEST_MAIN(PeriodTest)
0017 
0018 using namespace KCalendarCore;
0019 
0020 void PeriodTest::testValidity()
0021 {
0022     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC);
0023     Period p1(p1DateTime, Duration(60));
0024     Period p2;
0025 
0026     QVERIFY(p1.hasDuration());
0027     QCOMPARE(p1.duration().asSeconds(), 60);
0028     QVERIFY(p1.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC));
0029 
0030     p2 = p1;
0031 
0032     QVERIFY(p2.hasDuration());
0033     QVERIFY(p2.duration().asSeconds() == 60);
0034     QVERIFY(p2.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC));
0035 
0036     const QDateTime p3DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC);
0037     Period p3(p3DateTime, Duration(24 * 60 * 60));
0038 
0039     QVERIFY(p3.hasDuration());
0040     QVERIFY(p3.duration().asSeconds() == 24 * 60 * 60);
0041     QVERIFY(p3.start() == QDateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC));
0042 }
0043 
0044 void PeriodTest::testCompare()
0045 {
0046     const QDateTime p1DateTime(QDate(2006, 8, 30), {});
0047     Period p1(p1DateTime, Duration(24 * 60 * 60));
0048     const QDateTime p2DateTime(QDate(2006, 8, 29), {});
0049     Period p2(p2DateTime, Duration(23 * 60 * 60));
0050     const QDateTime p3DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC);
0051     Period p3(p3DateTime, Duration(24 * 60 * 60));
0052     Period p1copy {p1}; // test copy constructor
0053     Period p1assign;
0054     p1assign = p1; // test operator=
0055     Period p3copy {p3};
0056     Period p3assign = p3;
0057 
0058     QVERIFY(p2 < p1);
0059     QVERIFY(!(p1 == p2));
0060     QVERIFY(p1copy == p1);
0061     QVERIFY(p1assign == p1);
0062     QVERIFY(p3copy == p3);
0063     QVERIFY(p3assign == p3);
0064 }
0065 
0066 void PeriodTest::testDataStreamOut()
0067 {
0068     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC);
0069     const Duration duration(24 * 60 * 60);
0070     Period p1(p1DateTime, duration);
0071 
0072     QByteArray byteArray;
0073     QDataStream out_stream(&byteArray, QIODevice::WriteOnly);
0074 
0075     out_stream << p1;
0076 
0077     QDataStream in_stream(&byteArray, QIODevice::ReadOnly);
0078 
0079     QDateTime begin;
0080     deserializeKDateTimeAsQDateTime(in_stream, begin);
0081     // There is no way to serialize KDateTime as of KDE4.5
0082     // and the to/fromString methods do not perform a perfect reconstruction
0083     // of a datetime
0084     QVERIFY(begin == p1.start());
0085 
0086     QDateTime end;
0087     deserializeKDateTimeAsQDateTime(in_stream, end);
0088     QVERIFY(end == p1.end());
0089 
0090     bool dailyduration;
0091     in_stream >> dailyduration;
0092     QVERIFY(dailyduration == duration.isDaily());
0093 
0094     bool hasduration;
0095     in_stream >> hasduration;
0096     QVERIFY(hasduration == p1.hasDuration());
0097 }
0098 
0099 void PeriodTest::testDataStreamIn()
0100 {
0101     const QDateTime p1DateTime(QDate(2006, 8, 30), QTime(7, 0, 0), Qt::UTC);
0102     const Duration duration(24 * 60 * 60);
0103     Period p1(p1DateTime, duration);
0104 
0105     QByteArray byteArray;
0106     QDataStream out_stream(&byteArray, QIODevice::WriteOnly);
0107 
0108     out_stream << p1;
0109 
0110     QDataStream in_stream(&byteArray, QIODevice::ReadOnly);
0111 
0112     Period p2;
0113 
0114     in_stream >> p2;
0115 
0116     QVERIFY(p1 == p2);
0117 }
0118 
0119 #include "moc_testperiod.cpp"