#!perl -w
use strict;
use Test::More;
use Text::Xslate;
my $tx = Text::Xslate->new(verbose => 2);
{
package Obj;
use Any::Moose;
sub join :method {
my($self, $sep, @args) = @_;
return join $sep, @args;
}
sub ok { 42 }
sub nil { 'nil' }
sub true { 'true' }
sub false { 'false' }
}
{
package Anything;
use Any::Moose;
sub AUTOLOAD {
our $AUTOLOAD;
}
}
my @data = (
[ <<'T', <<'X', "method call without args" ],
<: $obj.ok() :>
T
42
X
[ <<'T', <<'X', "method call" ],
<: $obj.join(".") :>
T
X
[ <<'T', <<'X', "method call" ],
<: $obj.join(".", "foo", "bar") :>
T
foo.bar
X
[ <<'T', <<'X', "method call" ],
<: $obj.join(".", "foo", "bar", "baz") :>
T
foo.bar.baz
X
[ <<'T', <<'X', "method call" ],
<: $obj.join(".", "foo", "bar", "baz") :>
T
foo.bar.baz
X
[ <<'T', <<'X', "AUTOLOAD" ],
<: $any.foo :>
<: $any.bar :>
<: $any.baz() :>
T
Anything::foo
Anything::bar
Anything::baz
X
[ <<'T', <<'X', "keywords" ],
<: $obj.nil() :>
<: $obj.true() :>
<: $obj.false() :>
T
nil
true
false
X
);
my %vars = (
obj => Obj->new,
any => Anything->new,
);
foreach my $d(@data) {
my($in, $out, $msg) = @$d;
is $tx->render_string($in, \%vars), $out, $msg or diag $in;
}
done_testing;