#!perl -w use strict; use Test::More; use Text::Clevery; use Text::Clevery::Parser; my $tc = Text::Clevery->new(verbose => 2); my @set = ( [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=foo name=bar -} {$smarty.foreach.bar.index} {$foo} {/foreach -} T 0 int 1 str 2 object X [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=foo name=bar -} {$smarty.foreach.bar.iteration} {$foo} {/foreach -} T 1 int 2 str 3 object X [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=foo name=bar -} {$smarty.foreach.bar.iteration} {$foo} {/foreach -} ({$smarty.foreach.bar.total}) T 1 int 2 str 3 object (3) X [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=foo name=bar -} {if $smarty.foreach.bar.first -} -------- {/if -} {$smarty.foreach.bar.iteration} {$foo} {if $smarty.foreach.bar.last -} -------- {/if -} {/foreach -} T -------- 1 int 2 str 3 object -------- X [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=i0 name=i0 -} {foreach from=$types item=i1 name=i1 -} {$smarty.foreach.i0.index}:{$i0} {$smarty.foreach.i1.index}:{$i1} {/foreach -} {/foreach -} T 0:int 0:int 0:int 1:str 0:int 2:object 1:str 0:int 1:str 1:str 1:str 2:object 2:object 0:int 2:object 1:str 2:object 2:object X [<<'T', {types => [qw(int str object)]}, <<'X'], {foreach from=$types item=foo name=bar -} {$smarty.foreach.bar.index} {$foo} {foreachelse -} unlikely {/foreach -} T 0 int 1 str 2 object X [<<'T', {types => []}, <<'X'], {foreach from=$types item=foo name=bar -} unlikely {foreachelse -} the array is empty {/foreach -} T the array is empty X [<<'T', {types => undef}, <<'X'], {foreach from=$types item=foo name=bar-} unlikely {foreachelse -} the array is empty {/foreach -} T the array is empty X ); for my $d(@set) { my($source, $vars, $expected, $msg) = @{$d}; is eval { $tc->render_string($source, $vars) }, $expected, $msg or do { ($@ && diag $@); diag $source }; } done_testing;