File indexing completed on 2024-04-21 03:52:39
0001 /* 0002 This file is part of the kcalcore library. 0003 0004 SPDX-FileCopyrightText: 2015 Sandro Knauß <sknauss@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "testcalendarobserver.h" 0010 #include "calendar.h" 0011 #include "filestorage.h" 0012 #include "memorycalendar.h" 0013 0014 #include <QSignalSpy> 0015 #include <QTest> 0016 #include <QTimeZone> 0017 0018 QTEST_MAIN(CalendarObserverTest) 0019 0020 using namespace KCalendarCore; 0021 Q_DECLARE_METATYPE(KCalendarCore::Incidence::Ptr) 0022 Q_DECLARE_METATYPE(const Calendar *) 0023 0024 class SimpleObserver : public QObject, public Calendar::CalendarObserver 0025 { 0026 Q_OBJECT 0027 public: 0028 SimpleObserver(Calendar *cal, QObject *parent = nullptr) 0029 : QObject(parent) 0030 , mCal(cal) 0031 { 0032 } 0033 0034 Calendar *mCal = nullptr; 0035 Q_SIGNALS: 0036 void incidenceAdded(const KCalendarCore::Incidence::Ptr &incidence); 0037 void incidenceChanged(const KCalendarCore::Incidence::Ptr &incidence); 0038 void incidenceAboutToBeDeleted(const KCalendarCore::Incidence::Ptr &incidence); 0039 void incidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence, const Calendar *calendar); 0040 0041 protected: 0042 void calendarIncidenceAdded(const KCalendarCore::Incidence::Ptr &incidence) override 0043 { 0044 Q_EMIT incidenceAdded(incidence); 0045 } 0046 0047 void calendarIncidenceChanged(const KCalendarCore::Incidence::Ptr &incidence) override 0048 { 0049 Q_EMIT incidenceChanged(incidence); 0050 } 0051 0052 void calendarIncidenceAboutToBeDeleted(const KCalendarCore::Incidence::Ptr &incidence) override 0053 { 0054 QVERIFY(mCal->incidences().contains(incidence)); 0055 Q_EMIT incidenceAboutToBeDeleted(incidence); 0056 } 0057 0058 void calendarIncidenceDeleted(const KCalendarCore::Incidence::Ptr &incidence, const Calendar *calendar) override 0059 { 0060 QCOMPARE(calendar, mCal); 0061 QVERIFY(!calendar->incidences().contains(incidence)); 0062 Q_EMIT incidenceDeleted(incidence, calendar); 0063 } 0064 }; 0065 0066 void CalendarObserverTest::testAdd() 0067 { 0068 qRegisterMetaType<KCalendarCore::Incidence::Ptr>(); 0069 MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc())); 0070 SimpleObserver ob(cal.data()); 0071 QSignalSpy spy(&ob, &SimpleObserver::incidenceAdded); 0072 cal->registerObserver(&ob); 0073 Event::Ptr event1 = Event::Ptr(new Event()); 0074 event1->setUid(QStringLiteral("1")); 0075 0076 cal->addEvent(event1); 0077 QCOMPARE(spy.count(), 1); 0078 QList<QVariant> arguments = spy.takeFirst(); 0079 QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1)); 0080 } 0081 0082 void CalendarObserverTest::testChange() 0083 { 0084 qRegisterMetaType<KCalendarCore::Incidence::Ptr>(); 0085 MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc())); 0086 SimpleObserver ob(cal.data()); 0087 QSignalSpy spy(&ob, &SimpleObserver::incidenceChanged); 0088 cal->registerObserver(&ob); 0089 Event::Ptr event1 = Event::Ptr(new Event()); 0090 event1->setUid(QStringLiteral("1")); 0091 cal->addEvent(event1); 0092 QCOMPARE(spy.count(), 0); 0093 0094 event1->setDescription(QStringLiteral("desc")); 0095 QCOMPARE(spy.count(), 1); 0096 QList<QVariant> arguments = spy.takeFirst(); 0097 QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1)); 0098 } 0099 0100 void CalendarObserverTest::testDelete() 0101 { 0102 qRegisterMetaType<KCalendarCore::Incidence::Ptr>(); 0103 qRegisterMetaType<const Calendar *>(); 0104 MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc())); 0105 SimpleObserver ob(cal.data()); 0106 QSignalSpy spy1(&ob, &SimpleObserver::incidenceAboutToBeDeleted); 0107 QSignalSpy spy2(&ob, &SimpleObserver::incidenceDeleted); 0108 cal->registerObserver(&ob); 0109 Event::Ptr event1 = Event::Ptr(new Event()); 0110 event1->setUid(QStringLiteral("1")); 0111 cal->addEvent(event1); 0112 QCOMPARE(spy1.count(), 0); 0113 QCOMPARE(spy2.count(), 0); 0114 0115 cal->deleteEvent(event1); 0116 QCOMPARE(spy1.count(), 1); 0117 QCOMPARE(spy2.count(), 1); 0118 QList<QVariant> arguments = spy1.takeFirst(); 0119 QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1)); 0120 arguments = spy2.takeFirst(); 0121 QCOMPARE(arguments.at(0).value<KCalendarCore::Incidence::Ptr>(), static_cast<KCalendarCore::Incidence::Ptr>(event1)); 0122 QCOMPARE(arguments.at(1).value<const Calendar *>(), cal.data()); 0123 } 0124 0125 #include "moc_testcalendarobserver.cpp" 0126 #include "testcalendarobserver.moc"