use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2);
use Test::More;
BEGIN { plan tests => 7; }
use Texinfo::Parser qw(parse_texi_line parse_texi_piece);
use Texinfo::Common qw(protect_comma_in_tree protect_colon_in_tree
protect_node_after_label_in_tree);
use Texinfo::Convert::Texinfo;
ok(1);
sub run_test($$$$)
{
my $do = shift;
my $in = shift;
my $out = shift;
my $name = shift;
my ($reference_as_text, $reference_as_line);
if ($out) {
($reference_as_text, $reference_as_line) = @$out;
$reference_as_line = $reference_as_text if not defined($reference_as_line);
}
my $tree_as_text = parse_texi_piece(undef, $in);
my $tree_as_line = parse_texi_line(undef, $in);
foreach my $tree ($tree_as_text, $tree_as_line) {
if ($do->{'protect_comma'}) {
$tree = protect_comma_in_tree($tree);
}
if ($do->{'protect_colon'}) {
$tree = protect_colon_in_tree($tree);
}
if ($do->{'protect_node_after_label'}) {
$tree = protect_node_after_label_in_tree($tree);
}
}
my $texi_result_as_text
= Texinfo::Convert::Texinfo::convert_to_texinfo($tree_as_text);
my $texi_result_as_line
= Texinfo::Convert::Texinfo::convert_to_texinfo($tree_as_line);
if (!defined($out)) {
print STDERR " --> $name:\n$texi_result_as_text\n$texi_result_as_line";
} else {
is ($texi_result_as_text, $reference_as_text, "text $name");
is ($texi_result_as_line, $reference_as_line, "line $name");
}
}
run_test({'protect_comma' => 1},
'Some, text,,,@code{,} @asis{, text} @verb{:v,:} @,c',
['Some@comma{} text@comma{}@comma{}@comma{}@code{@comma{}} @asis{@comma{} text} @verb{:v,:} @,c',
undef],
'protect comma');
run_test({'protect_colon' => 1},
'Some :: colons: @code{:} @verb{: in verb::} @:.:',
['Some @asis{::} colons@asis{:} @code{@asis{:}} @verb{: in verb::} @:.@asis{:}',
undef],
'protect colon');
run_test({'protect_node_after_label' => 1},
"\t\t".'., text @code{,.t.} @verb{:, .:} .'."\t t",
# the result when parsed as text is different as the first two spaces are
# before the first paragraph, while there is no paragraph when parsed as line
['@asis{ }@asis{.,} text @code{@asis{,.}t@asis{.}} @verb{:, .:} @asis{. } t',
'@asis{ .,} text @code{@asis{,.}t@asis{.}} @verb{:, .:} @asis{. } t'],
'protect node after label characters');