#!perl
use 5.010;
use strict;
use warnings;
use FindBin '$Bin';
use lib $Bin, "$Bin/t";
use Org::Parser;
use Test::More 0.96;
require "testlib.pl";
test_parse(
name => 'text basic tests',
filter_elements => 'Org::Element::Text',
doc => <<'_',
* just some heading, not bold*
0) this is normal.
*1) this /is/ bold.*
/3) this *is* italic./
_5) this is underline._
+7) this is strike-through.+
=9) this is code.=
~11) this is verbatim.~
unparsed: *ends with spaces *, / start with space/, =no ending. no starting.~
_
num => 14,
test_after_parse => sub {
my %args = @_;
my $doc = $args{result};
my $elems = $args{elements};
#diag(explain [map {$_->as_string} @$elems]);
ok(!$elems->[ 0]->style, "elem 0 normal");
is( $elems->[ 1]->style, "B", "elem 2 bold");
is( $elems->[ 3]->style, "I", "elem 2 italic");
is( $elems->[ 5]->style, "U", "elem 2 underline");
is( $elems->[ 7]->style, "S", "elem 2 strike-through");
is( $elems->[ 9]->style, "C", "elem 2 code");
is( $elems->[11]->style, "V", "elem 2 verbatim");
ok(!$elems->[12]->style, "elem 13 normal");
# elem [13] = headline's title (text)
is( $elems->[ 0]->as_string, "0) this is normal.\n",
"normal as_string");
is( $elems->[ 1]->as_string, "*1) this /is/ bold.*",
"bold as_string");
is( $elems->[ 3]->as_string, "/3) this *is* italic./",
"italic as string");
is( $elems->[ 5]->as_string, "_5) this is underline._",
"underline as_string");
is( $elems->[ 7]->as_string, "+7) this is strike-through.+",
"strike-through as_string");
is( $elems->[ 9]->as_string, "=9) this is code.=",
"code as_string");
is( $elems->[11]->as_string, "~11) this is verbatim.~",
"verbatim as_string");
},
);
# emacs allows ( and { as well as whitespace to start markup
test_parse(
name => 'markup start characters',
filter_elements => 'Org::Element::Text',
doc => <<'_',
_underlined_
_underlined_
(_underlined_)
{_underlined_}
<_not underlined_>
[_not underlined_]
_
num => 6, # should be 8, curly does not work yet
test_after_parse => sub {
my %args = @_;
my $doc = $args{result};
my $elems = $args{elements};
note(explain [map {$_->as_string} @$elems]);
is( $elems->[ 0]->style, "U");
is( $elems->[ 2]->style, "U");
is( $elems->[ 4]->style, "U");
#is( $elems->[ 6]->style, "U");
},
);
# emacs only allows a single newline in markup
test_parse(
name => 'max newlines',
filter_elements => 'Org::Element::Text',
doc => <<'_',
=this is
still code=
=this is
no longer
code=
_
num => 2,
test_after_parse => sub {
my %args = @_;
my $doc = $args{result};
my $elems = $args{elements};
#diag(explain [map {$_->as_string} @$elems]);
is( $elems->[0]->style, "C", "elem 0 code");
ok(!$elems->[1]->style, "elem 1 normal");
is( $elems->[0]->as_string, "=this is\nstill code=",
"elem 0 as_string");
is( $elems->[1]->as_string, "\n\n=this is\nno longer\ncode=\n",
"elem 1 as_string");
},
);
# markup can contain links, even *[[link][description with * in it]]*. also
# timestamp, etc.
test_parse(
name => 'link inside markup',
filter_elements => 'Org::Element::Text',
doc => <<'_',
*bolded [[link]]*
_
test_after_parse => sub {
my %args = @_;
my $doc = $args{result};
my $elems = $args{elements};
is($elems->[0]->style, "B", "elem 0 bold");
is($elems->[0]->children->[0]->as_string, "bolded ",
"bolded text");
is(ref($elems->[0]->children->[1]), "Org::Element::Link",
"link inside bolded");
},
);
done_testing();