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 Text::Xslate;

my $tx = Text::Xslate->new();

my @data = (
    ['<:= $var[ $foo && "bar" ] :>', 'BAR'],
    ['<:= $var[ $foo || "bar" ] :>', 'FOO'],

    ['<:= $var[ "foo" && "bar" ] :>', 'BAR'],
    ['<:= $var[ "foo" || "bar" ] :>', 'FOO'],

    ['<:= $var[ $foo == "foo" ? "bar" : "baz" ] :>', 'BAR'],
    ['<:= $var[ $foo != "foo" ? "bar" : "baz" ] :>', 'BAZ'],

    ['<:= $ary[ 0+0 ] :>', 10],
    ['<:= $ary[ 0+1 ] :>', 20],
    ['<:= $ary[ 1+1 ] :>', 30],

    ['<:= $ary[ 0-0 ] :>', 10],
    ['<:= $ary[ 2-1 ] :>', 20],
    ['<:= $ary[ 3-1 ] :>', 30],

    ['<:= $ary[ +0 ] :>', 10],
    ['<:= $ary[ -0 ] :>', 10],

    ['<:= $ary[ +0.0 ] :>', 10],
    ['<:= $ary[ -0.0 ] :>', 10],

    ['<:= $var[ $ary[3] ] :>', "FOO"],
);

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

    my %vars = (
        var => { foo => 'FOO', bar => 'BAR', baz => "BAZ" },

        ary => [10, 20, 30, "foo"],

        foo => 'foo',
    );

    is $tx->render_string($in, \%vars), $out or diag $in;
}

done_testing;