| #!perl | 
 | # | 
 | # Tests for user-specified delimiter functions | 
 | # These tests first appeared in version 1.20. | 
 |  | 
 | use strict; | 
 | use warnings; | 
 | use Test::More tests => 19; | 
 |  | 
 | use_ok 'Text::Template' or exit 1; | 
 |  | 
 | # (1) Try a simple delimiter: <<..>> | 
 | # First with the delimiters specified at object creation time | 
 | our $V = $V = 119; | 
 | my $template  = q{The value of $V is <<$V>>.}; | 
 | my $result    = q{The value of $V is 119.}; | 
 | my $template1 = Text::Template->new( | 
 |     TYPE       => 'STRING', | 
 |     SOURCE     => $template, | 
 |     DELIMITERS => [ '<<', '>>' ]) | 
 |         or die "Couldn't construct template object: $Text::Template::ERROR; aborting"; | 
 |  | 
 | my $text = $template1->fill_in(); | 
 | is $text, $result; | 
 |  | 
 | # (2) Now with delimiter choice deferred until fill-in time. | 
 | $template1 = Text::Template->new(TYPE => 'STRING', SOURCE => $template); | 
 | $text = $template1->fill_in(DELIMITERS => [ '<<', '>>' ]); | 
 | is $text, $result; | 
 |  | 
 | # (3) Now we'll try using regex metacharacters | 
 | # First with the delimiters specified at object creation time | 
 | $template  = q{The value of $V is [$V].}; | 
 | $template1 = Text::Template->new( | 
 |     TYPE       => 'STRING', | 
 |     SOURCE     => $template, | 
 |     DELIMITERS => [ '[', ']' ]) | 
 |         or die "Couldn't construct template object: $Text::Template::ERROR; aborting"; | 
 |  | 
 | $text = $template1->fill_in(); | 
 | is $text, $result; | 
 |  | 
 | # (4) Now with delimiter choice deferred until fill-in time. | 
 | $template1 = Text::Template->new(TYPE => 'STRING', SOURCE => $template); | 
 | $text = $template1->fill_in(DELIMITERS => [ '[', ']' ]); | 
 | is $text, $result; | 
 |  | 
 | # (5-18) Make sure \ is working properly | 
 | # (That is to say, it is ignored.) | 
 | # These tests are similar to those in 01-basic.t. | 
 | my @tests = ( | 
 |     '{""}' => '',    # (5) | 
 |  | 
 |     # Backslashes don't matter | 
 |     '{"}"}'           => undef, | 
 |     '{"\\}"}'         => undef,    # One backslash | 
 |     '{"\\\\}"}'       => undef,    # Two backslashes | 
 |     '{"\\\\\\}"}'     => undef,    # Three backslashes | 
 |     '{"\\\\\\\\}"}'   => undef,    # Four backslashes (10) | 
 |     '{"\\\\\\\\\\}"}' => undef,    # Five backslashes | 
 |  | 
 |     # Backslashes are always passed directly to Perl | 
 |     '{"x20"}'           => 'x20', | 
 |     '{"\\x20"}'         => ' ',          # One backslash | 
 |     '{"\\\\x20"}'       => '\\x20',      # Two backslashes | 
 |     '{"\\\\\\x20"}'     => '\\ ',        # Three backslashes (15) | 
 |     '{"\\\\\\\\x20"}'   => '\\\\x20',    # Four backslashes | 
 |     '{"\\\\\\\\\\x20"}' => '\\\\ ',      # Five backslashes | 
 |     '{"\\x20\\}"}'      => undef,        # (18) | 
 | ); | 
 |  | 
 | while (my ($test, $result) = splice @tests, 0, 2) { | 
 |     my $tmpl = Text::Template->new( | 
 |         TYPE       => 'STRING', | 
 |         SOURCE     => $test, | 
 |         DELIMITERS => [ '{', '}' ]); | 
 |  | 
 |     my $text = $tmpl->fill_in; | 
 |  | 
 |     my $ok = (!defined $text && !defined $result || $text eq $result); | 
 |  | 
 |     ok($ok) or diag "expected .$result., got .$text."; | 
 | } |