#!perl -w use strict; use Test::More; use Text::Xslate qw( mark_raw unmark_raw escaped_string html_escape ); sub r { return Text::Xslate::Type::Raw->new(@_); } my $tx = Text::Xslate->new(); my @set = ( [<<'T', {lang => ''}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => r('<Xslate>')}, <<'X', 'T::X::T::R->new()'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => escaped_string('<Xslate>')}, <<'X', 'escaped_string()'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => escaped_string(escaped_string('<Xslate>'))}, <<'X', "nested"], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => mark_raw('<Xslate>')}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => mark_raw(mark_raw('<Xslate>'))}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => unmark_raw('')}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => unmark_raw(mark_raw(''))}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => r(r(r('<Xslate>')))}, <<'X', 'T::X::T::R->new()'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => unmark_raw(r(r(r(''))))}, <<'X', 'T::X::T::R->new()'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => html_escape('')}, <<'X'], Hello, <: $lang :> world! T Hello, <Xslate> world! X [<<'T', {lang => mark_raw(''), l => '<', g => '>'}, <<'X', 'smart concat'], Hello, <: $l ~ $lang ~ $g :> world! Hello, <: html($l ~ $lang ~ $g) :> world! Hello, <: html($l) ~ $lang ~ html($g) :> world! T Hello, <> world! Hello, <> world! Hello, <> world! X [<<'T', {lang => mark_raw('')}, <<'X', 'smart repeat'], Hello, <: $lang x 1 :> world! Hello, <: $lang x 2 :> world! T Hello, world! Hello, world! X ); foreach my $d(@set) { my($in, $vars, $out, $msg) = @$d; is $tx->render_string($in, $vars), $out, $msg or diag $in; } done_testing;