]> Dogcows Code - chaz/p5-CGI-Ex/blobdiff - t/7_template_00_base.t
CGI::Ex 2.13
[chaz/p5-CGI-Ex] / t / 7_template_00_base.t
index b5813fc4b5f90be8b5c015c286cad8c548a4d4e3..aab6d0db928514f3e0a7e737ff3b8e0df78c782a 100644 (file)
@@ -14,7 +14,7 @@ BEGIN {
 };
 
 use strict;
-use Test::More tests => ! $is_tt ? 806 : 599;
+use Test::More tests => ! $is_tt ? 894 : 613;
 use Data::Dumper qw(Dumper);
 use constant test_taint => 0 && eval { require Taint::Runtime };
 
@@ -270,10 +270,6 @@ process_ok('[% a = "a" %][% (c = (b = a)) %][% a %][% b %][% c %]' => 'aaaa');
 
 process_ok("[% a = qw{Foo Bar Baz} ; a.2 %]" => 'Baz') if ! $is_tt;
 
-process_ok("[% foo = 1 bar = 2 %][% foo %][% bar %]" => '12');
-process_ok("[% foo = 1 bar = 2 %][% foo = 3 bar %][% foo %][% bar %]" => '232') if ! $is_tt;
-process_ok("[% a = 1 a = a + 2 a %]" => 3) if ! $is_tt;
-
 process_ok("[% _foo = 1 %][% _foo %]2" => '2');
 process_ok("[% foo._bar %]2" => '2', {foo => {_bar =>1}});
 
@@ -283,6 +279,17 @@ print "### multiple statements in same tag ##################################\n"
 process_ok("[% foo; %]" => '1', {foo => 1});
 process_ok("[% GET foo; %]" => '1', {foo => 1});
 process_ok("[% GET foo; GET foo %]" => '11', {foo => 1});
