blob: ae69af59f43552276dec1b23fb9ae97dc1c57e50 (
plain) (
tree)
|
|
#!/usr/bin/env perl
use strict;
use warnings;
use lib 't/lib';
use Test::More;
use Test::Handlebars;
use Test::Requires 'JSON', 'Path::Class';
for my $file (dir('t', 'mustache-spec', 'specs')->children) {
next unless $file =~ /\.json$/;
my $tests = decode_json($file->slurp);
note("running " . $file->basename . " tests");
for my $test (@{ $tests->{tests} }) {
local $TODO = "unimplemented"
if $file->basename eq 'partials.json'
&& $test->{name} =~ /standalone/i
&& $test->{name} !~ /line endings/i;
render_ok(
($test->{partials}
? ({
suffix => '.mustache',
path => [
map { +{ "$_.mustache" => $test->{partials}{$_} } }
keys %{ $test->{partials} }
]
})
: ()),
$test->{template},
fix_data($test->{data}),
$test->{expected},
"$test->{name}: $test->{desc}"
);
}
}
sub fix_data {
my ($data) = @_;
if (ref($data) eq 'HASH') {
if ($data->{__tag__} && $data->{__tag__} eq 'code') {
return eval $data->{perl};
}
else {
return { map { $_ => fix_data($data->{$_}) } keys %$data };
}
}
elsif (ref($data) eq 'ARRAY') {
return [ map { fix_data($_) } @$data ];
}
else {
return $data;
}
}
done_testing;
|