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 i = 0 -%]
[% WHILE i < 3 -%]
    [% i %]
[% i = i + 1 -%]
[% END -%]
T
    0
    1
    2
X

    [<<'T', <<'X'],
[% SET i = 0 -%]
[% WHILE i < 3 -%]
    [% SET j = 10 -%]
    [% WHILE j < 12 -%]
        [% i %]-[% j %]
        [% j = j + 1 -%]
    [% END -%]
    [% i = i + 1 -%]
[% END -%]
T
        0-10
        0-11
        1-10
        1-11
        2-10
        2-11
X

    [<<'T', <<'X'],
[% set i = 0 -%]
[% while i < 3 -%]
    [% i %]
[% i = i + 1 -%]
[% end -%]
T
    0
    1
    2
X

    [<<'T', <<'X'],
[% set i = 0 -%]
[% while !(i == 3) -%]
    [% i %]
[% i = i + 1 -%]
[% end -%]
T
    0
    1
    2
X

    [<<'T', <<'X'],
[% set i = 0 -%]
[% while !!!(i == 3) -%]
    [% i %]
[% i = i + 1 -%]
[% end -%]
T
    0
    1
    2
X

    [<<'T', <<'X'],
[% set i = 0 -%]
[% while not(i == 3) -%]
    [% i %]
[% i = i + 1 -%]
[% end -%]
T
    0
    1
    2
X

);

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

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

    is join(' ', split ' ', render_str($in, \%vars)),
       join(' ', split ' ', $out), $msg
            or diag $in;
}

done_testing;