#!perl -w use strict; use Test::More; use Text::Xslate; use Text::Xslate::Util qw(p); my $tx = Text::Xslate->new( verbose => 2, ); my @set = ( # builtin filters ['<: $value | raw :>', { value => "Xslate" }, "Xslate", 'raw as a filter'], ['<: raw($value) :>', { value => "Xslate" }, "Xslate", 'raw as a functiun'], ['<: $value | html :>', { value => "" }, "<Xslate>", 'html'], ['<: $value | dump :>', { value => "" }, qr/<Xslate>/, 'dump'], ['<: $value | dump | raw :>', { value => "" }, qr//, 'x | dump | raw'], ['<: $value | html | html :>', { value => "" }, "<Xslate>", 'x | html | html'], ['<: $value | html | raw :>', { value => "" }, "<Xslate>", 'x | html | raw (-> html)'], ['<: $value | raw | html :>', { value => "" }, "", 'x | raw | html (-> raw)'], ['<: " foo " | uri :>', {}, '%20foo%20', 'x | uri'], ['<: "AZaz09-._~" | uri :>', {}, 'AZaz09-._~', 'RFC 3986' ], ['<: "/()\t" | uri :>', {}, '%2F%28%29%09' ], ['<: $s | uri :>', { s => ' ' x 255 }, '%20' x 255 ], ['<: (nil | uri) == nil ? "true" : "false" :>', {}, 'true' ], ['<: is_array_ref([]) ? 10 : 20 :>', {}, '10', 'is_array_ref'], ['<: is_array_ref({}) ? 10 : 20 :>', {}, '20', 'ref'], ['<: is_array_ref($v) ? 10 : 20 :>', {v => 42}, '20', 'ref'], ['<: is_array_ref($v) ? 10 : 20 :>', {v => bless []}, '20', 'ref'], ['<: is_hash_ref([]) ? 10 : 20 :>', {}, '20', 'ref'], ['<: is_hash_ref({}) ? 10 : 20 :>', {}, '10', 'ref'], ['<: is_hash_ref($v) ? 10 : 20 :>', {v => 42}, '20', 'ref'], ['<: is_hash_ref($v) ? 10 : 20 :>', {v => bless []}, '20', 'ref'], ['<: html($value) == "<Xslate>" ? "true" : "false" :>', { value => '' }, 'true'], ['<: raw($value) == "<Xslate>" ? "true" : "false" :>', { value => '' }, 'false'], ['<: $value | unmark_raw :>', { value => '' }, "<Xslate>", 'unmark_raw' ], ['<: $value | raw | unmark_raw :>', { value => '' }, "<Xslate>", 'unmark_raw' ], ['<: 1 ? raw($value) : html($value) :>', { value => '' }, ''], ['<: 1 ? html($value) : raw($value) :>', { value => '' }, '<Xslate>'], ['<: 0 ? raw($value) : html($value) :>', { value => '' }, '<Xslate>'], ['<: 0 ? html($value) : raw($value) :>', { value => '' }, ''], ['<: for [raw($value)] -> $i { :><: $i :><: } :>', { value => "" }, "" ], ['<: for [html($value)] -> $i { :><: $i :><: } :>', { value => "" }, "<Xslate>" ], ['<: raw :>', { value => '' }, qr/\b CODE \b/xms, 'raw itself'], ['<: html :>', { value => '' }, qr/\b CODE \b/xms, 'html itself'], ['<: mark_raw :>', { value => '' }, qr/\b CODE \b/xms, 'mark_raw itself'], ['<: unmark_raw :>', { value => '' }, qr/\b CODE \b/xms, 'unmark_raw itself'], ['<: my $x = is_array_ref; $x([]) ? "ok" : "ng" :>', {}, 'ok', 'the entity of ref'], ['<: my $x = is_hash_ref; $x({}) ? "ok" : "ng" :>', {}, 'ok', 'the entity of ref'], # with macros [<<'T', {}, <<'X'], : macro foo -> {
: } : foo() T
X [<<'T', {}, <<'X'], : macro foo -> {
: } : foo() | mark_raw T
X [<<'T', {}, <<'X'], : macro foo -> {
: } : foo() | unmark_raw T <br> X [<<'T', {}, <<'X'], : macro foo -> {
: } : foo() | unmark_raw | html T <br> X ); foreach my $d(@set) { my($in, $vars, $expected, $msg) = @$d; if(ref $expected) { like $tx->render_string($in, $vars), $expected, $msg or diag $in; } else { is $tx->render_string($in, $vars), $expected, $msg or diag $in; } } done_testing;