]> git.donarmstrong.com Git - liborg-parser-perl.git/blob - t/setting-todo.t
Import original source of Org-Parser 0.23
[liborg-parser-perl.git] / t / setting-todo.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 Org::Parser;
11 use Test::More 0.96;
12 require "testlib.pl";
13
14 my $NUM_TEST_ITEMS = 4+3+3;
15
16 test_parse(
17     parse_file_args => ["t/data/custom_todo_kw.org"],
18     name => 'setting: TODO',
19     filter_elements => 'Org::Element::Headline',
20     num => 3 + $NUM_TEST_ITEMS,
21     test_after_parse => sub {
22         my (%args) = @_;
23         my $elems = $args{elements};
24         my $num_test_items = 0;
25
26         for my $el (@$elems) {
27             my $title = $el->title->as_string;
28             my $re = qr/(?: (?:([A-Z]+)=([^;]*)) (?:;\s|\z) )/x;
29             my $h = $el->as_string; $h =~ s/\R.*//s;
30             #diag "heading='$h', ".
31             #    "is_todo=".($el->is_todo//0).", is_done=".($el->is_done//0);
32             next unless $title =~ /$re/;
33             $num_test_items++;
34             my %v;
35             while ($title =~ s/$re//) { $v{$1} = $2 }
36             #diag explain \%v;
37             if ($v{RES} =~ /todo/) {
38                 ok( $el->is_todo, "#$num_test_items is a todo ($v{NOTE})");
39             } else {
40                 ok(!$el->is_todo, "#$num_test_items not a todo ($v{NOTE})");
41             }
42             if ($v{RES} =~ /done/) {
43                 ok( $el->is_done, "#$num_test_items is a done ($v{NOTE})");
44             } else {
45                 ok(!$el->is_done, "#$num_test_items not a done ($v{NOTE})");
46             }
47         }
48
49         is($num_test_items, $NUM_TEST_ITEMS, "num_test_items");
50     },
51 );
52
53 done_testing();