File indexing completed on 2024-05-19 05:11:11

0001 /*
0002     SPDX-FileCopyrightText: 2009 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <Akonadi/Item>
0008 #include <KCalendarCore/Event>
0009 #include <QObject>
0010 #include <QTest>
0011 
0012 using namespace Akonadi;
0013 using namespace KCalendarCore;
0014 
0015 class KCalCoreSerializerTest : public QObject
0016 {
0017     Q_OBJECT
0018 private Q_SLOTS:
0019     void testEventSerialize_data()
0020     {
0021         QTest::addColumn<QString>("mimeType");
0022         QTest::newRow("specific") << "application/x-vnd.akonadi.calendar.event";
0023         QTest::newRow("generic") << "text/calendar";
0024     }
0025 
0026     void testCharsets_data()
0027     {
0028         testEventSerialize_data();
0029     }
0030 
0031     void testEventSerialize()
0032     {
0033         QFETCH(QString, mimeType);
0034 
0035         QByteArray serialized =
0036             "BEGIN:VCALENDAR\n"
0037             "PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN\n"
0038             "VERSION:2.0\n"
0039             "BEGIN:VEVENT\n"
0040             "DTSTAMP:20070109T100625Z\n"
0041             "ORGANIZER;CN=\"Volker Krause\":MAILTO:vkrause@kde.org\n"
0042             "CREATED:20070109T100553Z\n"
0043             "UID:libkcal-1135684253.945\n"
0044             "SEQUENCE:1\n"
0045             "LAST-MODIFIED:20070109T100625Z\n"
0046             "SUMMARY:Test event\n"
0047             "LOCATION:here\n"
0048             "CLASS:PUBLIC\n"
0049             "PRIORITY:5\n"
0050             "CATEGORIES:KDE\n"
0051             "DTSTART:20070109T183000Z\n"
0052             "DTEND:20070109T225900Z\n"
0053             "TRANSP:OPAQUE\n"
0054             "BEGIN:VALARM\n"
0055             "DESCRIPTION:\n"
0056             "ACTION:DISPLAY\n"
0057             "TRIGGER;VALUE=DURATION:-PT45M\n"
0058             "END:VALARM\n"
0059             "END:VEVENT\n"
0060             "END:VCALENDAR\n";
0061 
0062         // deserializing
0063         Item item;
0064         item.setMimeType(mimeType);
0065         item.setPayloadFromData(serialized);
0066 
0067         QVERIFY(item.hasPayload<Event::Ptr>());
0068         const auto event = item.payload<Event::Ptr>();
0069         QVERIFY(event != nullptr);
0070 
0071         QCOMPARE(event->summary(), QStringLiteral("Test event"));
0072         QCOMPARE(event->location(), QStringLiteral("here"));
0073 
0074         // serializing
0075         const QByteArray data = item.payloadData();
0076         QVERIFY(!data.isEmpty());
0077     }
0078 
0079     void testCharsets()
0080     {
0081         QFETCH(QString, mimeType);
0082 
0083         // 0 defaults to latin1.
0084         // QT5 QVERIFY( QTextCodec::codecForCStrings() == 0 );
0085 
0086         const QDate currentDate = QDate::currentDate();
0087 
0088         Event::Ptr event = Event::Ptr(new Event());
0089         event->setUid(QStringLiteral("12345"));
0090         event->setDtStart(QDateTime(currentDate, {}));
0091         event->setDtEnd(QDateTime(currentDate.addDays(1), {}));
0092         event->setAllDay(true);
0093 
0094         // ΓΌ
0095         const char latin1_umlaut[] = {static_cast<char>(0xFC), '\0'};
0096         event->setSummary(QLatin1StringView(latin1_umlaut));
0097 
0098         Item item;
0099         item.setMimeType(mimeType);
0100         item.setPayload(event);
0101 
0102         // Serializer the item, the serialization should be in UTF-8:
0103         const char utf_umlaut[] = {static_cast<char>(0xC3), static_cast<char>(0XBC), '\0'};
0104         const QByteArray bytes = item.payloadData();
0105         QVERIFY(bytes.contains(utf_umlaut));
0106         QVERIFY(!bytes.contains(latin1_umlaut));
0107 
0108         // Deserialize the data:
0109         Item item2;
0110         item2.setMimeType(mimeType);
0111         item2.setPayloadFromData(bytes);
0112 
0113         auto event2 = item2.payload<Event::Ptr>();
0114         QVERIFY(event2 != nullptr);
0115         QVERIFY(event2->summary().toUtf8() == QByteArray(utf_umlaut));
0116         QVERIFY(event2->summary().toLatin1() == QByteArray(latin1_umlaut));
0117     }
0118 };
0119 
0120 QTEST_MAIN(KCalCoreSerializerTest)
0121 
0122 #include "kcalcoreserializertest.moc"