From 7577ad720a9183b1a56217aeaaef01f763c11bc7 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 May 2015 18:23:32 -0500 Subject: Add an EDS test for nonrepeating alarms. Refactor the EDS testing structure slightly so that more of the basic config setup can be shared. --- tests/CMakeLists.txt | 28 +++--- tests/run-eds-ics-test.sh | 67 ++++++++++++++ tests/run-eds-test.sh | 60 ------------ .../.config/evolution/sources/system-proxy.source | 21 +++++ tests/test-eds-ics-nonrepeating-events.cpp | 93 +++++++++++++++++++ tests/test-eds-ics-nonrepeating-events.ics | 27 ++++++ tests/test-eds-ics-repeating-events.cpp | 100 ++++++++++++++++++++ tests/test-eds-ics-repeating-events.ics | 28 ++++++ tests/test-eds-ics-repeating-valarms.cpp | 101 +++++++++++++++++++++ tests/test-eds-ics-repeating-valarms.ics | 47 ++++++++++ .../.config/evolution/sources/system-proxy.source | 21 ----- .../.local/share/evolution/tasks/system/tasks.ics | 28 ------ tests/test-eds-tasks.cpp | 100 -------------------- .../.config/evolution/sources/system-proxy.source | 21 ----- .../share/evolution/calendar/system/calendar.ics | 47 ---------- tests/test-eds-valarms.cpp | 101 --------------------- 16 files changed, 498 insertions(+), 392 deletions(-) create mode 100755 tests/run-eds-ics-test.sh delete mode 100755 tests/run-eds-test.sh create mode 100644 tests/test-eds-ics-config-files/.config/evolution/sources/system-proxy.source create mode 100644 tests/test-eds-ics-nonrepeating-events.cpp create mode 100644 tests/test-eds-ics-nonrepeating-events.ics create mode 100644 tests/test-eds-ics-repeating-events.cpp create mode 100644 tests/test-eds-ics-repeating-events.ics create mode 100644 tests/test-eds-ics-repeating-valarms.cpp create mode 100644 tests/test-eds-ics-repeating-valarms.ics delete mode 100644 tests/test-eds-tasks-config-files/.config/evolution/sources/system-proxy.source delete mode 100644 tests/test-eds-tasks-config-files/.local/share/evolution/tasks/system/tasks.ics delete mode 100644 tests/test-eds-tasks.cpp delete mode 100644 tests/test-eds-valarms-config-files/.config/evolution/sources/system-proxy.source delete mode 100644 tests/test-eds-valarms-config-files/.local/share/evolution/calendar/system/calendar.ics delete mode 100644 tests/test-eds-valarms.cpp (limited to 'tests') diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ecbda42..d0b88b2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -78,25 +78,25 @@ if(NOT EVOLUTION_SOURCE_SERVICE_NAME) set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources3") endif() -function(add_eds_test_by_name name) +function(add_eds_ics_test_by_name name) set (TEST_NAME ${name}) add_executable(${TEST_NAME} ${TEST_NAME}.cpp gschemas.compiled) target_link_libraries (${TEST_NAME} indicatordatetimeservice gtest ${DBUSTEST_LIBRARIES} ${SERVICE_DEPS_LIBRARIES} ${GTEST_LIBS}) add_test (${TEST_NAME} - ${CMAKE_CURRENT_SOURCE_DIR}/run-eds-test.sh - ${DBUS_RUNNER} # arg1: dbus-test-runner exec - ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} # arg2: test executable path - ${TEST_NAME} # arg3: test name - ${EVOLUTION_CALENDAR_FACTORY} # arg4: evolution-calendar-factory exec - ${EVOLUTION_SOURCE_SERVICE_NAME} # arg5: dbus name for source registry - ${EVOLUTION_SOURCE_REGISTRY} # arg6: evolution-source-registry exec - ${GVFSD} # arg7: gvfsd exec - ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-config-files) # arg8: canned config files + ${CMAKE_CURRENT_SOURCE_DIR}/run-eds-ics-test.sh + ${DBUS_RUNNER} # arg1: dbus-test-runner exec + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} # arg2: test executable path + ${TEST_NAME} # arg3: test name + ${EVOLUTION_CALENDAR_FACTORY} # arg4: evolution-calendar-factory exec + ${EVOLUTION_SOURCE_SERVICE_NAME} # arg5: dbus name for source registry + ${EVOLUTION_SOURCE_REGISTRY} # arg6: evolution-source-registry exec + ${GVFSD} # arg7: gvfsd exec + ${CMAKE_CURRENT_SOURCE_DIR}/test-eds-ics-config-files # arg8: base directory for config file template + ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}.ics) # arg9: the ical file for this test endfunction() -add_eds_test_by_name(test-eds-tasks) -#add_eds_test_by_name(test-eds-valarms) - - +add_eds_ics_test_by_name(test-eds-ics-repeating-events) +add_eds_ics_test_by_name(test-eds-ics-nonrepeating-events) +add_eds_ics_test_by_name(test-eds-ics-repeating-valarms) # disabling the timezone unit tests because they require diff --git a/tests/run-eds-ics-test.sh b/tests/run-eds-ics-test.sh new file mode 100755 index 0000000..0eeafad --- /dev/null +++ b/tests/run-eds-ics-test.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +echo ARG0=$0 # this script +echo ARG1=$1 # full executable path of dbus-test-runner +echo ARG2=$2 # full executable path of test app +echo ARG3=$3 # test name +echo ARG4=$4 # full executable path of evolution-calendar-factory +echo ARG5=$5 # bus service name of calendar factory +echo ARG6=$6 # full exectuable path of evolution-source-registry +echo ARG7=$7 # full executable path of gvfs +echo ARG8=$8 # config files +echo ARG8=$9 # ics file + +# set up the tmpdir and tell the shell to purge it when we exit +export TEST_TMP_DIR=$(mktemp -p "${TMPDIR:-/tmp}" -d $3-XXXXXXXXXX) || exit 1 +echo "running test '$3' in ${TEST_TMP_DIR}" + +# set up the environment variables +export QT_QPA_PLATFORM=minimal +export HOME=${TEST_TMP_DIR} +export XDG_RUNTIME_DIR=${TEST_TMP_DIR} +export XDG_CACHE_HOME=${TEST_TMP_DIR}/.cache +export XDG_CONFIG_HOME=${TEST_TMP_DIR}/.config +export XDG_DATA_HOME=${TEST_TMP_DIR}/.local/share +export XDG_DESKTOP_DIR=${TEST_TMP_DIR} +export XDG_DOCUMENTS_DIR=${TEST_TMP_DIR} +export XDG_DOWNLOAD_DIR=${TEST_TMP_DIR} +export XDG_MUSIC_DIR=${TEST_TMP_DIR} +export XDG_PICTURES_DIR=${TEST_TMP_DIR} +export XDG_PUBLICSHARE_DIR=${TEST_TMP_DIR} +export XDG_TEMPLATES_DIR=${TEST_TMP_DIR} +export XDG_VIDEOS_DIR=${TEST_TMP_DIR} +export QORGANIZER_EDS_DEBUG=On +export GIO_USE_VFS=local # needed to ensure GVFS shuts down cleanly after the test is over + +export G_MESSAGES_DEBUG=all +export G_DBUS_DEBUG=messages + +echo HOMEDIR=${HOME} +rm -rf ${XDG_DATA_HOME} + +# if there are canned config files for this test, move them into place now +if [ -d $8 ]; then + echo "copying files from $8 to $HOME" + cp --verbose --archive $8/. $HOME +fi + +# if there's a specific ics file to test, copy it on top of the canned confilg files +if [ -e $9 ]; then + echo "copying $9 into $HOME" + cp --verbose --archive $9 $HOME/.local/share/evolution/tasks/system/tasks.ics +fi + +# run dbus-test-runner +$1 --keep-env --max-wait=90 \ +--task $2 --task-name $3 --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 \ +--task $4 --task-name "evolution" --wait-until-complete -r +#--task $6 --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r \ +#--task $7 --task-name "gvfsd" -r +rv=$? + +# if the test passed, blow away the tmpdir +if [ $rv -eq 0 ]; then + rm -rf $TEST_TMP_DIR +fi + +return $rv diff --git a/tests/run-eds-test.sh b/tests/run-eds-test.sh deleted file mode 100755 index a9eceed..0000000 --- a/tests/run-eds-test.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/sh - -echo ARG0=$0 # this script -echo ARG1=$1 # full executable path of dbus-test-runner -echo ARG2=$2 # full executable path of test app -echo ARG3=$3 # test name -echo ARG4=$4 # full executable path of evolution-calendar-factory -echo ARG5=$5 # bus service name of calendar factory -echo ARG6=$6 # full exectuable path of evolution-source-registry -echo ARG7=$7 # full executable path of gvfs -echo ARG8=$8 # config files - -# set up the tmpdir and tell the shell to purge it when we exit -export TEST_TMP_DIR=$(mktemp -p "${TMPDIR:-/tmp}" -d $3-XXXXXXXXXX) || exit 1 -echo "running test '$3' in ${TEST_TMP_DIR}" - -# set up the environment variables -export QT_QPA_PLATFORM=minimal -export HOME=${TEST_TMP_DIR} -export XDG_RUNTIME_DIR=${TEST_TMP_DIR} -export XDG_CACHE_HOME=${TEST_TMP_DIR}/.cache -export XDG_CONFIG_HOME=${TEST_TMP_DIR}/.config -export XDG_DATA_HOME=${TEST_TMP_DIR}/.local/share -export XDG_DESKTOP_DIR=${TEST_TMP_DIR} -export XDG_DOCUMENTS_DIR=${TEST_TMP_DIR} -export XDG_DOWNLOAD_DIR=${TEST_TMP_DIR} -export XDG_MUSIC_DIR=${TEST_TMP_DIR} -export XDG_PICTURES_DIR=${TEST_TMP_DIR} -export XDG_PUBLICSHARE_DIR=${TEST_TMP_DIR} -export XDG_TEMPLATES_DIR=${TEST_TMP_DIR} -export XDG_VIDEOS_DIR=${TEST_TMP_DIR} -export QORGANIZER_EDS_DEBUG=On -export GIO_USE_VFS=local # needed to ensure GVFS shuts down cleanly after the test is over - -export G_MESSAGES_DEBUG=all -export G_DBUS_DEBUG=messages - -echo HOMEDIR=${HOME} -rm -rf ${XDG_DATA_HOME} - -# if there are canned config files for this test, move them into place now -if [ -d $8 ]; then - echo "copying files from $8 to $HOME" - cp --verbose --archive $8/. $HOME -fi - -# run dbus-test-runner -$1 --keep-env --max-wait=90 \ ---task $2 --task-name $3 --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 \ ---task $4 --task-name "evolution" --wait-until-complete -r -#--task $6 --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r \ -#--task $7 --task-name "gvfsd" -r -rv=$? - -# if the test passed, blow away the tmpdir -if [ $rv -eq 0 ]; then - rm -rf $TEST_TMP_DIR -fi - -return $rv diff --git a/tests/test-eds-ics-config-files/.config/evolution/sources/system-proxy.source b/tests/test-eds-ics-config-files/.config/evolution/sources/system-proxy.source new file mode 100644 index 0000000..4b2f666 --- /dev/null +++ b/tests/test-eds-ics-config-files/.config/evolution/sources/system-proxy.source @@ -0,0 +1,21 @@ + +[Data Source] +DisplayName=Default Proxy Settings +Enabled=true +Parent= + +[Proxy] +Method=default +IgnoreHosts=localhost;127.0.0.0/8;::1; +AutoconfigUrl= +FtpHost= +FtpPort=0 +HttpAuthPassword= +HttpAuthUser= +HttpHost= +HttpPort=8080 +HttpUseAuth=false +HttpsHost= +HttpsPort=0 +SocksHost= +SocksPort=0 diff --git a/tests/test-eds-ics-nonrepeating-events.cpp b/tests/test-eds-ics-nonrepeating-events.cpp new file mode 100644 index 0000000..a244f1e --- /dev/null +++ b/tests/test-eds-ics-nonrepeating-events.cpp @@ -0,0 +1,93 @@ +/* + * Copyright 2015 Canonical Ltd. + * + * 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 . + * + * Authors: + * Charles Kerr + */ + +#include + +#include +#include +#include +#include + +#include + +#include "glib-fixture.h" +#include "print-to.h" +#include "timezone-mock.h" +#include "wakeup-timer-mock.h" + +using namespace unity::indicator::datetime; +using VAlarmFixture = GlibFixture; + +/*** +**** +***/ + +TEST_F(VAlarmFixture, MultipleAppointments) +{ + // start the EDS engine + auto engine = std::make_shared(); + + // we need a consistent timezone for the planner and our local DateTimes + constexpr char const * zone_str {"America/Chicago"}; + auto tz = std::make_shared(zone_str); + auto gtz = g_time_zone_new(zone_str); + + // make a planner that looks at the first half of 2015 in EDS + auto planner = std::make_shared(engine, tz); + const DateTime range_begin {gtz, 2015,1, 1, 0, 0, 0.0}; + const DateTime range_end {gtz, 2015,6,31,23,59,59.5}; + planner->range().set(std::make_pair(range_begin, range_end)); + + // give EDS a moment to load + if (planner->appointments().get().empty()) { + g_message("waiting a moment for EDS to load..."); + auto on_appointments_changed = [this](const std::vector& appointments){ + g_message("ah, they loaded"); + if (!appointments.empty()) + g_main_loop_quit(loop); + }; + core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); + constexpr int max_wait_sec = 10; + wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); + } + + // what we expect to get... + Appointment expected_appt; + expected_appt.uid = "20150520T000726Z-3878-32011-1770-81@ubuntu-phablet"; + expected_appt.color = "#becedd"; + expected_appt.summary = "Alarm"; + std::array expected_alarms = { + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,20,20,00,0)}) + }; + + // compare it to what we actually loaded... + const auto appts = planner->appointments().get(); + EXPECT_EQ(expected_alarms.size(), appts.size()); + for (size_t i=0, n=expected_alarms.size(); i. + * + * Authors: + * Charles Kerr + */ + +#include + +#include +#include +#include +#include + +#include + +#include "glib-fixture.h" +#include "print-to.h" +#include "timezone-mock.h" +#include "wakeup-timer-mock.h" + +using namespace unity::indicator::datetime; +using VAlarmFixture = GlibFixture; + +/*** +**** +***/ + +TEST_F(VAlarmFixture, MultipleAppointments) +{ + // start the EDS engine + auto engine = std::make_shared(); + + // we need a consistent timezone for the planner and our local DateTimes + constexpr char const * zone_str {"America/Chicago"}; + auto tz = std::make_shared(zone_str); + auto gtz = g_time_zone_new(zone_str); + + // make a planner that looks at the first half of 2015 in EDS + auto planner = std::make_shared(engine, tz); + const DateTime range_begin {gtz, 2015,1, 1, 0, 0, 0.0}; + const DateTime range_end {gtz, 2015,6,31,23,59,59.5}; + planner->range().set(std::make_pair(range_begin, range_end)); + + // give EDS a moment to load + if (planner->appointments().get().empty()) { + g_message("waiting a moment for EDS to load..."); + auto on_appointments_changed = [this](const std::vector& appointments){ + g_message("ah, they loaded"); + if (!appointments.empty()) + g_main_loop_quit(loop); + }; + core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); + constexpr int max_wait_sec = 10; + wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); + } + + // what we expect to get... + Appointment expected_appt; + expected_appt.uid = "20150507T211449Z-4262-32011-1418-1@ubuntu-phablet"; + expected_appt.color = "#becedd"; + expected_appt.summary = "Alarm"; + std::array expected_alarms = { + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5, 8,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,15,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,22,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,29,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6, 5,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,12,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,19,16,40,0)}), + Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,26,16,40,0)}) + }; + + // compare it to what we actually loaded... + const auto appts = planner->appointments().get(); + EXPECT_EQ(expected_alarms.size(), appts.size()); + for (size_t i=0, n=expected_alarms.size(); i. + * + * Authors: + * Charles Kerr + */ + +#include + +#include +#include +#include +#include + +#include + +#include "glib-fixture.h" +#include "print-to.h" +#include "timezone-mock.h" +#include "wakeup-timer-mock.h" + +using namespace unity::indicator::datetime; +using VAlarmFixture = GlibFixture; + +/*** +**** +***/ + +TEST_F(VAlarmFixture, MultipleAppointments) +{ + // start the EDS engine + auto engine = std::make_shared(); + + // we need a consistent timezone for the planner and our local DateTimes + constexpr char const * zone_str {"America/Chicago"}; + auto tz = std::make_shared(zone_str); + auto gtz = g_time_zone_new(zone_str); + + // make a planner that looks at the first half of 2015 in EDS + auto planner = std::make_shared(engine, tz); + const DateTime range_begin {gtz, 2015,1, 1, 0, 0, 0.0}; + const DateTime range_end {gtz, 2015,6,31,23,59,59.5}; + planner->range().set(std::make_pair(range_begin, range_end)); + + // give EDS a moment to load + if (planner->appointments().get().empty()) { + g_message("waiting a moment for EDS to load..."); + auto on_appointments_changed = [this](const std::vector& appointments){ + g_message("ah, they loaded"); + if (!appointments.empty()) + g_main_loop_quit(loop); + }; + core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); + constexpr int max_wait_sec = 10; + wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); + } + + // the planner should match what we've got in the calendar.ics file + const auto appts = planner->appointments().get(); + ASSERT_EQ(1, appts.size()); + const auto& appt = appts.front(); + ASSERT_EQ(8, appt.alarms.size()); + EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,35,0)}), appt.alarms[0]); + EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,37,0)}), appt.alarms[1]); + EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,39,0)}), appt.alarms[2]); + EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,41,0)}), appt.alarms[3]); + EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,35,0)}), appt.alarms[4]); + EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,37,0)}), appt.alarms[5]); + EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,39,0)}), appt.alarms[6]); + EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,41,0)}), appt.alarms[7]); + + // now let's try this out with AlarmQueue... + // hook the planner up to a SimpleAlarmQueue and confirm that it triggers for each of the reminders + auto mock_clock = std::make_shared(range_begin); + std::shared_ptr clock = mock_clock; + std::shared_ptr wakeup_timer = std::make_shared(clock); + auto alarm_queue = std::make_shared(clock, planner, wakeup_timer); + int triggered_count = 0; + alarm_queue->alarm_reached().connect([&triggered_count, appt](const Appointment&, const Alarm& active_alarm) { + EXPECT_TRUE(std::find(appt.alarms.begin(), appt.alarms.end(), active_alarm) != appt.alarms.end()); + ++triggered_count; + }); + for (auto now=range_begin; nowset_localtime(now); + EXPECT_EQ(appt.alarms.size(), triggered_count); + + // cleanup + g_time_zone_unref(gtz); +} diff --git a/tests/test-eds-ics-repeating-valarms.ics b/tests/test-eds-ics-repeating-valarms.ics new file mode 100644 index 0000000..fe526f4 --- /dev/null +++ b/tests/test-eds-ics-repeating-valarms.ics @@ -0,0 +1,47 @@ +BEGIN:VCALENDAR +CALSCALE:GREGORIAN +PRODID:-//Ximian//NONSGML Evolution Calendar//EN +VERSION:2.0 +X-EVOLUTION-DATA-REVISION:2015-04-05T21:32:47.354433Z(2) +BEGIN:VEVENT +UID:20150405T213247Z-4371-32011-1698-1@ubuntu-phablet +DTSTAMP:20150405T213247Z +DTSTART:20150424T183500Z +DTEND:20150424T193554Z +X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:Can't parse as RECUR value + in RRULE property. Removing entire property: ERROR: No Value +SUMMARY:London Sprint Flight +CREATED:20150405T213247Z +LAST-MODIFIED:20150405T213247Z +BEGIN:VALARM +X-EVOLUTION-ALARM-UID:20150405T213247Z-4371-32011-1698-2@ubuntu-phablet +ACTION:AUDIO +TRIGGER;VALUE=DURATION;RELATED=START:-P1D +REPEAT:3 +DURATION:PT2M +END:VALARM +BEGIN:VALARM +X-EVOLUTION-ALARM-UID:20150405T213247Z-4371-32011-1698-3@ubuntu-phablet +ACTION:DISPLAY +DESCRIPTION:Time to pack! +TRIGGER;VALUE=DURATION;RELATED=START:-P1D +REPEAT:3 +DURATION:PT2M +END:VALARM +BEGIN:VALARM +X-EVOLUTION-ALARM-UID:20150405T213247Z-4371-32011-1698-5@ubuntu-phablet +ACTION:AUDIO +TRIGGER;VALUE=DURATION;RELATED=START:-PT3H +REPEAT:3 +DURATION:PT2M +END:VALARM +BEGIN:VALARM +X-EVOLUTION-ALARM-UID:20150405T213247Z-4371-32011-1698-6@ubuntu-phablet +ACTION:DISPLAY +DESCRIPTION:Go to the airport! +TRIGGER;VALUE=DURATION;RELATED=START:-PT3H +REPEAT:3 +DURATION:PT2M +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/tests/test-eds-tasks-config-files/.config/evolution/sources/system-proxy.source b/tests/test-eds-tasks-config-files/.config/evolution/sources/system-proxy.source deleted file mode 100644 index 4b2f666..0000000 --- a/tests/test-eds-tasks-config-files/.config/evolution/sources/system-proxy.source +++ /dev/null @@ -1,21 +0,0 @@ - -[Data Source] -DisplayName=Default Proxy Settings -Enabled=true -Parent= - -[Proxy] -Method=default -IgnoreHosts=localhost;127.0.0.0/8;::1; -AutoconfigUrl= -FtpHost= -FtpPort=0 -HttpAuthPassword= -HttpAuthUser= -HttpHost= -HttpPort=8080 -HttpUseAuth=false -HttpsHost= -HttpsPort=0 -SocksHost= -SocksPort=0 diff --git a/tests/test-eds-tasks-config-files/.local/share/evolution/tasks/system/tasks.ics b/tests/test-eds-tasks-config-files/.local/share/evolution/tasks/system/tasks.ics deleted file mode 100644 index efde5f7..0000000 --- a/tests/test-eds-tasks-config-files/.local/share/evolution/tasks/system/tasks.ics +++ /dev/null @@ -1,28 +0,0 @@ -BEGIN:VCALENDAR -CALSCALE:GREGORIAN -PRODID:-//Ximian//NONSGML Evolution Calendar//EN -VERSION:2.0 -X-EVOLUTION-DATA-REVISION:2015-05-07T21:14:49.315443Z(0) -BEGIN:VTODO -UID:20150507T211449Z-4262-32011-1418-1@ubuntu-phablet -DTSTAMP:20150508T211449Z -DTSTART:20150508T164000 -RRULE:FREQ=WEEKLY;BYDAY=FR -SUMMARY:Alarm -CATEGORIES:x-canonical-alarm -CREATED:20150507T211449Z -LAST-MODIFIED:20150507T211449Z -BEGIN:VALARM -X-EVOLUTION-ALARM-UID:20150507T211449Z-4262-32011-1418-2@ubuntu-phablet -ACTION:AUDIO -ATTACH:file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg -TRIGGER;VALUE=DURATION;RELATED=START:PT0S -END:VALARM -BEGIN:VALARM -X-EVOLUTION-ALARM-UID:20150507T211449Z-4262-32011-1418-3@ubuntu-phablet -ACTION:DISPLAY -DESCRIPTION:Alarm -TRIGGER;VALUE=DURATION;RELATED=START:PT0S -END:VALARM -END:VTODO -END:VCALENDAR diff --git a/tests/test-eds-tasks.cpp b/tests/test-eds-tasks.cpp deleted file mode 100644 index 526dcc6..0000000 --- a/tests/test-eds-tasks.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2015 Canonical Ltd. - * - * 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 . - * - * Authors: - * Charles Kerr - */ - -#include - -#include -#include -#include -#include - -#include - -#include "glib-fixture.h" -#include "print-to.h" -#include "timezone-mock.h" -#include "wakeup-timer-mock.h" - -using namespace unity::indicator::datetime; -using VAlarmFixture = GlibFixture; - -/*** -**** -***/ - -TEST_F(VAlarmFixture, MultipleAppointments) -{ - // start the EDS engine - auto engine = std::make_shared(); - - // we need a consistent timezone for the planner and our local DateTimes - constexpr char const * zone_str {"America/Chicago"}; - auto tz = std::make_shared(zone_str); - auto gtz = g_time_zone_new(zone_str); - - // make a planner that looks at the first half of 2015 in EDS - auto planner = std::make_shared(engine, tz); - const DateTime range_begin {gtz, 2015,1, 1, 0, 0, 0.0}; - const DateTime range_end {gtz, 2015,6,31,23,59,59.5}; - planner->range().set(std::make_pair(range_begin, range_end)); - - // give EDS a moment to load - if (planner->appointments().get().empty()) { - g_message("waiting a moment for EDS to load..."); - auto on_appointments_changed = [this](const std::vector& appointments){ - g_message("ah, they loaded"); - if (!appointments.empty()) - g_main_loop_quit(loop); - }; - core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); - constexpr int max_wait_sec = 10; - wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); - } - - // what we expect to get... - Appointment expected_appt; - expected_appt.uid = "20150507T211449Z-4262-32011-1418-1@ubuntu-phablet"; - expected_appt.color = "#becedd"; - expected_appt.summary = "Alarm"; - std::array expected_alarms = { - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5, 8,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,15,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,22,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,5,29,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6, 5,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,12,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,19,16,40,0)}), - Alarm({"Alarm", "file:///usr/share/sounds/ubuntu/ringtones/Suru arpeggio.ogg", DateTime(gtz,2015,6,26,16,40,0)}) - }; - - // compare it to what we actually loaded... - const auto appts = planner->appointments().get(); - EXPECT_EQ(expected_alarms.size(), appts.size()); - for (size_t i=0, n=expected_alarms.size(); i. - * - * Authors: - * Charles Kerr - */ - -#include - -#include -#include -#include -#include - -#include - -#include "glib-fixture.h" -#include "print-to.h" -#include "timezone-mock.h" -#include "wakeup-timer-mock.h" - -using namespace unity::indicator::datetime; -using VAlarmFixture = GlibFixture; - -/*** -**** -***/ - -TEST_F(VAlarmFixture, MultipleAppointments) -{ - // start the EDS engine - auto engine = std::make_shared(); - - // we need a consistent timezone for the planner and our local DateTimes - constexpr char const * zone_str {"America/Chicago"}; - auto tz = std::make_shared(zone_str); - auto gtz = g_time_zone_new(zone_str); - - // make a planner that looks at the first half of 2015 in EDS - auto planner = std::make_shared(engine, tz); - const DateTime range_begin {gtz, 2015,1, 1, 0, 0, 0.0}; - const DateTime range_end {gtz, 2015,6,31,23,59,59.5}; - planner->range().set(std::make_pair(range_begin, range_end)); - - // give EDS a moment to load - if (planner->appointments().get().empty()) { - g_message("waiting a moment for EDS to load..."); - auto on_appointments_changed = [this](const std::vector& appointments){ - g_message("ah, they loaded"); - if (!appointments.empty()) - g_main_loop_quit(loop); - }; - core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); - constexpr int max_wait_sec = 10; - wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); - } - - // the planner should match what we've got in the calendar.ics file - const auto appts = planner->appointments().get(); - ASSERT_EQ(1, appts.size()); - const auto& appt = appts.front(); - ASSERT_EQ(8, appt.alarms.size()); - EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,35,0)}), appt.alarms[0]); - EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,37,0)}), appt.alarms[1]); - EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,39,0)}), appt.alarms[2]); - EXPECT_EQ(Alarm({"Time to pack!", "", DateTime(gtz,2015,4,23,13,41,0)}), appt.alarms[3]); - EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,35,0)}), appt.alarms[4]); - EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,37,0)}), appt.alarms[5]); - EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,39,0)}), appt.alarms[6]); - EXPECT_EQ(Alarm({"Go to the airport!", "", DateTime(gtz,2015,4,24,10,41,0)}), appt.alarms[7]); - - // now let's try this out with AlarmQueue... - // hook the planner up to a SimpleAlarmQueue and confirm that it triggers for each of the reminders - auto mock_clock = std::make_shared(range_begin); - std::shared_ptr clock = mock_clock; - std::shared_ptr wakeup_timer = std::make_shared(clock); - auto alarm_queue = std::make_shared(clock, planner, wakeup_timer); - int triggered_count = 0; - alarm_queue->alarm_reached().connect([&triggered_count, appt](const Appointment&, const Alarm& active_alarm) { - EXPECT_TRUE(std::find(appt.alarms.begin(), appt.alarms.end(), active_alarm) != appt.alarms.end()); - ++triggered_count; - }); - for (auto now=range_begin; nowset_localtime(now); - EXPECT_EQ(appt.alarms.size(), triggered_count); - - // cleanup - g_time_zone_unref(gtz); -} -- cgit v1.2.3