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