#!/usr/bin/perl
use strict;
use warnings;
use File::Spec;
use FindBin qw($Bin);
use LaTeX::TOM;
use Test::More tests => 56;
my $parser = LaTeX::TOM->new;
my $tree = $parser->parseFile(File::Spec->catfile($Bin, 'data', 'tex.in'));
my @expected_all = (
[ 'TEXT', '' ],
[ 'COMMAND', 'NeedsTeXFormat' ],
[ 'TEXT', 'LaTeX2e' ],
[ 'TEXT', "\n" ],
[ 'COMMAND', 'documentclass' ],
[ 'TEXT', 'book' ],
[ 'TEXT', "\n" ],
[ 'COMMAND', 'title' ],
[ 'TEXT', 'Some Test Doc' ],
[ 'TEXT', "\n" ],
[ 'ENVIRONMENT', 'document' ],
[ 'TEXT', "\n"
. " \\maketitle\n"
. " \\mainmatter\n"
. " " ],
[ 'COMMAND', 'chapter*' ],
[ 'TEXT', "Preface" ],
[ 'TEXT', "\n " ],
[ 'COMMAND', 'input' ],
[ 'TEXT', 't/data/input.tex' ],
[ 'TEXT', "\n" ],
[ 'TEXT', "\n" ],
);
my @expected_top = (
[ 'TEXT', '' ],
[ 'COMMAND', 'NeedsTeXFormat' ],
[ 'TEXT', "\n" ],
[ 'COMMAND', 'documentclass' ],
[ 'TEXT', "\n" ],
[ 'COMMAND', 'title' ],
[ 'TEXT', "\n" ],
[ 'ENVIRONMENT', 'document' ],
[ 'TEXT', "\n" ],
[ 'TEXT', "\n"
. " \\maketitle\n"
. " \\mainmatter\n"
. " " ],
);
verify_nodes(@{$tree->getAllNodes}, \@expected_all);
verify_nodes($tree->getTopLevelNodes, \@expected_top);
sub verify_nodes
{
my $expected = pop;
my @nodes = @_;
foreach my $node (@nodes) {
my $node_type = $node->getNodeType;
my $expected = shift @$expected;
my $desc = $expected->[1];
my $cnt = 0;
$cnt++ while $desc =~ /\n/g;
if (!length $desc) {
$desc = 'undef';
}
elsif ($cnt >= 1 && $desc !~ /\w/) {
$desc = 'newline';
$desc .= 's' if $cnt > 1;
}
else {
$desc =~ s/\n//g;
$desc =~ tr/ //d;
}
if (my ($type) = $node_type =~ /^(TEXT|COMMENT)$/) {
ok($expected->[0] =~ $type, $type);
ok($expected->[1] eq $node->getNodeText, $desc);
}
elsif ($node_type eq 'ENVIRONMENT') {
ok($expected->[0] =~ $node_type, $node_type);
ok($expected->[1] eq $node->getEnvironmentClass, $desc);
}
elsif ($node_type eq 'COMMAND') {
ok($expected->[0] =~ $node_type, $node_type);
ok($expected->[1] =~ $node->getCommandName, $desc);
}
}
}