aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2013-10-09 21:31:13 -0500
committerCharles Kerr <charles.kerr@canonical.com>2013-10-09 21:31:13 -0500
commitb6b0c140f922385d947fa12dfff179a5491a1722 (patch)
tree0aee8ab69c609744b24d68b462c1c1e078713528
parentc8a8c56f668f50e5cdeff5255ec74e82e3af7e32 (diff)
downloadayatana-indicator-datetime-b6b0c140f922385d947fa12dfff179a5491a1722.tar.gz
ayatana-indicator-datetime-b6b0c140f922385d947fa12dfff179a5491a1722.tar.bz2
ayatana-indicator-datetime-b6b0c140f922385d947fa12dfff179a5491a1722.zip
add a preliminary mock planner for testing alarms/appointments isolated apart from the EDS backend
-rw-r--r--src/Makefile.am2
-rw-r--r--src/main.c11
-rw-r--r--src/planner-mock.c178
-rw-r--r--src/planner-mock.h58
4 files changed, 248 insertions, 1 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 093a258..640650a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -20,6 +20,8 @@ libindicator_datetime_service_a_CFLAGS = \
libindicator_datetime_service_a_SOURCES = \
planner.c \
planner.h \
+ planner-mock.c \
+ planner-mock.h \
planner-eds.c \
planner-eds.h \
service.c \
diff --git a/src/main.c b/src/main.c
index 710db66..073c876 100644
--- a/src/main.c
+++ b/src/main.c
@@ -26,6 +26,7 @@
#include <gio/gio.h>
#include "planner-eds.h"
+#include "planner-mock.h"
#include "service.h"
/***
@@ -52,7 +53,15 @@ main (int argc G_GNUC_UNUSED, char ** argv G_GNUC_UNUSED)
textdomain (GETTEXT_PACKAGE);
/* get the planner */
- planner = indicator_datetime_planner_eds_new ();
+ if (g_getenv ("INDICATOR_DATETIME_USE_FAKE_PLANNER") != NULL)
+ {
+ g_message ("Using fake appointment book for testing");
+ planner = indicator_datetime_planner_mock_new ();
+ }
+ else
+ {
+ planner = indicator_datetime_planner_eds_new ();
+ }
/* run */
service = indicator_datetime_service_new (planner);
diff --git a/src/planner-mock.c b/src/planner-mock.c
new file mode 100644
index 0000000..e67ad7e
--- /dev/null
+++ b/src/planner-mock.c
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Authors:
+ * Charles Kerr <charles.kerr@canonical.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3, as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranties of
+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include "planner-mock.h"
+
+struct _IndicatorDatetimePlannerMockPriv
+{
+ gboolean is_configured;
+};
+
+typedef IndicatorDatetimePlannerMockPriv priv_t;
+
+G_DEFINE_TYPE (IndicatorDatetimePlannerMock,
+ indicator_datetime_planner_mock,
+ INDICATOR_TYPE_DATETIME_PLANNER)
+
+/***
+**** IndicatorDatetimePlanner virtual funcs
+***/
+
+static void
+my_get_appointments (IndicatorDatetimePlanner * planner,
+ GDateTime * begin_datetime,
+ GDateTime * end_datetime G_GNUC_UNUSED,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask * task;
+ GSList * appointments;
+ struct IndicatorDatetimeAppt * appt;
+ struct IndicatorDatetimeAppt * prev;
+
+ task = g_task_new (planner, NULL, callback, user_data);
+
+ /**
+ *** Build the appointments list
+ **/
+
+ appointments = NULL;
+
+ /* add a daily appointment that occurs at the beginning of the next minute */
+ appt = g_slice_new0 (struct IndicatorDatetimeAppt);
+ appt->is_daily = TRUE;
+ appt->begin = g_date_time_add_seconds (begin_datetime, 60-g_date_time_get_seconds(begin_datetime));
+ appt->end = g_date_time_add_minutes (appt->begin, 1);
+ appt->color = g_strdup ("#00FF00");
+ appt->is_event = TRUE;
+ appt->summary = g_strdup ("Daily alarm");
+ appt->uid = g_strdup ("this uid isn't very random.");
+ appt->has_alarms = TRUE;
+ appt->url = g_strdup ("alarm:///some-alarm-info-goes-here");
+ appointments = g_slist_prepend (appointments, appt);
+ prev = appt;
+
+ /* and add one for a minute later that has an alarm uri */
+ appt = g_slice_new0 (struct IndicatorDatetimeAppt);
+ appt->is_daily = TRUE;
+ appt->begin = g_date_time_add_minutes (prev->end, 1);
+ appt->end = g_date_time_add_minutes (appt->begin, 1);
+ appt->color = g_strdup ("#0000FF");
+ appt->is_event = TRUE;
+ appt->summary = g_strdup ("Second Daily alarm");
+ appt->uid = g_strdup ("this uid isn't very random either.");
+ appt->has_alarms = FALSE;
+ appointments = g_slist_prepend (appointments, appt);
+
+ /* done */
+ g_task_return_pointer (task, appointments, NULL);
+ g_object_unref (task);
+}
+
+static GSList *
+my_get_appointments_finish (IndicatorDatetimePlanner * self G_GNUC_UNUSED,
+ GAsyncResult * res,
+ GError ** error)
+{
+ return g_task_propagate_pointer (G_TASK(res), error);
+}
+
+static gboolean
+my_is_configured (IndicatorDatetimePlanner * planner)
+{
+ IndicatorDatetimePlannerMock * self;
+ self = INDICATOR_DATETIME_PLANNER_MOCK (planner);
+ return self->priv->is_configured;
+}
+
+static void
+my_activate (IndicatorDatetimePlanner * self G_GNUC_UNUSED)
+{
+ g_message ("%s %s", G_STRLOC, G_STRFUNC);
+}
+
+static void
+my_activate_time (IndicatorDatetimePlanner * self G_GNUC_UNUSED,
+ GDateTime * activate_time)
+{
+ gchar * str = g_date_time_format (activate_time, "%F %T");
+ g_message ("%s %s: %s", G_STRLOC, G_STRFUNC, str);
+ g_free (str);
+}
+
+/***
+**** GObject virtual funcs
+***/
+
+static void
+my_dispose (GObject * o)
+{
+ G_OBJECT_CLASS (indicator_datetime_planner_mock_parent_class)->dispose (o);
+}
+
+/***
+**** Instantiation
+***/
+
+static void
+indicator_datetime_planner_mock_class_init (IndicatorDatetimePlannerMockClass * klass)
+{
+ GObjectClass * object_class;
+ IndicatorDatetimePlannerClass * planner_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = my_dispose;
+
+ planner_class = INDICATOR_DATETIME_PLANNER_CLASS (klass);
+ planner_class->is_configured = my_is_configured;
+ planner_class->activate = my_activate;
+ planner_class->activate_time = my_activate_time;
+ planner_class->get_appointments = my_get_appointments;
+ planner_class->get_appointments_finish = my_get_appointments_finish;
+
+ g_type_class_add_private (klass, sizeof (IndicatorDatetimePlannerMockPriv));
+}
+
+static void
+indicator_datetime_planner_mock_init (IndicatorDatetimePlannerMock * self)
+{
+ priv_t * p;
+
+ p = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ INDICATOR_TYPE_DATETIME_PLANNER_MOCK,
+ IndicatorDatetimePlannerMockPriv);
+
+ p->is_configured = TRUE;
+
+ self->priv = p;
+}
+
+/***
+**** Public
+***/
+
+IndicatorDatetimePlanner *
+indicator_datetime_planner_mock_new (void)
+{
+ gpointer o = g_object_new (INDICATOR_TYPE_DATETIME_PLANNER_MOCK, NULL);
+
+ return INDICATOR_DATETIME_PLANNER (o);
+}
diff --git a/src/planner-mock.h b/src/planner-mock.h
new file mode 100644
index 0000000..8d7d7c2
--- /dev/null
+++ b/src/planner-mock.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2013 Canonical Ltd.
+ *
+ * Authors:
+ * Charles Kerr <charles.kerr@canonical.com>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3, as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranties of
+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __INDICATOR_DATETIME_PLANNER_MOCK__H__
+#define __INDICATOR_DATETIME_PLANNER_MOCK__H__
+
+#include "planner.h" /* parent class */
+
+G_BEGIN_DECLS
+
+#define INDICATOR_TYPE_DATETIME_PLANNER_MOCK (indicator_datetime_planner_mock_get_type())
+#define INDICATOR_DATETIME_PLANNER_MOCK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), INDICATOR_TYPE_DATETIME_PLANNER_MOCK, IndicatorDatetimePlannerMock))
+#define INDICATOR_DATETIME_PLANNER_MOCK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), INDICATOR_TYPE_DATETIME_PLANNER_MOCK, IndicatorDatetimePlannerMockClass))
+#define INDICATOR_IS_DATETIME_PLANNER_MOCK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), INDICATOR_TYPE_DATETIME_PLANNER_MOCK))
+
+typedef struct _IndicatorDatetimePlannerMock IndicatorDatetimePlannerMock;
+typedef struct _IndicatorDatetimePlannerMockPriv IndicatorDatetimePlannerMockPriv;
+typedef struct _IndicatorDatetimePlannerMockClass IndicatorDatetimePlannerMockClass;
+
+GType indicator_datetime_planner_mock_get_type (void);
+
+/**
+ * An IndicatorDatetimePlanner which uses Evolution Data Server
+ * to get its list of appointments.
+ */
+struct _IndicatorDatetimePlannerMock
+{
+ /*< private >*/
+ IndicatorDatetimePlanner parent;
+ IndicatorDatetimePlannerMockPriv * priv;
+};
+
+struct _IndicatorDatetimePlannerMockClass
+{
+ IndicatorDatetimePlannerClass parent_class;
+};
+
+IndicatorDatetimePlanner * indicator_datetime_planner_mock_new (void);
+
+G_END_DECLS
+
+#endif /* __INDICATOR_DATETIME_PLANNER_MOCK__H__ */