diff options
author | Hans Petter <hansp@src.gnome.org> | 2003-09-12 06:04:44 +0800 |
---|---|---|
committer | Hans Petter <hansp@src.gnome.org> | 2003-09-12 06:04:44 +0800 |
commit | 697761cc337aa77a47140c8df50ed84bc25e23f6 (patch) | |
tree | b785830f72e9938cceaa016a419c7b6d9892bada /libical/src/test/regression-recur.c | |
parent | 733d77e657516f9a59b5c1a7b62acb87b03ec86f (diff) | |
download | gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.gz gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.bz2 gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.lz gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.xz gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.zst gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.zip |
Import new libical from mainline HEAD and make appropriate changes to
Evolution.
svn path=/trunk/; revision=22538
Diffstat (limited to 'libical/src/test/regression-recur.c')
-rw-r--r-- | libical/src/test/regression-recur.c | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/libical/src/test/regression-recur.c b/libical/src/test/regression-recur.c new file mode 100644 index 0000000000..85f643e964 --- /dev/null +++ b/libical/src/test/regression-recur.c @@ -0,0 +1,194 @@ +/* -*- Mode: C -*- + ====================================================================== + FILE: regression-recur.c + CREATOR: ebusboom 8jun00 + + DESCRIPTION: + + (C) COPYRIGHT 1999 Eric Busboom + http://www.softwarestudio.org + + The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and + limitations under the License. + + ======================================================================*/ + +#include <assert.h> +#include <string.h> /* for strdup */ +#include <stdlib.h> /* for malloc */ +#include <stdio.h> /* for printf */ +#include <time.h> /* for time() */ +#include <signal.h> /* for signal */ +#ifndef WIN32 +#include <unistd.h> /* for alarm */ +#endif + +#include "ical.h" +#include "icalss.h" +#include "regression.h" + +extern int VERBOSE; + +#ifdef WIN32 +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + + +static void sig_alrm(int i){ + fprintf(stderr,"Could not get lock on file\n"); + exit(1); +} + +/* Get the expected result about the purpose of the property*/ + +static int get_expected_numevents(icalcomponent *c) +{ + icalproperty *p; + const char* note = 0; + int num_events = 0; + + if(c != 0){ + for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); + p!= 0; + p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ + if(strcmp(icalproperty_get_x_name(p),"X-EXPECT-NUMEVENTS")==0){ + note = icalproperty_get_x(p); + } + } + } + + if(note != 0){ + num_events = atoi(note); + } + + + return num_events; +} + + + +static void recur_callback(icalcomponent *comp, + struct icaltime_span *span, + void *data) +{ + int *num_recurs = data; + + if (VERBOSE) { + printf("recur: %s", ctime(&span->start)); + printf(" %s", ctime(&span->end)); + } + *num_recurs = *num_recurs + 1; +} + +void test_recur_file() +{ + icalset *cin = 0; + struct icaltimetype next; + icalcomponent *itr; + icalproperty *desc, *dtstart, *rrule; + struct icalrecurrencetype recur; + icalrecur_iterator* ritr; + time_t tt; + char* file; + int num_recurs_found = 0; + + icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL); + +#ifndef WIN32 + signal(SIGALRM,sig_alrm); +#endif + file = getenv("ICAL_RECUR_FILE"); + if (!file) + file = "../../test-data/recur.txt"; + +#ifndef WIN32 + alarm(15); /* to get file lock */ +#endif + cin = icalfileset_new(file); +#ifndef WIN32 + alarm(0); +#endif + + ok("opening file with recurring events", (cin!=NULL)); + assert(cin!=NULL); + + for (itr = icalfileset_get_first_component(cin); + itr != 0; + itr = icalfileset_get_next_component(cin)){ + int badcomp = 0; + int expected_events = 0; + char msg[128]; + + + struct icaltimetype start = icaltime_null_time(); + struct icaltimetype startmin = icaltime_from_timet(1,0); + struct icaltimetype endmax = icaltime_null_time(); + const char *desc_str = "malformed component"; + + desc = icalcomponent_get_first_property(itr,ICAL_DESCRIPTION_PROPERTY); + dtstart = icalcomponent_get_first_property(itr,ICAL_DTSTART_PROPERTY); + rrule = icalcomponent_get_first_property(itr,ICAL_RRULE_PROPERTY); + if (desc) { + desc_str = icalproperty_get_description(desc); + } + + ok((char*)desc_str, !(desc == 0 || dtstart == 0 || rrule == 0)); + + if (desc == 0 || dtstart == 0 || rrule == 0) { + badcomp = 1; + if (VERBOSE) { + printf("\n******** Error in input component ********\n"); + printf("The following component is malformed:\n %s\n", desc_str); + } + continue; + } + if (VERBOSE) { + printf("\n\n#### %s\n",desc_str); + printf("#### %s\n",icalvalue_as_ical_string(icalproperty_get_value(rrule))); + } + + recur = icalproperty_get_rrule(rrule); + start = icalproperty_get_dtstart(dtstart); + + ritr = icalrecur_iterator_new(recur,start); + + tt = icaltime_as_timet(start); + + if (VERBOSE) + printf("#### %s\n",ctime(&tt )); + + icalrecur_iterator_free(ritr); + + for(ritr = icalrecur_iterator_new(recur,start), + next = icalrecur_iterator_next(ritr); + !icaltime_is_null_time(next); + next = icalrecur_iterator_next(ritr)){ + + tt = icaltime_as_timet(next); + + if (VERBOSE) + printf(" %s",ctime(&tt )); + + } + + icalrecur_iterator_free(ritr); + num_recurs_found = 0; + expected_events = get_expected_numevents(itr); + + icalcomponent_foreach_recurrence(itr, startmin, endmax, + recur_callback, &num_recurs_found); + + sprintf(msg," expecting total of %d events", expected_events); + int_is(msg, num_recurs_found, expected_events); + } + + icalset_free(cin); +} |