# -*- Mode: Perl; -*-

use vars qw($module);
BEGIN {
    $module = 'Template';
};

use strict;
use Test::More tests => 15;
use_ok($module);

my $vars = {
    GET => 'named_get',
    get => 'lower_named_get',
    named_get => 'value of named_get',
    hold_get => 'GET',
};

###----------------------------------------------------------------###

sub process_ok { # process the value and say if it was ok
    my $str  = shift;
    my $test = shift;
    my $vars = shift;
    my $obj  = shift || $module->new(@{ $vars->{tt_config} || [] }); # new object each time
    my $out  = '';
    $obj->process(\$str, $vars, \$out);
    my $ok = ref($test) ? $out =~ $test : $out eq $test;
    print "-----------------------------------------\n" if ! $ok;
    ok($ok, "\"$str\" => \"$out\"" . ($ok ? '' : " - should've been \"$test\""));
    my $line = (caller)[2];
    warn "#   process_ok called at line $line.\n" if ! $ok;
    print "-----------------------------------------\n" if ! $ok;
}

###----------------------------------------------------------------###

process_ok("[% GET %]" => '', $vars);
process_ok("[% GET GET %]" => 'named_get', $vars);
process_ok("[% GET get %]" => 'lower_named_get', $vars);

process_ok("[% GET = 1 %][% GET GET %]" => '', $vars);
process_ok("[% SET GET = 1 %][% GET GET %]" => '1', $vars);

process_ok("[% foo = {GET => 1} %][% foo.\$hold_get %]" => '1', $vars);

process_ok("[% 'GET' %]" => 'GET');
process_ok("[% GETS %]1" => '1');

process_ok("[% GET \$hold_get %]" => 'named_get', $vars);
process_ok("[% GET \$GET %]" => 'value of named_get', $vars);
process_ok("[% BLOCK GET %]hi[% END %][% PROCESS GET %]" => 'hi');
process_ok("[% BLOCK foo %]hi[% END %][% PROCESS foo a = GET %]" => 'hi', $vars);
process_ok("[% BLOCK foo %]hi[% END %][% PROCESS foo GET = 1 %]" => '');
process_ok("[% BLOCK foo %]hi[% END %][% PROCESS foo IF GET %]" => 'hi', $vars);

