# -*- cperl -*- use Test::More; use Test::XML; use IO::File; use IO::String; use XML::SAX::Writer; use iCal::Parser::SAX; my @files=glob("t/calendars/[0-9]*.ics"); plan tests => scalar @files + 5; foreach my $f (@files) { my $expect=slurp($f . ".xml"); my $got=''; iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{XXX=>'XXX'},Output=>\$got), start=>'20040101',tz=>'America/New_York', )->parse_uri($f); is_xml($got,$expect,$f=~/.+\d+(.+)\.ics/); } my $expect=slurp("t/calendars/10multi-cal.ics.xml"); my $got=''; iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{},Output=>\$got), start=>'20040101',tz=>'America/New_York', )->parse_uris(qw{ t/calendars/02event-duration.ics t/calendars/03all-day-event.ics}); is_xml($got,$expect,"multi-cal input"); my $f="t/calendars/03all-day-event.ics"; $expect=slurp($f . ".xml"); my $fh=IO::File->new($f,'r'); $got=''; iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{},Output=>\$got), start=>'20040101',tz=>'America/New_York', )->parse_file($fh); is_xml($got,$expect,'parse filehandle'); $got=''; my $input=slurp($f); iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{XXX=>'XXX'},Output=>\$got), start=>'20040101',tz=>'America/New_York', )->parse_string($input); is_xml($got,$expect,'parse string'); my $h=iCal::Parser->new(start=>'20040101',tz=>'America/New_York')->parse($f); #parse now tries to use filename $h->{cals}[0]{'X-WR-CALNAME'}='Calendar 1'; $got=''; iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{XXX=>'XXX'},Output=>\$got), start=>'20040101', )->parse_hash($h); is_xml($got,$expect,'parse hash'); SKIP: { eval "use LWP::UserAgent"; skip "http url", 1 unless -f "_build/DOHTTP" && !$@; my $url="http://www.rickster.com/xml-sax-ical/test-cal.ics"; $got=''; iCal::Parser::SAX->new(Handler=>XML::SAX::Writer ->new(Escape=>{XXX=>'XXX'},Output=>\$got), start=>'20040101',tz=>'America/New_York', )->parse_uri($url); is_xml($got,$expect,'parse http url'); } sub slurp { my $f=shift; local $/=undef; open IN, $f or die "Can't open $f, $!"; my $s=; close IN; return $s; }