+process_ok("[% GET foo GET foo %]" => '11', {foo => 1}) if ! $is_tt;
+process_ok("[% GET foo GET foo %]" => '', {foo => 1, tt_config => [SEMICOLONS => 1]});
+
+process_ok("[% foo = 1 bar = 2 %][% foo %][% bar %]" => '12');
+process_ok("[% foo = 1 bar = 2 %][% foo = 3 bar %][% foo %][% bar %]" => '232') if ! $is_tt;
+process_ok("[% a = 1 a = a + 2 a %]" => '3') if ! $is_tt;
+
+process_ok("[% foo = 1 bar = 2 %][% foo %][% bar %]" => '', {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% foo = 1 bar = 2 %][% foo = 3 bar %][% foo %][% bar %]" => '', {tt_config => [SEMICOLONS => 1]});
+process_ok("[% a = 1 a = a + 2 a %]" => '', {tt_config => [SEMICOLONS => 1]});
+
 
 ###----------------------------------------------------------------###
 print "### CALL / DEFAULT ###################################################\n";
@@ -301,18 +308,20 @@ ok($t == 3, "CALL method actually called var");
 print "### scalar vmethods ##################################################\n";
 
 process_ok("[% n.0 %]" => '7', {n => 7}) if ! $is_tt;
+process_ok("[% n.abs %]" => '7', {n => 7}) if ! $is_tt;
+process_ok("[% n.abs %]" => '7', {n => -7}) if ! $is_tt;
+process_ok("[% n.atan2.substr(0, 6) %]" => '1.5707', {n => 7}) if ! $is_tt;
+process_ok("[% (4 * n.atan2(1)).substr(0, 7) %]" => '3.14159', {n => 1}) if ! $is_tt;
 process_ok("[% n.chunk(3).join %]" => 'abc def g', {n => 'abcdefg'});
 process_ok("[% n.chunk(-3).join %]" => 'a bcd efg', {n => 'abcdefg'});
 process_ok("[% n|collapse %]" => "a b", {n => '  a  b  '}); # TT2 filter
+process_ok("[% n.cos.substr(0,5) %]" => "1", {n => 0}) if ! $is_tt;
+process_ok("[% n.cos.substr(0,5) %]" => "0.707", {n => atan2(1,1)}) if ! $is_tt;
 process_ok("[% n.defined %]" => "1", {n => ''});
 process_ok("[% n.defined %]" => "", {n => undef});
 process_ok("[% n.defined %]" => "1", {n => '1'});
-process_ok("[% n|indent %]" => "    a\n    b", {n => "a\nb"}); # TT2 filter
-process_ok("[% n|indent(2) %]" => "  a\n  b", {n => "a\nb"}); # TT2 filter
-process_ok("[% n|indent('wow ') %]" => "wow a\nwow b", {n => "a\nb"}); # TT2 filter
-process_ok("[% n.int %]" => "123", {n => "123.234"}) if ! $is_tt;
-process_ok("[% n.int %]" => "123", {n => "123gggg"}) if ! $is_tt;
-process_ok("[% n.int %]" => "0", {n => "ff123.234"}) if ! $is_tt;
+process_ok("[% n.exp.substr(0,5) %]" => "2.718", {n => 1}) if ! $is_tt;
+process_ok("[% n.exp.log.substr(0,5) %]" => "8", {n => 8}) if ! $is_tt;
 process_ok("[% n.fmt %]" => '7', {n => 7}) if ! $is_tt;
 process_ok("[% n.fmt('%02d') %]" => '07', {n => 7}) if ! $is_tt;
 process_ok("[% n.fmt('%0*d', 3) %]" => '007', {n => 7}) if ! $is_tt;
@@ -321,11 +330,20 @@ process_ok("[% n|format('%02d') %]" => '07', {n => 7}); # TT2 filter
 process_ok("[% n|format('%0*d', 3) %]" => '007', {n => 7}) if ! $is_tt;
 process_ok("[% n|format('(%s)') %]" => "(a)\n(b)", {n => "a\nb"}); # TT2 filter
 process_ok("[% n.hash.items.1 %]" => "b", {n => {a => "b"}});
+process_ok("[% n.hex %]" => "255", {n => "FF"}) if ! $is_tt;
 process_ok("[% n|html %]" => "&", {n => '&'}); # TT2 filter
+process_ok("[% n|indent %]" => "    a\n    b", {n => "a\nb"}); # TT2 filter
+process_ok("[% n|indent(2) %]" => "  a\n  b", {n => "a\nb"}); # TT2 filter
+process_ok("[% n|indent('wow ') %]" => "wow a\nwow b", {n => "a\nb"}); # TT2 filter
+process_ok("[% n.int %]" => "123", {n => "123.234"}) if ! $is_tt;
+process_ok("[% n.int %]" => "123", {n => "123gggg"}) if ! $is_tt;
+process_ok("[% n.int %]" => "0", {n => "ff123.234"}) if ! $is_tt;
 process_ok("[% n.item %]" => '7', {n => 7});
+process_ok("[% n.lc %]" => 'abc', {n => "ABC"}) if ! $is_tt;
 process_ok("[% n|lcfirst %]" => 'fOO', {n => "FOO"}); # TT2 filter
 process_ok("[% n.length %]" => 3, {n => "abc"});
 process_ok("[% n.list.0 %]" => 'abc', {n => "abc"});
+process_ok("[% n.log.substr(0,5) %]" => "4.605", {n => 100}) if ! $is_tt;
 process_ok("[% n|lower %]" => 'abc', {n => "ABC"}); # TT2 filter
 process_ok("[% n.match('foo').join %]" => '', {n => "bar"});
 process_ok("[% n.match('foo').join %]" => '1', {n => "foo"});
@@ -334,6 +352,7 @@ process_ok("[% n.match('(foo)').join %]" => 'foo', {n => "foo"});
 process_ok("[% n.match('(foo)').join %]" => 'foo', {n => "foofoo"});
 process_ok("[% n.match('(foo)',1).join %]" => 'foo foo', {n => "foofoo"});
 process_ok("[% n.null %]" => '', {n => "abc"});
+process_ok("[% n.oct %]" => "255", {n => "377"}) if ! $is_tt;
 process_ok("[% n.rand %]" => qr{^\d+\.\d+}, {n => "2"}) if ! $is_tt;
 process_ok("[% n.rand %]" => qr{^\d+\.\d+}, {n => "ab"}) if ! $is_tt;
 process_ok("[% n.remove('bc') %]" => "a", {n => "abc"});
@@ -348,6 +367,8 @@ process_ok("[% n.replace('(foo)', 'bar\$1') %]" => 'barfoobarfoo', {n => 'foofoo
 process_ok("[% n.replace('foo', 'bar', 0) %]" => 'barfoo', {n => 'foofoo'}) if ! $is_tt;
 process_ok("[% n.search('foo') %]" => '', {n => "bar"});
 process_ok("[% n.search('foo') %]" => '1', {n => "foo"});
+process_ok("[% n.sin.substr(0,5) %]" => "0", {n => 0}) if ! $is_tt;
+process_ok("[% n.sin.substr(0,5) %]" => "1", {n => 2*atan2(1,1)}) if ! $is_tt;
 process_ok("[% n.size %]" => '1', {n => "foo"});
 process_ok("[% n.split.join('|') %]" => "abc", {n => "abc"});
 process_ok("[% n.split.join('|') %]" => "a|b|c", {n => "a b c"});
@@ -356,8 +377,13 @@ process_ok("[% n.split(u,2).join('|') %]" => "a|b c", {n => "a b c", u => undef}
 process_ok("[% n.split(u,2).join('|') %]" => "a| b c", {n => "a b c", u => undef}) if $is_tt;
 process_ok("[% n.split('/').join('|') %]" => "a|b|c", {n => "a/b/c"});
 process_ok("[% n.split('/', 2).join('|') %]" => "a|b/c", {n => "a/b/c"});
+process_ok("[% n.sprintf(7) %]" => '7', {n => '%d'}) if ! $is_tt;
+process_ok("[% n.sprintf(3, 7, 12) %]" => '007 12', {n => '%0*d %d'}) if ! $is_tt;
+process_ok("[% n.sqrt %]" => "3", {n => 9}) if ! $is_tt;
+process_ok("[% n.srand; 12 %]" => "12", {n => 9}) if ! $is_tt;
 process_ok("[% n.stderr %]" => "", {n => "# testing stderr ... ok\r"});
 process_ok("[% n|trim %]" => "a  b", {n => '  a  b  '}); # TT2 filter
+process_ok("[% n.uc %]" => 'FOO', {n => "foo"}) if ! $is_tt; # TT2 filter
 process_ok("[% n|ucfirst %]" => 'Foo', {n => "foo"}); # TT2 filter
 process_ok("[% n|upper %]" => 'FOO', {n => "foo"}); # TT2 filter
 process_ok("[% n|uri %]" => 'a%20b', {n => "a b"}); # TT2 filter
@@ -452,6 +478,16 @@ process_ok("[% h.size %]" => "2", {h => {a => 1, b=> 2}});
 process_ok("[% h.sort.join %]" => "b a", {h => {a => "BBB", b => "A"}});
 process_ok("[% h.values.sort.join %]" => "1 2", {h => {a => 1, b=> 2}});
 
+###----------------------------------------------------------------###
+print "### vmethods as functions ############################################\n";
+
+process_ok("[% sprintf('%d %d', 7, 8) %] d" => '7 8 d') if ! $is_tt;
+process_ok("[% sprintf('%d %d', 7, 8) %] d" => '7 8 d', {tt_config => [VMETHOD_FUNCTIONS => 1]}) if ! $is_tt;
+process_ok("[% sprintf('%d %d', 7, 8) %] d" => ' d', {tt_config => [VMETHOD_FUNCTIONS => 0]}) if ! $is_tt;
+process_ok("[% int(2.234) %]" => '2') if ! $is_tt;
+
+process_ok("[% int(2.234) ; int = 44; int(2.234) ; SET int; int(2.234) %]" => '2442') if ! $is_tt; # hide and unhide
+
 ###----------------------------------------------------------------###
 print "### more virtual methods / filters ###################################\n";
 
@@ -557,6 +593,17 @@ print "### string operators #################################################\n"
 process_ok('[% a = "foo"; a _ "bar" %]' => 'foobar');
 process_ok('[% a = "foo"; a ~ "bar" %]' => 'foobar') if ! $is_tt;
 process_ok('[% a = "foo"; a ~= "bar"; a %]' => 'foobar') if ! $is_tt;
+process_ok('[% "b" gt "c" %]<<<' => '<<<') if ! $is_tt;
+process_ok('[% "b" gt "a" %]<<<' => '1<<<') if ! $is_tt;
+process_ok('[% "b" ge "c" %]<<<' => '<<<') if ! $is_tt;
+process_ok('[% "b" ge "b" %]<<<' => '1<<<') if ! $is_tt;
+process_ok('[% "b" lt "c" %]<<<' => '1<<<') if ! $is_tt;
+process_ok('[% "b" lt "a" %]<<<' => '<<<') if ! $is_tt;
+process_ok('[% "b" le "a" %]<<<' => '<<<') if ! $is_tt;
+process_ok('[% "b" le "b" %]<<<' => '1<<<') if ! $is_tt;
+process_ok('[% "a" cmp "b" %]<<<' => '-1<<<') if ! $is_tt;
+process_ok('[% "b" cmp "b" %]<<<' => '0<<<') if ! $is_tt;
+process_ok('[% "c" cmp "b" %]<<<' => '1<<<') if ! $is_tt;
 
 ###----------------------------------------------------------------###
 print "### math operators ###################################################\n";
@@ -607,6 +654,18 @@ process_ok('[% a = 1 %][% a-- %][% a %]' => '10') if ! $is_tt;
 process_ok('[% a++ FOR [1..3] %]' => '012') if ! $is_tt;
 process_ok('[% --a FOR [1..3] %]' => '-1-2-3') if ! $is_tt;
 
+process_ok('[% 2 >  3 %]<<<' => '<<<');
+process_ok('[% 2 >  1 %]<<<' => '1<<<');
+process_ok('[% 2 >= 3 %]<<<' => '<<<');
+process_ok('[% 2 >= 2 %]<<<' => '1<<<');
+process_ok('[% 2 < 3 %]<<<' => '1<<<');
+process_ok('[% 2 < 1 %]<<<' => '<<<');
+process_ok('[% 2 <= 1 %]<<<' => '<<<');
+process_ok('[% 2 <= 2 %]<<<' => '1<<<');
+process_ok('[% 1 <=> 2 %]<<<' => '-1<<<') if ! $is_tt;
+process_ok('[% 2 <=> 2 %]<<<' => '0<<<') if ! $is_tt;
+process_ok('[% 3 <=> 2 %]<<<' => '1<<<') if ! $is_tt;
+
 ###----------------------------------------------------------------###
 print "### boolean operators ################################################\n";
 
@@ -761,6 +820,34 @@ process_ok('[% FOREACH f = [1..3]; f; END %]' => '123');
 process_ok('[% FOREACH f = [1..3]; "$f"; END %]' => '123');
 process_ok('[% FOREACH f = [1..3]; f + 1; END %]' => '234');
 
+###----------------------------------------------------------------###
+print "### LOOP #############################################################\n";
+
+process_ok("[% var = [{key => 'a'}, {key => 'b'}] -%]
+[% LOOP var -%]
+  ([% key %])
+[% END %]" => "  (a)\n  (b)\n") if ! $is_tt;
+
+process_ok("[% var = [{key => 'a'}, {key => 'b'}] -%]
+[% LOOP var -%]
+  [%- NEXT IF key eq 'a' -%]
+  ([% key %])
+[% END %]" => "  (b)\n") if ! $is_tt;
+
+if (! $is_tt) {
+    local $CGI::Ex::Template::QR_PRIVATE = 0;
+    local $CGI::Ex::Template::QR_PRIVATE = 0; # warn clean
+    CGI::Ex::Template->define_vmethod('scalar', textjoin => sub {join(shift, @_)});
+
+    process_ok("[% var = [{key => 'a'}, {key => 'b'}, {key => 'c'}] -%]
+[% LOOP var -%]
+([% textjoin('|', key, __first__, __last__, __inner__, __odd__) %])
+[% END -%]" => "(a|1|0|0|1)
+(b|0|0|1|0)
+(c|0|1|0|1)
+", {tt_config => [LOOP_CONTEXT_VARS => 1]});
+}
+
 ###----------------------------------------------------------------###
 print "### WHILE ############################################################\n";
 
@@ -773,12 +860,12 @@ process_ok("[% WHILE foo %][% foo %][% foo = foo - 1 %][% END %]" => '321', {foo
 process_ok("[% WHILE 1 %][% foo %][% foo = foo - 1 %][% LAST IF foo == 1 %][% END %]" => '32', {foo => 3});
 process_ok("[% f = 10; WHILE f; f = f - 1 ; f ; END %]" => '9876543210');
 process_ok("[% f = 10; WHILE f; f = f - 1 ; f ; END ; f %]" => '98765432100');
-process_ok("[% f = 10 a = 2; WHILE f; f = f - 1 ; f ; a=3; END ; a%]" => '98765432103');
+process_ok("[% f = 10; a = 2; WHILE f; f = f - 1 ; f ; a=3; END ; a%]" => '98765432103');
 
 process_ok("[% f = 10; WHILE (g=f); f = f - 1 ; f ; END %]" => '9876543210');
 process_ok("[% f = 10; WHILE (g=f); f = f - 1 ; f ; END ; f %]" => '98765432100');
-process_ok("[% f = 10 a = 2; WHILE (g=f); f = f - 1 ; f ; a=3; END ; a%]" => '98765432103');
-process_ok("[% f = 10 a = 2; WHILE (a=f); f = f - 1 ; f ; a=3; END ; a%]" => '98765432100');
+process_ok("[% f = 10; a = 2; WHILE (g=f); f = f - 1 ; f ; a=3; END ; a%]" => '98765432103');
+process_ok("[% f = 10; a = 2; WHILE (a=f); f = f - 1 ; f ; a=3; END ; a%]" => '98765432100');
 
 ###----------------------------------------------------------------###
 print "### STOP / RETURN / CLEAR ############################################\n";
@@ -1025,7 +1112,7 @@ process_ok('[% "$a" %]|$a|[% "${a}" %]|${a}' => 'A|A|A|A',     {a => 'A', A => '
 process_ok('[% constants.a %]|[% $constants.a %]|[% constants.$a %]' => 'A|A|A', {tt_config => [V1DOLLAR => 1, CONSTANTS => {a => 'A'}]});
 
 ###----------------------------------------------------------------###
-print "### V2PIPE ###########################################################\n";
+print "### V2PIPE / V2EQUALS ################################################\n";
 
 process_ok("[%- BLOCK a %]b is [% b %]
 [% END %]
@@ -1036,6 +1123,15 @@ process_ok("[%- BLOCK a %]b is [% b %]
 [% END %]
 [%- PROCESS a b => 237 | repeat(2) %]" => "b is 237237\n") if ! $is_tt;
 
+process_ok("[% ('a' == 'b') || 0 %]" => 0);
+process_ok("[% ('a' != 'b') || 0 %]" => 1);
+process_ok("[% ('a' == 'b') || 0 %]" => 0, {tt_config => [V2EQUALS => 1]}) if ! $is_tt;
+process_ok("[% ('a' != 'b') || 0 %]" => 1, {tt_config => [V2EQUALS => 1]}) if ! $is_tt;
+process_ok("[% ('a' == 'b') || 0 %]" => 1, {tt_config => [V2EQUALS => 0]}) if ! $is_tt;
+process_ok("[% ('a' != 'b') || 0 %]" => 0, {tt_config => [V2EQUALS => 0]}) if ! $is_tt;
+process_ok("[% ('7' == '7.0') || 0 %]" => 0);
+process_ok("[% ('7' == '7.0') || 0 %]" => 1, {tt_config => [V2EQUALS => 0]}) if ! $is_tt;
+
 ###----------------------------------------------------------------###
 print "### configuration ####################################################\n";
 
@@ -1182,11 +1278,39 @@ local $ENV{'REQUEST_METHOD'} = 1;
 process_ok("[% p = DUMP a; p.collapse %]" => '<pre>a = &apos;s&apos;; </pre>', {a => "s", tt_config => [DUMP => {header => 0}]});
 process_ok("[% p = DUMP a; p.collapse %]" => 'a = \'s\';', {a => "s", tt_config => [DUMP => {header => 0, html => 0}]});
 local $ENV{'REQUEST_METHOD'} = 0;
-process_ok("[% SET global; p = DUMP; p.collapse %]" => "DUMP: File \"input text\" line 1 EntireStash = { 'a' => 'b', 'global' => '' };", {a => 'b', tt_config => [DUMP => {Sortkeys => 1}]});
-process_ok("[% SET global; p = DUMP; p.collapse %]" => "DUMP: File \"input text\" line 1 EntireStash = { 'a' => 'b', 'global' => '' };", {a => 'b', tt_config => [DUMP => {Sortkeys => 1, EntireStash => 1}]});
+process_ok("[% SET global; p = DUMP; p.collapse %]" => "DUMP: File \"input text\" line 1 EntireStash = { 'a' => 'b', 'global' => undef };", {a => 'b', tt_config => [DUMP => {Sortkeys => 1}]});
+process_ok("[% SET global; p = DUMP; p.collapse %]" => "DUMP: File \"input text\" line 1 EntireStash = { 'a' => 'b', 'global' => undef };", {a => 'b', tt_config => [DUMP => {Sortkeys => 1, EntireStash => 1}]});
 process_ok("[% SET global; p = DUMP; p.collapse %]" => "DUMP: File \"input text\" line 1", {a => 'b', tt_config => [DUMP => {Sortkeys => 1, EntireStash => 0}]});
 }
 
+###----------------------------------------------------------------###
+print "### SYNTAX ###########################################################\n";
+
+if (! $is_tt) {
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "", {tt_config => [SYNTAX => 'garbage']});
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237237");
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237237", {tt_config => [SYNTAX => 'cet']});
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237237", {tt_config => [SYNTAX => 'tt3']});
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237b is 237", {tt_config => [SYNTAX => 'tt2']});
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237b is 237", {tt_config => [SYNTAX => 'tt1']});
+process_ok("[%- BLOCK a %]b is [% b %][% END %][% PROCESS a b => 237 | repeat(2) %]" => "b is 237b is 237", {tt_config => [SYNTAX => 'tt1']});
+
+
+process_ok('[% a %]|[% $a %]|[% ${ a } %]|[% ${ "a" } %]' => 'A|bar|bar|A', {a => 'A', A => 'bar'});
+process_ok('[% a %]|[% $a %]|[% ${ a } %]|[% ${ "a" } %]' => 'A|bar|bar|A', {a => 'A', A => 'bar', tt_config => [SYNTAX => 'tt2']});
+process_ok('[% a %]|[% $a %]|[% ${ a } %]|[% ${ "a" } %]' => 'A|A|bar|A', {a => 'A', A => 'bar', tt_config => [SYNTAX => 'tt1']});
+
+process_ok("<TMPL_VAR name=foo>" => "FOO", {foo => "FOO", tt_config => [SYNTAX => 'ht']});
+process_ok("<TMPL_VAR EXPR='sprintf(\"%d %d\", 7, 8)'>" => "7 8", {tt_config => [SYNTAX => 'hte']});
+process_ok("<TMPL_VAR EXPR='7 == \"7.0\"'>" => "1", {tt_config => [SYNTAX => 'hte']});
+process_ok("<TMPL_VAR EXPR='\"a\" == \"b\"'>" => "1", {tt_config => [SYNTAX => 'hte']});
+process_ok("<TMPL_VAR EXPR='sprintf(\"%d %d\", 7, 8)'>d" => "", {tt_config => [SYNTAX => 'ht']});
+
+process_ok("[% \"<TMPL_VAR EXPR='1+2+3'>\"|eval('hte') %] = [% 6 %]" => "6 = 6");
+process_ok("[% \"<TMPL_VAR EXPR='1+2+3'>\"|eval('ht') %] = [% 6 %]" => "");
+
+}
+
 ###----------------------------------------------------------------###
 print "### CONFIG ############################################################\n";
 
@@ -1198,14 +1322,24 @@ process_ok("[% CONFIG POST_CHOMP  => '-' %][% 234 %]\n" => 234);
 process_ok("[% CONFIG INTERPOLATE => '-' %]\${ 234 }"   => 234);
 process_ok("[% CONFIG V1DOLLAR    => 1   %][% a = 234 %][% \$a %]"   => 234);
 process_ok("[% CONFIG V2PIPE => 1 %][% BLOCK a %]b is [% b %][% END %][% PROCESS a b => 234 | repeat(2) %]"   => "b is 234b is 234");
+process_ok("[% CONFIG V2EQUALS => 1 %][% ('7' == '7.0') || 0 %]" => 0);
+process_ok("[% CONFIG V2EQUALS => 0 %][% ('7' == '7.0') || 0 %]" => 1);
 
 process_ok("[% CONFIG BOGUS => 2 %]bar" => '');
 
 process_ok("[% CONFIG ANYCASE %]|[% CONFIG ANYCASE => 1 %][% CONFIG ANYCASE %]" => 'CONFIG ANYCASE = undef|CONFIG ANYCASE = 1');
 process_ok("[% CONFIG ANYCASE %]|[% CONFIG ANYCASE => 1 %][% CONFIG ANYCASE %]" => 'CONFIG ANYCASE = undef|CONFIG ANYCASE = 1');
 
+process_ok("[% \"[% GET 1+2+3 %]\" | eval %] = [% get 6 %]"                          => "",      {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% CONFIG ANYCASE => 1 %][% get 6 %]"                                    => "6",     {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% CONFIG ANYCASE => 1 %][% \"[% get 1+2+3 %]\" | eval %] = [% get 6 %]" => "6 = 6", {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% \"[% CONFIG ANYCASE => 1 %][% get 1+2+3 %]\" | eval %] = [% get 6 %]" => "",      {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% \"[% CONFIG ANYCASE => 1 %][% get 1+2+3 %]\" | eval %] = [% GET 6 %]" => "6 = 6", {tt_config => [SEMICOLONS => 1]}) if ! $is_tt;
+process_ok("[% CONFIG SYNTAX => 'hte' %][% \"<TMPL_VAR EXPR='1+2+3'>\"|eval %] = [% 6 %]" => "6 = 6");
+
 process_ok("[% CONFIG DUMP    %]|[% CONFIG DUMP    => 0 %][% DUMP           %]bar" => 'CONFIG DUMP = undef|bar');
 process_ok("[% CONFIG DUMP => {Useqq=>1, header=>0, html=>0} %][% DUMP 'foo' %]" => "'foo' = \"foo\";\n");
+process_ok("[% CONFIG VMETHOD_FUNCTIONS => 0 %][% sprintf('%d %d', 7, 8) %] d" => ' d');
 }
 
 ###----------------------------------------------------------------###
This page took 0.025814 seconds and 4 git commands to generate.