Template-Parser-CET
view release on metacpan or search on metacpan
t/7_template_06_velocity.t view on Meta::CPAN
# -*- Mode: Perl; -*-
=head1 NAME
05_velocity.t - Test the ability to parse and play VTL (Velocity Template Language)
=cut
use strict;
use Template;
use Template::Parser::CET;
Template::Parser::CET->activate;
use Test::More tests => 87;
use constant test_taint => 0 && eval { require Taint::Runtime };
Taint::Runtime::taint_start() if test_taint;
### find a place to allow for testing
my $test_dir = $0 .'.test_dir';
END { rmdir $test_dir }
mkdir $test_dir, 0755;
ok(-d $test_dir, "Got a test dir up and running");
sub process_ok { # process the value and say if it was ok
my $str = shift;
my $test = shift;
my $vars = shift || {};
my $conf = local $vars->{'tt_config'} = $vars->{'tt_config'} || [];
push(@$conf, 'SYNTAX', 'velocity') if ! grep {/SYNTAX/i} @$conf;
push @$conf, 'INCLUDE_PATH', $test_dir;
my $obj = shift || Template->new(@$conf); # new object each time
my $out = '';
my $line = (caller)[2];
delete $vars->{'tt_config'};
Taint::Runtime::taint(\$str) if test_taint;
$obj->process(\$str, $vars, \$out);
my $ok = ref($test) ? $out =~ $test : $out eq $test;
if ($ok) {
ok(1, "Line $line \"$str\" => \"$out\"");
return $obj;
} else {
ok(0, "Line $line \"$str\"");
warn "# Was:\n$out\n# Should've been:\n$test\n";
print $obj->error if $obj->can('error');
print Template::Alloy->dump_parse_tree(\$str);
exit;
}
}
### create some files to include
my $foo_template = "$test_dir/foo.vel";
END { unlink $foo_template };
open(my $fh, ">$foo_template") || die "Couldn't open $foo_template: $!";
print $fh "Good Day!";
close $fh;
### create some files to include
my $bar_template = "$test_dir/bar.vel";
END { unlink $bar_template };
open($fh, ">$bar_template") || die "Couldn't open $bar_template: $!";
print $fh "(\$bar)";
close $fh;
###----------------------------------------------------------------###
print "### VARIABLES ########################################################\n";
process_ok("Foo" => "Foo");
process_ok('$mud_Slinger_9' => "bar", {mud_Slinger_9 => 'bar'});
process_ok('$!mud_Slinger_9' => "bar", {mud_Slinger_9 => 'bar'});
process_ok('${mud_Slinger_9}' => "bar", {mud_Slinger_9 => 'bar'});
process_ok('$!{mud_Slinger_9}' => "bar", {mud_Slinger_9 => 'bar'});
#process_ok('$mud_Slinger_9<<' => "\$mud_Slinger_9<<", {});
process_ok('$!mud_Slinger_9<<' => "<<", {});
#process_ok('${mud_Slinger_9}<<' => "\${mud_Slinger_9}<<", {});
process_ok('$!{mud_Slinger_9}<<' => "<<", {});
###----------------------------------------------------------------###
print "### SET ##############################################################\n";
process_ok('#set($foo = "bar")$foo' => 'bar');
process_ok('#set($monkey = $bill)$monkey' => 'Bill', {bill => 'Bill'});
process_ok('#set($monkey.Friend = \'monica\')$monkey.Friend' => 'monica');
process_ok('#set($monkey.Blame = $whitehouse.Leak)$monkey.Blame' => 'from_velocity_ref_guide', {whitehouse => {Leak => 'from_velocity_ref_guide'}});
process_ok('#set($monkey.Plan = $spindoctor.weave($web))$monkey.Plan' => '(spider)', {spindoctor => {weave => sub {"($_[0])"}}, web => 'spider'});
process_ok('#set($monkey.Number = 123)$monkey.Number' => '123');
process_ok('#set($monkey.Numbers = [1..3])$monkey.Numbers.2' => '3');
process_ok('#set($monkey.Map = {"banana" : "good"})$monkey.Map.banana' => 'good');
( run in 2.268 seconds using v1.01-cache-2.11-cpan-5e09290becf )