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"