#!perl use 5.010; use strict; use warnings; use experimental 'smartmatch'; use FindBin '$Bin'; use lib $Bin, "$Bin/t"; use Org::Parser; use Test::More 0.96; require "testlib.pl"; test_parse( name => 'non-setting (missing +)', filter_elements => 'Org::Element::Setting', doc => <<'_', #TODO: A B | C _ num => 0, ); test_parse( name => 'non-setting (not on first column)', filter_elements => 'Org::Element::Setting', doc => <<'_', #+TODO: A B | C _ num => 0, ); test_parse( name => 'syntax error (missing colon, becomes comment)', filter_elements => 'Org::Element::Setting', doc => <<'_', #+TODO A B | C _ dies => 0, num => 0, ); test_parse( name => 'unknown setting', filter_elements => 'Org::Element::Setting', doc => <<'_', #+FOO: bar _ dies => 1, ); test_parse( name => 'FILETAGS: argument syntax error', filter_elements => 'Org::Element::Setting', doc => <<'_', #+FILETAGS: a: _ dies => 1, ); test_parse( name => 'FILETAGS: basic tests', filter_elements => 'Org::Element::Setting', doc => <<'_', #+FILETAGS: :tag1:tag2:tag3: _ num => 1, test_after_parse => sub { my %args = @_; my $doc = $args{result}; my $elems = $args{elements}; is($elems->[0]->name, "FILETAGS", "name"); is($elems->[0]->args->[0], ":tag1:tag2:tag3:", "args[0]"); }, ); test_parse( name => 'PRIORITIES: basic tests', filter_elements => 'Org::Element::Setting', doc => <<'_', #+PRIORITIES: A1 A2 B1 B2 C1 C2 _ num => 1, test_after_parse => sub { my %args = @_; my $doc = $args{result}; my $elems = $args{elements}; is($elems->[0]->name, "PRIORITIES", "name"); is_deeply($elems->[0]->args, [qw/A1 A2 B1 B2 C1 C2/], "args"); is_deeply($doc->priorities, [qw/A1 A2 B1 B2 C1 C2/], "document's priorities attribute"); }, ); test_parse( name => 'DRAWERS: basic tests', filter_elements => 'Org::Element::Setting', doc => <<'_', #+DRAWERS: D1 D2 _ num => 1, test_after_parse => sub { my %args = @_; my $doc = $args{result}; my $elems = $args{elements}; is($elems->[0]->name, "DRAWERS", "name"); ok("D1" ~~ @{$doc->drawer_names}, "D1 added to list of known drawers"); ok("D2" ~~ @{$doc->drawer_names}, "D2 added to list of known drawers"); ok("CLOCK" ~~ @{$doc->drawer_names}, "default drawers still known"); }, ); test_parse( name => 'indentable_elements (not indentable)', filter_elements => 'Org::Element::Setting', doc => <<'_', #+TODO: A | B C #+TODO: D E | F _ num => 1, ); test_parse( name => 'indentable_elements (not indentable, test text)', filter_elements => 'Org::Element::Text', doc => <<'_', #+TODO: A | B C #+TODO: D E | F _ num => 1, test_after_parse => sub { my (%args) = @_; my $elems = $args{elements}; is($elems->[0]->as_string, " #+TODO: D E | F\n", "text"); }, ); test_parse( name => 'indentable_elements (indentable)', filter_elements => 'Org::Element::Setting', doc => <<'_', #+TBLFM: @2$1=@1$1 #+tblfm: @3$1=@1$1 _ num => 2, test_after_parse => sub { my (%args) = @_; my $elems = $args{elements}; is($elems->[1]->indent, " ", "indent attribute"); }, ); done_testing();