The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use warnings;
use strict;

use Test::More tests => 20;
use Test::LongString;
use Test::NoWarnings; # this catches our warnings like setting unknown properties

BEGIN { use_ok('Data::ICal') }

my $s = Data::ICal->new();

isa_ok($s, 'Data::ICal');

can_ok($s, qw/as_string add_entry entries/);

BEGIN { use_ok('Data::ICal::Entry::Todo') }

my $todo = Data::ICal::Entry::Todo->new();
isa_ok($todo, 'Data::ICal::Entry::Todo');
isa_ok($todo, 'Data::ICal::Entry');


can_ok($todo, qw/add_property add_properties properties/);


$todo->add_properties( url => 'http://example.com/todo1',
                        summary => 'A sample todo',
                        comment => 'a first comment',
                        comment => 'a second comment',
                        summary => 'This summary trumps the first summary'
                    
                    );


is(scalar @{$s->entries},0);
ok($s->add_entry($todo));
is(scalar @{ $s->entries},1);



is_string($s->as_string, <<END_VCAL, "Got the right output");
BEGIN:VCALENDAR
PRODID:Data::ICal $Data::ICal::VERSION
VERSION:2.0
BEGIN:VTODO
COMMENT:a first comment
COMMENT:a second comment
SUMMARY:This summary trumps the first summary
URL:http://example.com/todo1
END:VTODO
END:VCALENDAR
END_VCAL

$todo->add_property( suMMaRy => "This one trumps number two, even though weird capitalization!");

is_string($s->as_string, <<END_VCAL, "add_property is case insensitive");
BEGIN:VCALENDAR
PRODID:Data::ICal $Data::ICal::VERSION
VERSION:2.0
BEGIN:VTODO
COMMENT:a first comment
COMMENT:a second comment
SUMMARY:This one trumps number two\\, even though weird capitalization!
URL:http://example.com/todo1
END:VTODO
END:VCALENDAR
END_VCAL

BEGIN { use_ok('Data::ICal::Entry::Event') }

my $event = Data::ICal::Entry::Event->new();
isa_ok($event, 'Data::ICal::Entry::Event');
isa_ok($event, 'Data::ICal::Entry');


can_ok($event, qw/add_property add_properties properties/);


$event->add_properties( 
                        summary => 'Awesome party',
                        description => 'at my \ place,\nOn 5th St.;',
                    );

ok($s->add_entry($event));
is(scalar @{ $s->entries},2);

is_string($s->as_string, <<END_VCAL, "got the right output");
BEGIN:VCALENDAR
PRODID:Data::ICal $Data::ICal::VERSION
VERSION:2.0
BEGIN:VTODO
COMMENT:a first comment
COMMENT:a second comment
SUMMARY:This one trumps number two\\, even though weird capitalization!
URL:http://example.com/todo1
END:VTODO
BEGIN:VEVENT
DESCRIPTION:at my \\ place\\,\\nOn 5th St.\\;
SUMMARY:Awesome party
END:VEVENT
END:VCALENDAR
END_VCAL