Back to index

lightning-sunbird  0.9+nobinonly
Functions | Variables
regression-recur.c File Reference
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>
#include "ical.h"
#include "icalss.h"
#include "regression.h"

Go to the source code of this file.

Functions

static void sig_alrm (int i)
static int get_expected_numevents (icalcomponent *c)
static void recur_callback (icalcomponent *comp, struct icaltime_span *span, void *data)
void test_recur_file ()

Variables

int VERBOSE

Function Documentation

static int get_expected_numevents ( icalcomponent *  c) [static]

Definition at line 52 of file regression-recur.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;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void recur_callback ( icalcomponent *  comp,
struct icaltime_span span,
void data 
) [static]

Definition at line 78 of file regression-recur.c.

{
  int *num_recurs = data;

  if (VERBOSE) {
    printf("recur: %s", ctime(&span->start));
    printf("       %s", ctime(&span->end));
  }
  *num_recurs = *num_recurs + 1;
}

Here is the caller graph for this function:

static void sig_alrm ( int  i) [static]

Definition at line 45 of file regression-recur.c.

                           {
    fprintf(stderr,"Could not get lock on file\n");
    exit(1);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 91 of file regression-recur.c.

{
    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);
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 7 of file regression-utils.c.