blob: 4fffc8c266b8c63e0477efb435d719654c308615 [file] [log] [blame]
use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2);
use Test::More;
BEGIN { plan tests => 6; }
use Texinfo::Transformations;
use Texinfo::Parser qw(parse_texi_text);
use Texinfo::Convert::Texinfo;
use Texinfo::Document;
ok(1, "modules loading");
sub test_correction($$$;$)
{
my $in = shift;
my $out = shift;
my $name = shift;
# if set, test _correct_level instead of fill_gaps_in_sectioning
my $test_correct_level = shift;
my $document = parse_texi_text(undef, $in);
my $tree = $document->tree();
if (! defined($test_correct_level)) {
Texinfo::Transformations::fill_gaps_in_sectioning($tree);
} else {
# If set to 0, undef to mimic not giving the argument
$test_correct_level = undef if (!$test_correct_level);
# the sectioning command is always $tree->{'contents'}->[1], while
# $tree->{'contents'}->[0] is the before_sections container,
# which contains the raise/lowersections that modify the
# sectioning command.
# Add the level corrections corresponding to the sectioning command
# to before_sections.
Texinfo::Transformations::_correct_level($tree->{'contents'}->[1],
$tree->{'contents'}->[0],
$test_correct_level);
}
# rebuild the tree
$tree = $document->tree();
{
local $Data::Dumper::Purity = 1;
#local $Data::Dumper::Maxdepth = 2;
local $Data::Dumper::Indent = 1;
#print STDERR Data::Dumper->Dump([$tree]);
}
my $texi_result
= Texinfo::Convert::Texinfo::convert_to_texinfo($tree);
if (!defined($out)) {
print STDERR " --> $name:\n$texi_result";
} else {
is($texi_result, $out, $name);
}
}
my $with_XS = ((not defined($ENV{TEXINFO_XS})
or $ENV{TEXINFO_XS} ne 'omit')
and (!defined $ENV{TEXINFO_XS_PARSER}
or $ENV{TEXINFO_XS_PARSER} eq '1'));
SKIP:
{
skip "test perl not XS", 2 if ($with_XS);
test_correction('@raisesections
@section truc
', '@raisesections
@lowersections
@section truc
', 'correct level one raised section', 0);
# With -1, the commands added go from the normal level to the modified level
# of the chapter. It is therefore the same commands as the commands setting
# the chapter level that are added.
test_correction('@lowersections
@lowersections
@chapter truc
', '@lowersections
@lowersections
@lowersections
@lowersections
@chapter truc
', 'correct level from normal to section, two lowered', -1);
}
test_correction('@chapter chap
@subsection sub
','@chapter chap
@unnumberedsec @asis{}
@subsection sub
', 'simple completed tree');
my $raisesections_lowersection_no_correction_text = '@raisesections
@section sec
@lowersections
@lowersections
@chapter chap
';
test_correction($raisesections_lowersection_no_correction_text,
$raisesections_lowersection_no_correction_text,
'raisesections and lowersections, no correction');
test_correction('@raisesections
@section sec
@lowersections
@lowersections
@lowersections
@chapter chap
', '@raisesections
@section sec
@lowersections
@lowersections
@lowersections
@raisesections
@raisesections
@unnumberedsec @asis{}
@lowersections
@lowersections
@chapter chap
', 'raisesections lowersections with correction');