#!perl -w use strict; use Test::More; use Text::Xslate; my $tx = Text::Xslate->new(); my %vars = ( xx => { yy => { zz => 42 } }, value => 10, data => [1, 2, 3], a => 10, b => 20, c => 30, ); my @data = ( [ <<'T', <<'X'], <: $xx.yy.zz :> T 42 X [ <<'T', <<'X'], <: $xx .yy.zz :> T 42 X [ <<'T', <<'X'], <: $xx # comment .yy.zz :> T 42 X [ <<'T', <<'X'], <: $xx. yy.zz :> T 42 X [ <<'T', <<'X'], <: $xx. # comment yy.zz :> T 42 X [ <<'T', <<'X'], <: $xx . yy . zz :> T 42 X [ <<'T', <<'X'], <: $a + $b + $c :> T 60 X [<<'T', <<'X'], <: if($value == 10) { print "Hello, world!"; } print "\n"; -:> T Hello, world! X [<<'T', <<'X'], <: for $data -> $item { print "[" ~ $item ~ "]"; } print "\n"; -:> T [1][2][3] X [<<'T', <<'X'], <: given $value -> $it { default { print "[" ~ $it ~ "]"; } } print "\n"; -:> T [10] X [<<'T', <<'X', 'block'], <: for [$value] -> $it { if(1) { print "[" ~ $it ~ "]"; } } print "\n"; -:> T [10] X [<<'T', <<'X', 'no last semicolon'], <: block foo -> { "default value\n" } -:> T default value X [<<'T', '', 'empty block'], <: block foo -> { } -:> T [<<'T', <<'X', 'no last semicolon'], <: block foo -> { "default value\n" } -:> T default value X [<<'T', <<'X', 'finish statement'], <: block foo -> { print "bar\n" } -:> T bar X [<<'T', <<'X', 'multi blocks'], <: block foo -> { print "bar\n" } block bar -> { print "baz\n" } -:> T bar baz X [<<'T', <<'X'], <: my $a = [ 10, 20, 30, ]; print $a[0], "\n"; print $a[1], "\n"; print $a[2], "\n"; -:> T 10 20 30 X [<<'T', <<'X'], <: my $h = { foo => 10, bar => 20, baz => 30, }; print $h.foo, "\n"; print $h.bar, "\n"; print $h.baz, "\n"; -:> T 10 20 30 X ); foreach my $d(@data) { my($in, $out, $msg) = @$d; is eval { $tx->render_string($in, \%vars) }, $out, $msg or diag $in; } done_testing;