Template-Alloy

 view release on metacpan or  search on metacpan

t/30_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

our $compile_perl;
our $module = 'Template::Alloy';

use strict;
use Test::More tests => 202;
use constant test_taint => 0 && eval { require Taint::Runtime };

use_ok($module);

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, (COMPILE_PERL => $compile_perl) if $compile_perl;
    my $obj  = shift || $module->new(INCLUDE_PATH => $test_dir, @$conf); # new object each time
    my $out  = '';
    my $line = (caller)[2];
    delete $vars->{'tt_config'};

    Taint::Runtime::taint(\$str) if test_taint;

    $obj->merge(\$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') && $obj->error;
        if ($obj->can('dump_parse_tree')) {
            local $obj->{'SYNTAX'} = 'velocity';
            print $obj->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;

for $compile_perl (0, 1) {
    my $is_compile_perl = "compile perl ($compile_perl)";

###----------------------------------------------------------------###
print "### VARIABLES ####################################### $is_compile_perl\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 ############################################# $is_compile_perl\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'}});



( run in 3.126 seconds using v1.01-cache-2.11-cpan-b301d465b3d )