#!/usr/bin/perl
use strict;
use warnings;
use constant true => 1;
use constant false => 0;
use File::Spec;
use FindBin qw($Bin);
use LaTeX::TOM;
use Test::More tests => 6;
my $set_input = sub { ${$_[0]} =~ s/\$INPUT/\\input{$_[1]}/ };
my $abs_path = File::Spec->catfile($Bin, 'data', 'input.t');
my $rel_path = File::Spec->abs2rel($abs_path);
my $parser = LaTeX::TOM->new(0,1,0);
my $data = do { local $/; <DATA> };
my @tests = (
# input file # tex file # message # input file must exist
[ '00-image_skip.pstex_t', undef, 'skip pstex' , true ],
[ '01-basic.tex', '01-basic.in', 'basic' , true ],
[ '02-guess', '02-guess.in', 'guess' , false ], # file extension for '02-guess' missing on purpose
[ '03-empty.tex', '03-empty.in', 'empty', true ],
[ '04-psfig_ignore.tex', undef, 'ignore Psfig', true ],
);
SKIP:
{
skip 'test for release testing', 1 unless $ENV{RELEASE_TESTING};
# Check that all input files exist or bogus results may ensue.
my $exist = true;
foreach my $test (@tests) {
my ($input_file, $must_exist) = @$test[0,3];
if ($must_exist) {
$exist &= -e File::Spec->catfile($abs_path, $input_file) ? true : false;
}
}
ok($exist, '\input test files exist');
}
sub check_unaltered_tex
{
my $input_file = $_[0]->[0];
$input_file = File::Spec->catfile($rel_path, $input_file);
my $tex = $data;
$set_input->(\$tex, $input_file);
my $tree = $parser->parse($tex);
return scalar grep /\\input\{\Q$input_file\E\}/, split /\n/, $tree->toLaTeX;
}
{
my $skipped = check_unaltered_tex($tests[0]);
my $message = $tests[0]->[2];
ok($skipped, $message);
}
{
foreach my $test (@tests[1..3]) {
my ($input_file, $tex_file, $message) = @$test;
$input_file = File::Spec->catfile($rel_path, $input_file);
$tex_file = File::Spec->catfile($abs_path, $tex_file);
my $tex = $data;
$set_input->(\$tex, $input_file);
my $tree_string = $parser->parse($tex);
my $tree_file = $parser->parseFile($tex_file);
is_deeply(
[ grep /\S/, split /\n/, $tree_string->toLaTeX ],
[ grep /\S/, split /\n/, $tree_file->toLaTeX ],
$message);
}
}
{
my $seen_warning = false;
local $SIG{__WARN__} = sub
{
warn $_[0] and return unless $_[0] =~ /^ignoring Psfig/;
$seen_warning = true;
};
my $ignored = check_unaltered_tex($tests[4]);
my $message = $tests[4]->[2];
ok($ignored && $seen_warning, $message);
}
__DATA__
\documentclass[10pt]{article}
\begin{document}
$INPUT
\end{document}