File indexing completed on 2024-05-19 05:14:14
0001 /* 0002 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include "../src/calendarextras/androidicalconverter.cpp" 0007 #include "../src/calendarextras/android/eventdata.h" 0008 0009 #include <QObject> 0010 #include <QTest> 0011 0012 using namespace KAndroidExtras; 0013 0014 class AndroidIcalConverterTest : public QObject 0015 { 0016 Q_OBJECT 0017 private Q_SLOTS: 0018 void testEvent() 0019 { 0020 JniEventData data; 0021 data.title = QStringLiteral("summary"); 0022 data.allDay = true; 0023 data.dtStart = 1653055380000; 0024 data.startTimezone = QStringLiteral("Europe/Brussels"); 0025 0026 auto event = AndroidIcalConverter::readEvent(data); 0027 QCOMPARE(event->summary(), QLatin1StringView("summary")); 0028 QCOMPARE(event->allDay(), true); 0029 QCOMPARE(event->dtStart(), QDateTime({2022, 5, 20}, {16, 3}, QTimeZone("Europe/Brussels"))); 0030 0031 const auto out = AndroidIcalConverter::writeEvent(event); 0032 QCOMPARE(out.title, QLatin1StringView("summary")); 0033 QCOMPARE(out.allDay, true); 0034 QCOMPARE(out.dtStart, 1653055380000); 0035 QCOMPARE(out.startTimezone, QLatin1StringView("Europe/Brussels")); 0036 } 0037 0038 void testAlarm() 0039 { 0040 KCalendarCore::Event ev; 0041 auto data = Jni::fromHandle<JniReminderData>(QJniObject{}); 0042 data.minutes = 5; 0043 auto alarm = AndroidIcalConverter::readAlarm(data, &ev); 0044 QCOMPARE(alarm->startOffset().asSeconds(), -300); 0045 0046 const auto out = AndroidIcalConverter::writeAlarm(alarm); 0047 QCOMPARE(out.minutes, 5); 0048 } 0049 0050 void testAttendee() 0051 { 0052 auto data = Jni::fromHandle<JniAttendeeData>(QJniObject{}); 0053 data.name = QStringLiteral("Dr Konqi"); 0054 data.email = QStringLiteral("null@kde.org"); 0055 auto attendee = AndroidIcalConverter::readAttendee(data); 0056 QCOMPARE(attendee.fullName(), QLatin1StringView("Dr Konqi <null@kde.org>")); 0057 0058 const auto out = AndroidIcalConverter::writeAttendee(attendee); 0059 QCOMPARE(out.name, QLatin1StringView("Dr Konqi")); 0060 QCOMPARE(out.email, QLatin1StringView("null@kde.org")); 0061 } 0062 0063 void testExtendedProperties() 0064 { 0065 KCalendarCore::Event ev; 0066 AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("CREATED"), QStringLiteral("20211116T193700Z")); 0067 AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("GEO"), QStringLiteral("52.525;13.369")); 0068 AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("X-KDE-KITINERARY-RESERVATION"), QStringLiteral("<json>")); 0069 0070 QCOMPARE(ev.customProperty("KITINERARY", "RESERVATION"), QLatin1StringView("<json>")); 0071 QVERIFY(ev.hasGeo()); 0072 QCOMPARE(ev.geoLatitude(), 52.525f); 0073 QCOMPARE(ev.geoLongitude(), 13.369f); 0074 QCOMPARE(ev.created(), QDateTime({2021, 11, 16}, {19, 37}, Qt::UTC)); 0075 0076 const auto out = AndroidIcalConverter::writeExtendedProperties(&ev); 0077 QCOMPARE(out.size(), 3); 0078 QCOMPARE(out[0].name, QLatin1StringView("vnd.android.cursor.item/vnd.ical4android.unknown-property")); 0079 QCOMPARE(QString(out[0].value), QLatin1StringView("[\"CREATED\",\"20211116T193700Z\"]")); 0080 QCOMPARE(QString(out[1].value), QLatin1StringView("[\"GEO\",\"52.525002;13.369000\"]")); 0081 QCOMPARE(QString(out[2].value), QLatin1StringView("[\"X-KDE-KITINERARY-RESERVATION\",\"<json>\"]")); 0082 } 0083 0084 void testReadRDate() 0085 { 0086 // date/time variants 0087 QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QString()), QList<QDateTime>()); 0088 QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("20220520T200000Z")), 0089 QList<QDateTime>({QDateTime({2022, 5, 20}, {20, 0}, Qt::UTC)})); 0090 QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("Europe/Brussels;20211224T153000,20211231T153000,20220107T153000")), 0091 QList<QDateTime>({QDateTime({2021, 12, 24}, {15, 30}, QTimeZone("Europe/Brussels")), 0092 QDateTime({2021, 12, 31}, {15, 30}, QTimeZone("Europe/Brussels")), 0093 QDateTime({2022, 1, 7}, {15, 30}, QTimeZone("Europe/Brussels"))})); 0094 QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("20201230T000000Z,20211229T190000Z")), 0095 QList<QDateTime>({QDateTime({2020, 12, 30}, {0, 0}, Qt::UTC), 0096 QDateTime({2021, 12, 29}, {19, 0}, Qt::UTC)})); 0097 QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("Europe/Helsinki;20210513T122346")), 0098 QList<QDateTime>({QDateTime({2021, 05, 13}, {12, 23, 46}, QTimeZone("Europe/Helsinki"))})); 0099 0100 // TODO date-only variants 0101 } 0102 0103 void testWriteRDate() 0104 { 0105 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>()), QString()); 0106 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2022, 5, 20}, {20, 0}, Qt::UTC)})), 0107 QLatin1StringView("20220520T200000Z")); 0108 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2021, 05, 13}, {12, 23, 46}, QTimeZone("Europe/Helsinki"))})), 0109 QLatin1StringView("Europe/Helsinki;20210513T122346")); 0110 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2020, 12, 30}, {0, 0}, Qt::UTC), 0111 QDateTime({2021, 12, 29}, {19, 0}, Qt::UTC)})), 0112 QLatin1StringView("20201230T000000Z,20211229T190000Z")); 0113 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2021, 12, 24}, {15, 30}, QTimeZone("Europe/Brussels")), 0114 QDateTime({2021, 12, 31}, {15, 30}, Qt::UTC), 0115 QDateTime({2022, 1, 7}, {15, 30}, QTimeZone("Europe/Brussels"))})), 0116 QLatin1StringView("Europe/Brussels;20211224T153000,20211231T163000,20220107T153000")); 0117 0118 0119 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>()), QString()); 0120 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>({{2022, 5, 28}})), QLatin1StringView("20220528")); 0121 QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>({{2022, 5, 28}, {2022, 5, 29}})), QLatin1StringView("20220528,20220529")); 0122 } 0123 }; 0124 0125 QTEST_APPLESS_MAIN(AndroidIcalConverterTest) 0126 0127 #include "androidicalconvertertest.moc"