| use strict; |
| |
| use lib '.'; |
| use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2); |
| |
| use Test::More; |
| |
| BEGIN { plan tests => 13; } |
| |
| use Texinfo::Parser qw(parse_texi_line); |
| use Texinfo::Common; |
| |
| ok(1, "modules loading"); |
| |
| my ($before, $after, $braces_count) |
| = Texinfo::Common::_find_end_brace(" aa (bbb ()ccc)(g))j (gg", 1); |
| is ($before, " aa (bbb ()ccc)(g))", "before with brace closed"); |
| is ($after, "j (gg", "after with brace closed"); |
| ok ($braces_count == 0, "braces count 0 with brace closed"); |
| my $string_no_close = " kjsdf ( k)lj("; |
| ($before, $after, $braces_count) |
| = Texinfo::Common::_find_end_brace($string_no_close, 2); |
| ok (($braces_count == 3 and $before eq $string_no_close and !defined($after)), |
| "more braces opened"); |
| my $string_no_brace = " other "; |
| ($before, $after, $braces_count) |
| = Texinfo::Common::_find_end_brace($string_no_brace, 1); |
| ok (($braces_count == 1 and $before eq $string_no_brace and !defined($after)), |
| "no brace in text"); |
| my $string_open_brace_and_text = " (other "; |
| ($before, $after, $braces_count) |
| = Texinfo::Common::_find_end_brace($string_open_brace_and_text, 1); |
| ok (($braces_count == 2 and $before eq $string_open_brace_and_text |
| and !defined($after)), "more braces opened and text"); |
| |
| |
| sub _find_text($) |
| { |
| my $root = shift; |
| my $current = $root; |
| while ($current->{'type'} and ($current->{'type'} eq 'root_line' |
| # following could be useful if parse_texi_piece is used |
| or $current->{'type'} eq 'before_node_section' |
| or $current->{'type'} eq 'document_root' |
| or $current->{'type'} eq 'paragraph')) { |
| $current = $current->{'contents'}->[0]; |
| } |
| if (not exists($current->{'text'})) { |
| return undef; |
| } |
| return $current; |
| } |
| |
| sub run_test($$$$) |
| { |
| my $in = shift; |
| my $initial_brace_count = shift; |
| my $ref_braces_count = shift; |
| my $name = shift; |
| |
| my $tree = parse_texi_line(undef, $in); |
| my $text_element = _find_text($tree); |
| |
| my $braces_count |
| = Texinfo::Common::_count_opened_tree_braces($text_element, $initial_brace_count); |
| if (!defined($ref_braces_count)) { |
| print STDERR " --> $name ($in): $braces_count\n"; |
| } else { |
| is ($braces_count, $ref_braces_count, $name); |
| } |
| } |
| |
| run_test(')', 1, 0, 'brace closed'); |
| run_test('(dir)', 0, 0, 'text in brace'); |
| run_test('ab(sdffsd) other(gg))', 1, 0, 'one initial all closed'); |
| run_test('(sdffsd)) aaa', 1, 0, 'too much braces'); |
| run_test('aaa) ) ( ', 2, 0, 'more reopened'); |
| run_test(' aaa) ( (', 2, 3, 'still open'); |
| |
| # Note: these tests are disabled because the code doesn't look at |
| # parentheses nested inside commands. The run_test() functions would |
| # have to be modified to handle tree with @-commands |
| |
| # run_test('@code{(sdffsd)} other @code{(gg} ))', 1, 0, 'brace in code'); |
| # run_test('@code{(sdffsd)) aaa}', 1, 0, 'too much braces'); |
| # run_test(' aaa) @asis{)} @code{( (}', 2, 0, 'more reopened'); |
| # run_test(' aaa) @asis{} @code{( (}', 2, 3, 'still open'); |
| |
| |