2 commits - calendaring/calendaring.i calendaring/CMakeLists.txt calendaring/event.cpp calendaring/event.h calendaring/python CMakeLists.txt icalendar/CMakeLists.txt icalendar/icalendar.cpp icalendar/icalendar.h icalendar/icalendar.i icalendar/python tests/CMakeLists.txt tests/icalendartest.cpp tests/icalendartest.h tests/testhelpers.h
Christian Mollekopf
mollekopf at kolabsys.com
Thu May 24 14:12:08 CEST 2012
CMakeLists.txt | 3 -
calendaring/CMakeLists.txt | 4 +
calendaring/calendaring.i | 12 +++-
calendaring/event.cpp | 49 +++++++++++++++++++
calendaring/event.h | 45 +++++++++++++++++
calendaring/python/CMakeLists.txt | 2
icalendar/CMakeLists.txt | 8 +++
icalendar/icalendar.cpp | 98 ++++++++++++++++++++++++++++++++++++++
icalendar/icalendar.h | 67 +++++++++++++++++++++++++
icalendar/icalendar.i | 19 +++++++
icalendar/python/CMakeLists.txt | 46 +++++++++++++++++
tests/CMakeLists.txt | 4 +
tests/icalendartest.cpp | 55 +++++++++++++++++++++
tests/icalendartest.h | 35 +++++++++++++
tests/testhelpers.h | 3 +
15 files changed, 445 insertions(+), 5 deletions(-)
New commits:
commit baded7f26f9a60c8eed4bc0618ed0a99b92cb3b8
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Thu May 24 14:12:00 2012 +0200
First version of an advanced event class, which can do a bit more than just being a container.
diff --git a/calendaring/CMakeLists.txt b/calendaring/CMakeLists.txt
index 1d6db75..28a4e97 100644
--- a/calendaring/CMakeLists.txt
+++ b/calendaring/CMakeLists.txt
@@ -1,5 +1,7 @@
set (CALENDARING_SRCS
- ${CMAKE_CURRENT_SOURCE_DIR}/calendaring.cpp PARENT_SCOPE)
+ ${CMAKE_CURRENT_SOURCE_DIR}/calendaring.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
+ PARENT_SCOPE)
if(PYTHON_BINDINGS)
message("building python bindings")
diff --git a/calendaring/calendaring.i b/calendaring/calendaring.i
index e9c986e..2cedb2c 100644
--- a/calendaring/calendaring.i
+++ b/calendaring/calendaring.i
@@ -5,7 +5,10 @@
/* This macro ensures that return vectors remain a vector also in python and are not converted to tuples */
#define SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS
- #include "calendaring.h"
+ #include <kolabcontainers.h>
+ #include <kolabevent.h>
+ #include "../calendaring/calendaring.h"
+ #include "../calendaring/event.h"
%}
%include "std_string.i"
@@ -17,4 +20,9 @@ namespace std {
/*%apply const std::string& {std::string* foo};*/
-%include "calendaring.h"
+%rename(EventXML) Kolab::Event;
+
+%include "kolabcontainers.h"
+%include "kolabevent.h"
+%include "../calendaring/calendaring.h"
+%include "../calendaring/event.h"
diff --git a/calendaring/event.cpp b/calendaring/event.cpp
new file mode 100644
index 0000000..7a6cf24
--- /dev/null
+++ b/calendaring/event.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2012 Christian Mollekopf <mollekopf at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "event.h"
+
+#include <iostream>
+#include <kolabformat.h>
+
+namespace Kolab {
+ namespace Calendaring {
+
+Event::Event()
+: Kolab::Event()
+{
+ setUid(Kolab::generateUID());
+}
+
+bool Event::read(const std::string &string)
+{
+ const Kolab::Event &e = Kolab::readEvent(string, false);
+ if (Kolab::error()) {
+ return false;
+ }
+ Kolab::Event::operator=(e);
+ return true;
+}
+
+std::string Event::write() const
+{
+ return Kolab::writeEvent(*this);
+}
+
+ };
+};
diff --git a/calendaring/event.h b/calendaring/event.h
new file mode 100644
index 0000000..3c0e99d
--- /dev/null
+++ b/calendaring/event.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2012 Christian Mollekopf <mollekopf at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef EVENT_H
+#define EVENT_H
+#include <kolabevent.h>
+
+#ifndef SWIG
+#include "kolab_export.h"
+#else
+/* No export/import SWIG interface files */
+#define KOLAB_EXPORT
+#endif
+
+namespace Kolab {
+ namespace Calendaring {
+
+class KOLAB_EXPORT Event: public Kolab::Event
+{
+public:
+ Event();
+
+ bool read(const std::string &);
+ std::string write() const;
+};
+
+ };
+};
+
+#endif // EVENT_H
diff --git a/calendaring/python/CMakeLists.txt b/calendaring/python/CMakeLists.txt
index 4743335..9891fa9 100644
--- a/calendaring/python/CMakeLists.txt
+++ b/calendaring/python/CMakeLists.txt
@@ -15,7 +15,7 @@ set(KOLAB_SWIG_PYTHON_SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/python_calendaring
set(KOLAB_SWIG_PYTHON_HEADER_FILE ${CMAKE_CURRENT_BINARY_DIR}/calendaring.py)
add_custom_command(OUTPUT ${KOLAB_SWIG_PYTHON_SOURCE_FILE} ${KOLAB_SWIG_PYTHON_HEADER_FILE}
- COMMAND ${SWIG} -v -c++ -python -o ${KOLAB_SWIG_PYTHON_SOURCE_FILE} ../calendaring.i
+ COMMAND ${SWIG} -v -c++ -python -I${Libkolabxml_INCLUDES} -o ${KOLAB_SWIG_PYTHON_SOURCE_FILE} ../calendaring.i
COMMENT "Generating python bindings"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ../calendaring.i kolab
commit 9843073edb60c57f047b006e6fa51fb1c7180b45
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Mon May 21 18:57:50 2012 +0200
iCalendar reading writing through kcalcore with bindings.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2e88b78..81ef942 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,8 +65,9 @@ configure_file(libkolab-version.h.cmake "${CMAKE_BINARY_DIR}/libkolab-version.h"
add_subdirectory(kolabformatV2)
add_subdirectory(conversion)
add_subdirectory(calendaring)
+add_subdirectory(icalendar)
-set(KOLAB_SRCS kolabformat/kolabobject.cpp kolabformat/errorhandler.cpp mime/mimeutils.cpp ${CONVERSION_SRCS} ${kolabformatv2_SRCS} ${CALENDARING_SRCS})
+set(KOLAB_SRCS kolabformat/kolabobject.cpp kolabformat/errorhandler.cpp mime/mimeutils.cpp ${CONVERSION_SRCS} ${kolabformatv2_SRCS} ${CALENDARING_SRCS} ${ICALENDAR_SRCS})
set(KOLAB_LINK_LIBRARIES ${Libkolabxml_LIBRARIES} ${KDEPIMLIBS_KCALCORE_LIBS} ${KDEPIMLIBS_KABC_LIBS} ${KDEPIMLIBS_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_AKONADI_NOTES_LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTGUI_LIBRARY} ${KDE4_KDECORE_LIBRARY} ${KDE4_KIO_LIBRARY})
if(BUILD_TESTS)
#for tests only
diff --git a/icalendar/CMakeLists.txt b/icalendar/CMakeLists.txt
new file mode 100644
index 0000000..b82684f
--- /dev/null
+++ b/icalendar/CMakeLists.txt
@@ -0,0 +1,8 @@
+
+set (ICALENDAR_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/icalendar.cpp PARENT_SCOPE)
+
+if(PYTHON_BINDINGS)
+ message("building python bindings")
+ add_subdirectory(python)
+endif(PYTHON_BINDINGS)
\ No newline at end of file
diff --git a/icalendar/icalendar.cpp b/icalendar/icalendar.cpp
new file mode 100644
index 0000000..5e0f15a
--- /dev/null
+++ b/icalendar/icalendar.cpp
@@ -0,0 +1,98 @@
+/*
+ <one line to give the library's name and an idea of what it does.>
+ Copyright (C) 2012 Christian Mollekopf <chrigi_1 at fastmail.fm>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#include "icalendar.h"
+#include <conversion/kcalconversion.h>
+#include <conversion/commonconversion.h>
+#include <KCalCore/Event>
+#include <kcalcore/memorycalendar.h>
+#include <kcalcore/icalformat.h>
+
+#include <QDebug>
+
+namespace Kolab {
+
+std::string toICal(const std::vector<Event> &events)
+{
+ KCalCore::Calendar::Ptr calendar(new KCalCore::MemoryCalendar(Kolab::Conversion::getTimeSpec(true, std::string())));
+ foreach (const Event &event, events) {
+ KCalCore::Event::Ptr kcalEvent = Conversion::toKCalCore(event);
+ kcalEvent->setCreated(KDateTime::currentUtcDateTime()); //sets dtstamp
+ calendar->addEvent(kcalEvent);
+ }
+ KCalCore::ICalFormat format;
+// qDebug() << format.createScheduleMessage(calendar->events().first(), KCalCore::iTIPRequest);
+
+ return format.toString(calendar).toStdString();
+
+}
+
+std::vector< Event > fromICalEvents(const std::string &input)
+{
+ KCalCore::Calendar::Ptr calendar(new KCalCore::MemoryCalendar(Kolab::Conversion::getTimeSpec(true, std::string())));
+ KCalCore::ICalFormat format;
+ format.fromString(calendar, QString::fromStdString(input));
+ std::vector<Event> events;
+ foreach (const KCalCore::Event::Ptr &event, calendar->events()) {
+ events.push_back(Conversion::fromKCalCore(*event));
+ }
+ return events;
+}
+
+
+std::string ITipHandler::toITip(const Event &event, ITipHandler::ITipMethod method)
+{
+ KCalCore::ICalFormat format;
+ KCalCore::iTIPMethod m;
+ switch (method) {
+ case ITipHandler::iTIPRequest:
+ m = KCalCore::iTIPRequest;
+ break;
+ default:
+ qWarning() << "unsupported itip method";
+ }
+ return format.createScheduleMessage(Conversion::toKCalCore(event), m).toStdString();
+}
+
+std::vector< Event > ITipHandler::fromITip(const std::string &string)
+{
+ KCalCore::Calendar::Ptr calendar(new KCalCore::MemoryCalendar(Kolab::Conversion::getTimeSpec(true, std::string())));
+ KCalCore::ICalFormat format;
+ KCalCore::ScheduleMessage::Ptr msg= format.parseScheduleMessage(calendar, QString::fromStdString(string));
+ std::vector< Event > events;
+ events.push_back(Conversion::fromKCalCore(*(msg->event().dynamicCast<KCalCore::Event>())));
+ switch (msg->method()) {
+ case KCalCore::iTIPRequest:
+ mMethod = ITipHandler::iTIPRequest;
+ break;
+ default:
+ mMethod = ITipHandler::iTipUnknown;
+ qWarning() << "unsupported itip method";
+ }
+ return events;
+}
+
+ITipHandler::ITipMethod ITipHandler::method() const
+{
+ return mMethod;
+}
+
+
+}
diff --git a/icalendar/icalendar.h b/icalendar/icalendar.h
new file mode 100644
index 0000000..395d673
--- /dev/null
+++ b/icalendar/icalendar.h
@@ -0,0 +1,67 @@
+/*
+ <one line to give the library's name and an idea of what it does.>
+ Copyright (C) 2012 Christian Mollekopf <chrigi_1 at fastmail.fm>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#ifndef ICALENDAR_H
+#define ICALENDAR_H
+
+#ifndef SWIG
+#include "kolab_export.h"
+#else
+/* No export/import SWIG interface files */
+#define KOLAB_EXPORT
+#endif
+
+#include <kolabevent.h>
+
+namespace Kolab {
+
+ /**
+ * Takes a list of events and writes them to an iCal object.
+ *
+ */
+ KOLAB_EXPORT std::string toICal(const std::vector<Kolab::Event> &);
+ /**
+ * Takes an iCal object and returns the contained events.
+ */
+ KOLAB_EXPORT std::vector<Kolab::Event> fromICalEvents(const std::string &);
+
+ class KOLAB_EXPORT ITipHandler {
+ public:
+ enum ITipMethod {
+ iTipUnknown,
+ iTIPRequest
+ };
+ /**
+ * Create iTip message from single event (only request supported so far)
+ */
+ std::string toITip(const Kolab::Event &, ITipMethod);
+
+ /**
+ * Parse iTip message with a single event (only request supported so far)
+ */
+ std::vector<Kolab::Event> fromITip(const std::string &);
+ ITipMethod method() const;
+ private:
+ ITipMethod mMethod;
+ };
+
+}
+
+#endif // ICALENDAR_H
diff --git a/icalendar/icalendar.i b/icalendar/icalendar.i
new file mode 100644
index 0000000..44d8c81
--- /dev/null
+++ b/icalendar/icalendar.i
@@ -0,0 +1,19 @@
+/* icalendar.i */
+%module icalendar
+%{
+
+ /* This macro ensures that return vectors remain a vector also in python and are not converted to tuples */
+ #define SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS
+
+ #include "icalendar.h"
+%}
+
+%include "std_string.i"
+%include "std_vector.i"
+
+namespace std {
+ %template(vectordatetime) vector<Kolab::cDateTime>;
+ %template(vectorevent) vector<Kolab::Event>;
+};
+
+%include "icalendar.h"
\ No newline at end of file
diff --git a/icalendar/python/CMakeLists.txt b/icalendar/python/CMakeLists.txt
new file mode 100644
index 0000000..a2bd011
--- /dev/null
+++ b/icalendar/python/CMakeLists.txt
@@ -0,0 +1,46 @@
+include_directories(../)
+find_package(SWIG REQUIRED)
+
+# Compile Python Bindings
+
+find_package(PythonLibs)
+
+if (NOT PYTHONLIBS_FOUND)
+ message("python libs not found, not building python bindings")
+ return()
+endif()
+message("found python include dirs: ${PYTHON_INCLUDE_DIRS} ${PYTHON_INCLUDE_PATH}")
+
+set(KOLAB_SWIG_PYTHON_SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/python_icalendar_wrapper.cpp)
+set(KOLAB_SWIG_PYTHON_HEADER_FILE ${CMAKE_CURRENT_BINARY_DIR}/icalendar.py)
+
+add_custom_command(OUTPUT ${KOLAB_SWIG_PYTHON_SOURCE_FILE} ${KOLAB_SWIG_PYTHON_HEADER_FILE}
+ COMMAND ${SWIG} -v -c++ -python -o ${KOLAB_SWIG_PYTHON_SOURCE_FILE} ../icalendar.i
+ COMMENT "Generating python bindings"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ../icalendar.i kolab
+ VERBATIM
+ )
+
+SET_SOURCE_FILES_PROPERTIES(${KOLAB_SWIG_PYTHON_SOURCE_FILE} PROPERTIES GENERATED 1)
+
+#${PYTHON_INCLUDE_PATH} is for backwards compatibility (el6)
+include_directories(${PYTHON_INCLUDE_DIRS} ${PYTHON_INCLUDE_PATH})
+
+set(PYTHON_MODULE_PREFIX "_")
+python_add_module(icalendar ${KOLAB_SWIG_PYTHON_SOURCE_FILE})
+
+#cmake 2.6.4 fails to respect the module prefix
+SET_TARGET_PROPERTIES(icalendar PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}")
+
+target_link_libraries(icalendar kolab ${PYTHON_LIBRARIES})
+
+set(PYTHON_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/pythonbindings" CACHE STRING "Install directory for python bindings.")
+
+install(TARGETS icalendar LIBRARY DESTINATION ${PYTHON_INSTALL_DIR})
+
+install( FILES
+ ${KOLAB_SWIG_PYTHON_HEADER_FILE}
+ DESTINATION ${PYTHON_INSTALL_DIR}
+ )
+
\ No newline at end of file
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 7a87fc2..2f1f80e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -20,3 +20,7 @@ target_link_libraries(kcalconversiontest ${QT_QTTEST_LIBRARY} kolab_static)
QT4_AUTOMOC(calendaringtest.cpp)
add_executable(calendaringtest calendaringtest.cpp ${CMAKE_CURRENT_BINARY_DIR}/${BINDINGSTEST_MOC})
target_link_libraries(calendaringtest ${QT_QTTEST_LIBRARY} kolab_static)
+
+QT4_AUTOMOC(icalendartest.cpp)
+add_executable(icalendartest icalendartest.cpp ${CMAKE_CURRENT_BINARY_DIR}/${BINDINGSTEST_MOC})
+target_link_libraries(icalendartest ${QT_QTTEST_LIBRARY} kolab_static)
\ No newline at end of file
diff --git a/tests/icalendartest.cpp b/tests/icalendartest.cpp
new file mode 100644
index 0000000..8be697b
--- /dev/null
+++ b/tests/icalendartest.cpp
@@ -0,0 +1,55 @@
+/*
+ <one line to give the library's name and an idea of what it does.>
+ Copyright (C) 2012 Christian Mollekopf <chrigi_1 at fastmail.fm>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#include "icalendartest.h"
+
+#include <QTest>
+#include <kolabevent.h>
+
+#include "icalendar/icalendar.h"
+
+#include "testhelpers.h"
+
+void ICalendarTest::testFromICalEvent()
+{
+ std::vector<Kolab::Event> events;
+ Kolab::Event ev1;
+ ev1.setStart(Kolab::cDateTime(2011,10,10,12,1,1,true));
+ ev1.setEnd(Kolab::cDateTime(2011,10,11,12,1,1,true));
+ events.push_back(ev1);
+ events.push_back(ev1);
+ const std::vector<Kolab::Event> &result = Kolab::fromICalEvents(Kolab::toICal(events));
+ qDebug() << QString::fromStdString(Kolab::toICal(result));
+}
+
+void ICalendarTest::testToICal()
+{
+ std::vector<Kolab::Event> events;
+ Kolab::Event ev1;
+ ev1.setStart(Kolab::cDateTime(2011,10,10,12,1,1,true));
+ ev1.setEnd(Kolab::cDateTime(2011,10,11,12,1,1,true));
+ events.push_back(ev1);
+ events.push_back(ev1);
+ qDebug() << QString::fromStdString(Kolab::toICal(events));
+}
+
+QTEST_MAIN( ICalendarTest )
+
+#include "icalendartest.moc"
diff --git a/tests/icalendartest.h b/tests/icalendartest.h
new file mode 100644
index 0000000..b3e4166
--- /dev/null
+++ b/tests/icalendartest.h
@@ -0,0 +1,35 @@
+/*
+ <one line to give the library's name and an idea of what it does.>
+ Copyright (C) 2012 Christian Mollekopf <chrigi_1 at fastmail.fm>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#ifndef ICALENDARTEST_H
+#define ICALENDARTEST_H
+#include <QObject>
+
+class ICalendarTest: public QObject
+{
+ Q_OBJECT
+private slots:
+
+// void testEventConflict_data();
+ void testToICal();
+ void testFromICalEvent();
+};
+
+#endif // ICALENDARTEST_H
diff --git a/tests/testhelpers.h b/tests/testhelpers.h
index eece883..8dd7b35 100644
--- a/tests/testhelpers.h
+++ b/tests/testhelpers.h
@@ -23,6 +23,9 @@
#include <QtCore/QObject>
#include <QtTest/QtTest>
#include <kcalcore/recurrence.h>
+#include <kcalcore/event.h>
+#include <kcalcore/todo.h>
+#include <kcalcore/journal.h>
#include <kabc/addressee.h>
#include <kolabformat.h>
More information about the commits
mailing list