| #!perl |
| # |
| # test apparatus for Text::Template module |
| # still incomplete. |
| |
| use strict; |
| use warnings; |
| use Test::More tests => 13; |
| |
| use_ok 'Text::Template' or exit 1; |
| |
| my $template = 'We will put value of $v (which is "good") here -> {$v}'; |
| |
| my $v = 'oops (main)'; |
| $Q::v = 'oops (Q)'; |
| |
| my $vars = { 'v' => \'good' }; |
| |
| # (1) Build template from string |
| $template = Text::Template->new('type' => 'STRING', 'source' => $template); |
| isa_ok $template, 'Text::Template'; |
| |
| # (2) Fill in template in anonymous package |
| my $result2 = 'We will put value of $v (which is "good") here -> good'; |
| my $text = $template->fill_in(HASH => $vars); |
| is $text, $result2; |
| |
| # (3) Did we clobber the main variable? |
| is $v, 'oops (main)'; |
| |
| # (4) Fill in same template again |
| my $result4 = 'We will put value of $v (which is "good") here -> good'; |
| $text = $template->fill_in(HASH => $vars); |
| is $text, $result4; |
| |
| # (5) Now with a package |
| my $result5 = 'We will put value of $v (which is "good") here -> good'; |
| $text = $template->fill_in(HASH => $vars, PACKAGE => 'Q'); |
| is $text, $result5; |
| |
| # (6) We expect to have clobbered the Q variable. |
| is $Q::v, 'good'; |
| |
| # (7) Now let's try it without a package |
| my $result7 = 'We will put value of $v (which is "good") here -> good'; |
| $text = $template->fill_in(HASH => $vars); |
| is $text, $result7; |
| |
| # (8-11) Now what does it do when we pass a hash with undefined values? |
| # Roy says it does something bad. (Added for 1.20.) |
| my $WARNINGS = 0; |
| { |
| local $SIG{__WARN__} = sub { $WARNINGS++ }; |
| local $^W = 1; # Make sure this is on for this test |
| my $template8 = 'We will put value of $v (which is "good") here -> {defined $v ? "bad" : "good"}'; |
| my $result8 = 'We will put value of $v (which is "good") here -> good'; |
| my $template = Text::Template->new('type' => 'STRING', 'source' => $template8); |
| my $text = $template->fill_in(HASH => { 'v' => undef }); |
| |
| # (8) Did we generate a warning? |
| cmp_ok $WARNINGS, '==', 0; |
| |
| # (9) Was the output correct? |
| is $text, $result8; |
| |
| # (10-11) Let's try that again, with a twist this time |
| $WARNINGS = 0; |
| $text = $template->fill_in(HASH => [ { 'v' => 17 }, { 'v' => undef } ]); |
| |
| # (10) Did we generate a warning? |
| cmp_ok $WARNINGS, '==', 0; |
| |
| # (11) Was the output correct? |
| SKIP: { |
| skip 'not supported before 5.005', 1 unless $] >= 5.005; |
| |
| is $text, $result8; |
| } |
| } |
| |
| # (12) Now we'll test the multiple-hash option (Added for 1.20.) |
| $text = Text::Template::fill_in_string(q{$v: {$v}. @v: [{"@v"}].}, |
| HASH => [ |
| { 'v' => 17 }, |
| { 'v' => [ 'a', 'b', 'c' ] }, |
| { 'v' => \23 } |
| ] |
| ); |
| |
| my $result = q{$v: 23. @v: [a b c].}; |
| is $text, $result; |