#!perl # # test apparatus for Text::Template module # still incomplete. use strict; use warnings; use Test::More; unless (eval { require Safe; 1 }) { plan skip_all => 'Safe.pm is required for this test'; } else { plan tests => 12; } use_ok 'Text::Template' or exit 1; my $c = Safe->new or die; # Test handling of packages and importing. $c->reval('$P = "safe root"'); our $P = 'main'; $Q::P = $Q::P = 'Q'; # How to effectively test the gensymming? my $t = Text::Template->new( TYPE => 'STRING', SOURCE => 'package is {$P}') or die; # (1) Default behavior: Inherit from calling package, `main' in this case. my $text = $t->fill_in(); is $text, 'package is main'; # (2) When a package is specified, we should use that package instead. $text = $t->fill_in(PACKAGE => 'Q'); is $text, 'package is Q'; # (3) When no package is specified in safe mode, we should use the # default safe root. $text = $t->fill_in(SAFE => $c); is $text, 'package is safe root'; # (4) When a package is specified in safe mode, we should use the # default safe root, after aliasing to the specified package TODO: { local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; $text = $t->fill_in(SAFE => $c, PACKAGE => 'Q'); is $text, 'package is Q'; } # Now let's see if hash vars are installed properly into safe templates $t = Text::Template->new( TYPE => 'STRING', SOURCE => 'hash is {$H}') or die; # (5) First in default mode $text = $t->fill_in(HASH => { H => 'good5' }); is $text, 'hash is good5'; # suppress "once" warnings $Q::H = $Q2::H = undef; # (6) Now in packages $text = $t->fill_in(HASH => { H => 'good6' }, PACKAGE => 'Q'); is $text, 'hash is good6'; # (7) Now in the default root of the safe compartment TODO: { local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; $text = $t->fill_in(HASH => { H => 'good7' }, SAFE => $c); is $text, 'hash is good7'; } # (8) Now in the default root after aliasing to a package that # got the hash stuffed in our $H; TODO: { local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; $text = $t->fill_in(HASH => { H => 'good8' }, SAFE => $c, PACKAGE => 'Q2'); is $text, 'hash is good8'; } # Now let's make sure that none of the packages leaked on each other. # (9) This var should NOT have been installed into the main package ok !defined $H; $H = $H; # (11) this value overwrote the one from test 6. is $Q::H, 'good7'; # (12) is $Q2::H, 'good8';