File: 04-node.t

package info (click to toggle)
liblatex-tom-perl 1.06-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid
  • size: 304 kB
  • sloc: perl: 1,787; makefile: 2
file content (97 lines) | stat: -rwxr-xr-x 2,916 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/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);
        }
    }
}