The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use utf8;
use Test::More;
use File::Spec::Functions qw/catfile/;
use Template::Flute;
use Data::Dumper;

my @testfiles = (qw/admin
                    checkout-giftinfo
                    checkout-payment
                    product
                    registration
                   /);

plan tests => scalar(@testfiles) * 4;

foreach my $file (@testfiles) {
    diag "Testing $file";
    my $flute = Template::Flute->new(
                                     template_file => get_good_template($file),
                                     specification_file => get_good_spec($file),
                                    );
    ok($flute->process, "HTML produced");
    my @errors = $flute->specification->dangling;
    is_deeply(\@errors, [], "No errors found");
    $flute = Template::Flute->new(
                                  template_file => get_bad_template($file),
                                  specification_file => get_bad_spec($file),
                                 );
    ok($flute->process, "HTML produced");
    @errors = $flute->specification->dangling;
    # diag Dumper(\@errors);
    ok(@errors, "Consistency check fails");
}

sub get_good_template {
    my $f = shift;
    return getfile($f, 'good', '.html');
}

sub get_good_spec {
    my $f = shift;
    return getfile($f, 'good', '.xml');
}

sub get_bad_template {
    my $f = shift;
    return getfile($f, 'bad', '.html');
}

sub get_bad_spec {
    my $f = shift;
    return getfile($f, 'bad', '.xml');
}

sub getfile {
    my ($f, $dir, $ext) = @_;
    my $file = catfile(t => testfiles => $dir, $f . $ext);
    die "$file not found!" unless (-f $file);
    return $file;
}