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-component.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-component.c')
-rw-r--r-- | libical/src/test/regression-component.c | 580 |
1 files changed, 580 insertions, 0 deletions
diff --git a/libical/src/test/regression-component.c b/libical/src/test/regression-component.c new file mode 100644 index 0000000000..0babb579ba --- /dev/null +++ b/libical/src/test/regression-component.c @@ -0,0 +1,580 @@ +#include "ical.h" +#include "regression.h" + +#include <string.h> +extern int VERBOSE; + +void create_simple_component(void) +{ + + icalcomponent* calendar; + icalproperty *version, *bogus; + + /* Create calendar and add properties */ + calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); + + ok("create vcalendar component", (calendar!=NULL)); + + icalcomponent_add_property( + calendar, + icalproperty_new_version("2.0") + ); + + version = icalcomponent_get_first_property(calendar,ICAL_VERSION_PROPERTY); + ok("version property added", (version!=NULL)); + + bogus = icalcomponent_get_first_property(calendar,ICAL_DTSTART_PROPERTY); + ok("bogus dtstart not found", (bogus == NULL)); + + if (VERBOSE && calendar) + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + icalcomponent_free(calendar); +} + + +static char* create_new_component_str = +"BEGIN:VCALENDAR\n" +"VERSION:2.0\n" +"PRODID:-//RDU Software//NONSGML HandCal//EN\n" +"BEGIN:VTIMEZONE\n" +"TZID:America/New_York\n" +"BEGIN:DAYLIGHT\n" +"DTSTART:20020606T212449\n" +"RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\n" +"TZOFFSETFROM:-0500\n" +"TZOFFSETTO:-0400\n" +"TZNAME:EST\n" +"END:DAYLIGHT\n" +"BEGIN:STANDARD\n" +"DTSTART:20020606T212449\n" +"RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\n" +"TZOFFSETFROM:-0400\n" +"TZOFFSETTO:-0500\n" +"TZNAME:EST\n" +"END:STANDARD\n" +"END:VTIMEZONE\n" +"BEGIN:VEVENT\n" +"DTSTAMP:20020606T212449\n" +"UID:guid-1.host1.com\n" +"ORGANIZER;ROLE=CHAIR:mrbig@host.com\n" +"ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=GROUP:employee-A@host.com\n" +"DESCRIPTION:Project XYZ Review Meeting\n" +"CATEGORIES:MEETING\n" +"CLASS:PRIVATE\n" +"CREATED:20020606T212449\n" +"SUMMARY:XYZ Project Review\n" +"DTSTART;TZID=America/New_York:20020606T212449\n" +"DTEND;TZID=America/New_York:20020606T212449\n" +"LOCATION:1CP Conference Room 4350\n" +"END:VEVENT\n" +"END:VCALENDAR\n"; + + +/* Create a new component */ +void create_new_component() +{ + icalcomponent* calendar; + icalcomponent* timezone; + icalcomponent* tzc; + icalcomponent* event; + struct icaltimetype atime = icaltime_from_timet( 1023398689, 0); + struct icaldatetimeperiodtype rtime; + icalproperty* property; + char *calendar_as_string; + + rtime.period.start = icaltime_from_timet( 1023398689,0); + rtime.period.end = icaltime_from_timet( 1023409689,0); + rtime.period.end.hour++; + rtime.time = icaltime_null_time(); + + /* Create calendar and add properties */ + calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); + + + icalcomponent_add_property( + calendar, + icalproperty_new_version("2.0") + ); + + icalcomponent_add_property( + calendar, + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") + ); + + /* Create a timezone object and add it to the calendar */ + + timezone = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); + + icalcomponent_add_property( + timezone, + icalproperty_new_tzid("America/New_York") + ); + + /* Add a sub-component of the timezone */ + tzc = icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); + + icalcomponent_add_property( + tzc, + icalproperty_new_dtstart(atime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_rdate(rtime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetfrom(-5*3600) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetto(-4*3600) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzname("EST") + ); + + icalcomponent_add_component(timezone,tzc); + + icalcomponent_add_component(calendar,timezone); + + /* Add a second subcomponent */ + tzc = icalcomponent_new(ICAL_XSTANDARD_COMPONENT); + + icalcomponent_add_property( + tzc, + icalproperty_new_dtstart(atime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_rdate(rtime) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetfrom(-4*3600) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzoffsetto(-5*3600) + ); + + icalcomponent_add_property( + tzc, + icalproperty_new_tzname("EST") + ); + + icalcomponent_add_component(timezone,tzc); + + /* Add an event */ + + event = icalcomponent_new(ICAL_VEVENT_COMPONENT); + + icalcomponent_add_property( + event, + icalproperty_new_dtstamp(atime) + ); + + icalcomponent_add_property( + event, + icalproperty_new_uid("guid-1.host1.com") + ); + + /* add a property that has parameters */ + property = icalproperty_new_organizer("mrbig@host.com"); + + icalproperty_add_parameter( + property, + icalparameter_new_role(ICAL_ROLE_CHAIR) + ); + + icalcomponent_add_property(event,property); + + /* add another property that has parameters */ + property = icalproperty_new_attendee("employee-A@host.com"); + + icalproperty_add_parameter( + property, + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) + ); + + icalproperty_add_parameter( + property, + icalparameter_new_rsvp(ICAL_RSVP_TRUE) + ); + + icalproperty_add_parameter( + property, + icalparameter_new_cutype(ICAL_CUTYPE_GROUP) + ); + + icalcomponent_add_property(event,property); + + + /* more properties */ + + icalcomponent_add_property( + event, + icalproperty_new_description("Project XYZ Review Meeting") + ); + + icalcomponent_add_property( + event, + icalproperty_new_categories("MEETING") + ); + + icalcomponent_add_property( + event, + icalproperty_new_class(ICAL_CLASS_PRIVATE) + ); + + icalcomponent_add_property( + event, + icalproperty_new_created(atime) + ); + + icalcomponent_add_property( + event, + icalproperty_new_summary("XYZ Project Review") + ); + + + property = icalproperty_new_dtstart(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid("America/New_York") + ); + + icalcomponent_add_property(event,property); + + + property = icalproperty_new_dtend(atime); + + icalproperty_add_parameter( + property, + icalparameter_new_tzid("America/New_York") + ); + + icalcomponent_add_property(event,property); + + icalcomponent_add_property( + event, + icalproperty_new_location("1CP Conference Room 4350") + ); + + icalcomponent_add_component(calendar,event); + + calendar_as_string = icalcomponent_as_ical_string(calendar); + + is("build large, complex component", + calendar_as_string, + create_new_component_str); + + if (VERBOSE && calendar) + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + + if (calendar) + icalcomponent_free(calendar); + +} + +/* Create a new component, using the va_args list */ + +void create_new_component_with_va_args() +{ + + icalcomponent* calendar; + struct icaltimetype atime = icaltime_from_timet( time(0),0); + struct icaldatetimeperiodtype rtime; + + rtime.period.start = icaltime_from_timet( time(0),0); + rtime.period.end = icaltime_from_timet( time(0),0); + rtime.period.end.hour++; + rtime.time = icaltime_null_time(); + + calendar = + icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalproperty_new_version("2.0"), + icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), + icalcomponent_vanew( + ICAL_VTIMEZONE_COMPONENT, + icalproperty_new_tzid("America/New_York"), + icalcomponent_vanew( + ICAL_XDAYLIGHT_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-4.0), + icalproperty_new_tzoffsetto(-5.0), + icalproperty_new_tzname("EST"), + 0 + ), + icalcomponent_vanew( + ICAL_XSTANDARD_COMPONENT, + icalproperty_new_dtstart(atime), + icalproperty_new_rdate(rtime), + icalproperty_new_tzoffsetfrom(-5.0), + icalproperty_new_tzoffsetto(-4.0), + icalproperty_new_tzname("EST"), + 0 + ), + 0 + ), + icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstamp(atime), + icalproperty_new_uid("guid-1.host1.com"), + icalproperty_vanew_organizer( + "mrbig@host.com", + icalparameter_new_role(ICAL_ROLE_CHAIR), + 0 + ), + icalproperty_vanew_attendee( + "employee-A@host.com", + icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), + icalparameter_new_rsvp(ICAL_RSVP_TRUE), + icalparameter_new_cutype(ICAL_CUTYPE_GROUP), + 0 + ), + icalproperty_new_description("Project XYZ Review Meeting"), + icalproperty_new_categories("MEETING"), + icalproperty_new_class(ICAL_CLASS_PUBLIC), + icalproperty_new_created(atime), + icalproperty_new_summary("XYZ Project Review"), + icalproperty_vanew_dtstart( + atime, + icalparameter_new_tzid("America/New_York"), + 0 + ), + icalproperty_vanew_dtend( + atime, + icalparameter_new_tzid("America/New_York"), + 0 + ), + icalproperty_new_location("1CP Conference Room 4350"), + 0 + ), + 0 + ); + + ok("creating a complex vcalendar", (calendar != NULL)); + if (VERBOSE && calendar) + printf("%s\n",icalcomponent_as_ical_string(calendar)); + + icalcomponent_free(calendar); + +} + +static void print_span(int c, struct icaltime_span span ){ + printf("span-->%d, %d\n", (int)span.start, (int)span.end); + if (span.start == 0) + printf("#%02d start: (empty)\n",c); + else + printf("#%02d start: %s\n",c,ical_timet_string(span.start)); + + if (span.end == 0) + printf(" end : (empty)\n"); + else + printf(" end : %s\n",ical_timet_string(span.end)); + +} + +/** Test icalcomponent_get_span() + * + */ +void test_icalcomponent_get_span() +{ + time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, + Sat Nov 4 15:00:00 PST 2000 */ + time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 + Sat Nov 4 16:00:00 PST 2000 */ + struct icaldurationtype dur; + struct icaltime_span span; + icalcomponent *c; + icaltimezone *azone, *bzone; + int tnum = 0; + + /** test 0 + * Direct assigning time_t means they will be interpreted as UTC + */ + span.start = tm1; + span.end = tm2; + if (VERBOSE) print_span(tnum++,span); + + /** test 1 + * We specify times in a timezone, the returned span is in UTC + */ + azone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_dtstart( + icaltime_from_timet_with_zone(tm1,0,azone), + icalparameter_new_tzid("America/Los_Angeles"),0), + icalproperty_vanew_dtend( + icaltime_from_timet_with_zone(tm2,0,azone), + icalparameter_new_tzid("America/Los_Angeles"),0), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("America/Los_Angeles", span.start, 973407600); + icalcomponent_free(c); + + /** test 2 + * We specify times as floating, the returned span is in UTC + * with no conversion applied - so result should be as test 0 + */ + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_dtstart(icaltime_from_timet(tm1,0),0), + icalproperty_vanew_dtend(icaltime_from_timet(tm2,0),0), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("floating time", span.start, tm1); + + icalcomponent_free(c); + + /** test 3 + * We specify times in a timezone, the returned span is in UTC + */ + azone = icaltimezone_get_builtin_timezone("America/New_York"); + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_dtstart( + icaltime_from_timet_with_zone(tm1,0,azone), + icalparameter_new_tzid("America/New_York"),0), + icalproperty_vanew_dtend( + icaltime_from_timet_with_zone(tm2,0,azone), + icalparameter_new_tzid("America/New_York"),0), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("America/New_York", span.start, 973396800); + + icalcomponent_free(c); + + /** test 4 + * We specify times in two different timezones, the returned span + * is in UTC + */ + azone = icaltimezone_get_builtin_timezone("America/New_York"); + bzone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_dtstart( + icaltime_from_timet_with_zone(tm1,0,azone), + icalparameter_new_tzid("America/New_York"),0), + icalproperty_vanew_dtend( + icaltime_from_timet_with_zone(tm2,0,bzone), + icalparameter_new_tzid("America/Los_Angeles"),0), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("America/New_York", span.start, 973396800); + + icalcomponent_free(c); + + /** test 5 + * We specify start time in a timezone and a duration, the returned span + * is in UTC + */ + azone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); + memset(&dur,0,sizeof(dur)); + dur.minutes = 30; + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_vanew_dtstart( + icaltime_from_timet_with_zone(tm1,0,azone), + icalparameter_new_tzid("America/Los_Angeles"),0), + icalproperty_new_duration(dur), + + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("America/Los_Angeles w/ duration", span.end, 973409400); + + icalcomponent_free(c); + + icalerror_errors_are_fatal = 0; + /** test 6 + * We specify only start time, should return a null span with no error + */ + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstart(icaltime_from_timet(tm1,0)), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("null span", span.start, 0); + icalcomponent_free(c); + + /** test 7 + * We specify start and end date + */ + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), + icalproperty_new_dtend(icaltime_from_timet(tm1,1)), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("UTC", span.start, 973296000); + icalcomponent_free(c); + + /** test 8 + * We specify start and end date + */ + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), + icalproperty_new_dtend(icaltime_from_timet(tm2,1)), + 0 + ); + + span = icalcomponent_get_span(c); + int_is("UTC #2", span.start, 973296000); + if (VERBOSE) print_span(tnum++,span); + + icalcomponent_free(c); + + /** test 9 + * We specify start date + */ + c = icalcomponent_vanew( + ICAL_VEVENT_COMPONENT, + icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), + 0 + ); + + span = icalcomponent_get_span(c); + if (VERBOSE) print_span(tnum++,span); + int_is("start date only", span.end, 973382399); + + icalcomponent_free(c); + + /* assert(icalerrno == ICAL_MALFORMEDDATA_ERROR); */ + icalerror_errors_are_fatal = 1; +} |