]> git.donarmstrong.com Git - liborg-parser-perl.git/blob - t/timestamp.t
Import original source of Org-Parser 0.23
[liborg-parser-perl.git] / t / timestamp.t
1 #!perl
2
3 use 5.010;
4 use strict;
5 use warnings;
6
7 use FindBin '$Bin';
8 use lib $Bin, "$Bin/t";
9
10 use DateTime;
11 use Org::Parser;
12 use Test::More 0.96;
13 require "testlib.pl";
14
15 test_parse(
16     name => 'timestamp basic tests',
17     filter_elements => sub {
18         $_[0]->isa('Org::Element::Timestamp') },
19     doc  => <<'_',
20 * TODO active timestamps
21   SCHEDULED: <2011-03-16 Wed>
22   TEST: <2011-03-16 >
23   TEST: <2011-03-16 Wed 01:23>
24   nontimestamps: <2011-03-23>
25
26 * inactive timestamps
27   - [2011-03-23 Wed]
28   - [2011-03-23 ]
29   - [2011-03-23 Wed 01:23]
30   - nontimestamps: [2011-03-23]
31
32 * additional tests
33   - <2012-01-11 Wed > # space after dow allowed
34   - [2012-01-11   ] [2012-01-11   Wed   ] # multiple spaces allowed
35 _
36     num => 9,
37     test_after_parse => sub {
38         my %args = @_;
39         my $doc = $args{result};
40         my $elems = $args{elements};
41         is(DateTime->compare(DateTime->new(year=>2011, month=>3, day=>16),
42                              $elems->[0]->datetime), 0, "ts[0] datetime")
43             or diag("datetime=".$elems->[0]->datetime);
44
45         is( $elems->[0]->as_string, "<2011-03-16 Wed>", "ts[0] as_string");
46         is( $elems->[1]->as_string, "<2011-03-16 Wed>", "ts[1] as_string");
47         is( $elems->[2]->as_string, "<2011-03-16 Wed 01:23>",
48             "ts[2] as_string");
49         is( $elems->[3]->as_string, "[2011-03-23 Wed]",
50             "ts[2] as_string");
51
52         ok( $elems->[0]->is_active, "ts[0] is_active");
53         ok(!$elems->[3]->is_active, "ts[3] !is_active");
54
55         # additional
56         is( $elems->[6]->as_string, "<2012-01-11 Wed>", "ts[6] as_string");
57         is( $elems->[7]->as_string, "[2012-01-11 Wed]", "ts[7] as_string");
58         is( $elems->[8]->as_string, "[2012-01-11 Wed]", "ts[8] as_string");
59     },
60 );
61
62 test_parse(
63     name => 'event duration',
64     filter_elements => sub {
65         $_[0]->isa('Org::Element::Timestamp') },
66     doc  => <<'_',
67 [2011-03-23 Wed 10:12-11:23]
68 _
69     num => 1,
70     test_after_parse => sub {
71         my %args  = @_;
72         my $doc   = $args{result};
73         my $elems = $args{elements};
74         my $ts    = $elems->[0];
75         is(DateTime->compare(DateTime->new(year=>2011, month=>3, day=>23,
76                                            hour=>10, minute=>12),
77                              $ts->datetime), 0, "datetime")
78             or diag("datetime=".$ts->datetime);
79         is($elems->[0]->event_duration, 1*3600+11*60, "event_duration");
80     },
81 );
82
83 test_parse(
84     name => 'repeater & warning period',
85     filter_elements => sub {
86         $_[0]->isa('Org::Element::Timestamp') },
87     doc  => <<'_',
88 [2011-03-23 Wed 10:12 +1d]
89 [2011-03-23 Wed 10:12-11:23 +2w]
90 [2011-03-23 Wed +3m]
91 [2011-03-23 Wed +4y]
92 <2011-05-25 Wed ++5m>
93 <2011-05-25 Wed .+6m>
94 <2011-05-25 Wed +17.1m -13.2d>
95 _
96     num => 7,
97     test_after_parse => sub {
98         my %args  = @_;
99         my $doc   = $args{result};
100         my $elems = $args{elements};
101         is($elems->[0]->_repeater, "+1d", "[0] _repeater");
102         is($elems->[1]->_repeater, "+2w", "[1] _repeater");
103         is($elems->[2]->_repeater, "+3m", "[2] _repeater");
104         is($elems->[3]->_repeater, "+4y", "[3] _repeater");
105         is($elems->[4]->_repeater, "++5m", "[4] _repeater");
106         is($elems->[5]->_repeater, ".+6m", "[5] _repeater");
107         is($elems->[6]->_repeater, "+17.1m", "[6] _repeater");
108         is($elems->[6]->_warning_period, "-13.2d", "[6] _warning_period");
109
110         ok($elems->[0]->recurrence->isa('DateTime::Set::ICal'),
111            "[0] recurrence");
112     },
113 );
114
115 test_parse(
116     name => 'time_zone',
117     filter_elements => sub {
118         $_[0]->isa('Org::Element::Timestamp') },
119     parser_opts => {time_zone => 'Asia/Jakarta'},
120     doc  => <<'_',
121 [2011-09-23 Wed]
122 _
123     num => 1,
124     test_after_parse => sub {
125         my %args  = @_;
126         my $doc   = $args{result};
127         my $elems = $args{elements};
128         my $dt    = $elems->[0]->datetime;
129         my $tz    = $dt->time_zone;
130         is($tz->short_name_for_datetime($dt), "WIT", "time zone's short name");
131     },
132 );
133
134 done_testing();