Fix to handle no-op escapes such as \\, broken by unicode fix
[scpubgit/HTML-String.git] / xt / tt.t
CommitLineData
f49292d9 1use strictures 1;
2use Test::More;
3use HTML::String::TT;
4
5my $tt = HTML::String::TT->new;
6
7sub do_tt {
8 my $output;
9 $tt->process(\$_[0], $_[1], \$output) or die $tt->error;
10 return "$output";
11}
12
13is(
14 do_tt('<tag>[% foo %]</tag>', { foo => 'Hi <bob>' }),
15 '<tag>Hi &lt;bob&gt;</tag>',
16);
17
18is(
19 do_tt(q{[%
20 VIEW myview; BLOCK render; '<tag>'; foo; '</tag>'; END; END;
21 myview.include('render');
22 %]}, { foo => 'Hi <bob>' }),
23 '<tag>Hi &lt;bob&gt;</tag>',
24);
25
51eaef0b 26is(
27 do_tt('<tag>[% foo | no_escape %]</tag>', { foo => 'Hi <bob>' }),
28 '<tag>Hi <bob></tag>',
29);
30
5c65e9e1 31# Check we aren't nailed by https://rt.perl.org/rt3/Ticket/Display.html?id=49594
32
5bee64f9 33is(
9722df8b 34 do_tt('<foo>"$b\\ar"</foo>'."\n"),
35 '<foo>"$b\\ar"</foo>'."\n"
5bee64f9 36);
37
228553e6 38{ # non-ASCII characters can also trigger the bug
39
40 use utf8;
41
42 is(
43 do_tt('<li>foo – bar.</li>', {}),
44 '<li>foo – bar.</li>',
45 );
46}
47
ac4c210b 48is(
49 do_tt(
50 '[% FOREACH item IN items %][% item %][% END %]',
51 { items => [ '<script>alert("lalala")</script>', '-> & so "on" <-' ] }
52 ),
53 '&lt;script&gt;alert(&quot;lalala&quot;)&lt;/script&gt;'
54 .'-&gt; &amp; so &quot;on&quot; &lt;-'
55);
56
10c4bc68 57is( do_tt('"0"', {}), '"0"' );
58
c3ffad02 59{
60 my $tmpl = q[
61 [%- MACRO test(name, value) BLOCK;
62 IF !value.length;
63 "ok";
64 END;
65 END; -%]
66[%- test("foo", "") -%]
67];
68
69 my $with_html_string_tt = do_tt($tmpl, {});
70
71 $tt = Template->new(STASH => Template::Stash->new);
72 my $with_template = do_tt($tmpl, {});
73
74 is $with_html_string_tt, $with_template;
75}
76
f49292d9 77done_testing;