The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use Test::More;

use t::lib::TTSimple;
use Text::Xslate::Util qw(p);

my @data = (
    [<<'T', <<'X'],
[% SET lang = 'TTerse' -%]
Hello, [% lang %] world!
T
Hello, TTerse world!
X

    [<<'T', <<'X'],
[% SET lang = 'TTerse', foo = "bar" -%]
Hello, [% lang %] world!
Hello, [% foo %] world!
T
Hello, TTerse world!
Hello, bar world!
X

    [<<'T', <<'X'],
[% SET a = 10
       b = 20
       c = 30

-%]
a = [% a %]
b = [% b %]
c = [% c %]
T
a = 10
b = 20
c = 30
X

    [<<'T', <<'X', 'lexical scoped'],
[% MACRO foo BLOCK %]
    [% SET lang = "TTerse" -%]
    Hello, [% lang %] world!
[% END -%]
    Hello, [% lang %] world!
T
    Hello, Xslate world!
X

    [<<'T', <<'X', 'lexical scoped (macro)'],
[% MACRO foo BLOCK -%]
[%- SET lang = "TTerse" -%]
    Hello, [% lang %] world!
[% END -%]
    [%- foo() -%]
    Hello, [% lang %] world!
T
    Hello, TTerse world!
    Hello, Xslate world!
X

    # http://github.com/gfx/p5-Text-Xslate/issues#issue/9
    [<<'T', <<'X', 'issue #9'],
[%- SET lang = "TTerse" -%]
[%- MACRO foo BLOCK -%]
[%- lang -%]
[%- END -%]
    Hello, [%- foo() -%] world!
T
    Hello, TTerse world!
X

#    [<<'T', <<'X', 'lexical scoped (for)'],
#[% FOR item IN [1] %]
#[%- SET lang = "TTerse" -%]
#    Hello, [% lang %] world!
#[% END -%]
#    Hello, [% lang %] world!
#T
#    Hello, TTerse world!
#    Hello, Xslate world!
#X


    [<<'T', <<'X', 'set x 2'],
[% SET lang = 'TTerse' -%]
[% SET lang = 'Perl' -%]
Hello, [% lang %] world!
T
Hello, Perl world!
X

    [<<'T', <<'X', 'assignment'],
[% lang = 'Perl' -%]
Hello, [% lang %] world!
T
Hello, Perl world!
X

    [<<'T', <<'X', 'assignment x 2'],
[% lang = 'TTerse' -%]
[% lang = 'Perl' -%]
Hello, [% lang %] world!
T
Hello, Perl world!
X

    [<<'T', <<'X', 'assignment x 2'],
[% lang = "/" _ lang _ "/" -%]
Hello, [% lang %] world!
T
Hello, /Xslate/ world!
X

    [<<'T', <<'X', 'DEFAULT' ],
[% DEFAULT lang = 'TTerse' -%]
Hello, [% lang %] world!
T
Hello, Xslate world!
X

    [<<'T', <<'X', 'DEFAULT' ],
[% DEFAULT dialect = 'TTerse' -%]
Hello, [% dialect %] world!
T
Hello, TTerse world!
X

    [<<'T', <<'X', 'lower cased'],
[% set lang = 'TTerse' -%]
Hello, [% lang %] world!
T
Hello, TTerse world!
X

    [<<'T', <<'X' ],
[% default lang = 'TTerse' -%]
Hello, [% lang %] world!
T
Hello, Xslate world!
X

    [<<'T', <<'X', 'chained assignment', 1],
[% foo = bar = 'TTerse' -%]
Hello, [% foo %] world!
Hello, [% bar %] world!
T
Hello, TTerse world!
Hello, TTerse world!
X

);

my %vars = (lang => 'Xslate', foo => '<bar>', '$lang' => 'XXX');
my $orig = p(\%vars);

foreach my $d(@data) {
    my($in, $out, $msg, $is_tterse_specific) = @$d;

    last if $is_tterse_specific && $ENV{USE_TT};

    is render_str($in, \%vars), $out, $msg
        or diag $in;

    is p(\%vars), $orig, '%vars is not changed';
}

done_testing;