1#!perl 2# 3# test apparatus for Text::Template module 4# still incomplete. 5 6use strict; 7use warnings; 8use Test::More; 9 10unless (eval { require Safe; 1 }) { 11 plan skip_all => 'Safe.pm is required for this test'; 12} 13else { 14 plan tests => 12; 15} 16 17use_ok 'Text::Template' or exit 1; 18 19my $c = Safe->new or die; 20 21# Test handling of packages and importing. 22$c->reval('$P = "safe root"'); 23our $P = 'main'; 24$Q::P = $Q::P = 'Q'; 25 26# How to effectively test the gensymming? 27 28my $t = Text::Template->new( 29 TYPE => 'STRING', 30 SOURCE => 'package is {$P}') or die; 31 32# (1) Default behavior: Inherit from calling package, `main' in this case. 33my $text = $t->fill_in(); 34is $text, 'package is main'; 35 36# (2) When a package is specified, we should use that package instead. 37$text = $t->fill_in(PACKAGE => 'Q'); 38is $text, 'package is Q'; 39 40# (3) When no package is specified in safe mode, we should use the 41# default safe root. 42$text = $t->fill_in(SAFE => $c); 43is $text, 'package is safe root'; 44 45# (4) When a package is specified in safe mode, we should use the 46# default safe root, after aliasing to the specified package 47TODO: { 48 local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; 49 $text = $t->fill_in(SAFE => $c, PACKAGE => 'Q'); 50 is $text, 'package is Q'; 51} 52 53# Now let's see if hash vars are installed properly into safe templates 54$t = Text::Template->new( 55 TYPE => 'STRING', 56 SOURCE => 'hash is {$H}') or die; 57 58# (5) First in default mode 59$text = $t->fill_in(HASH => { H => 'good5' }); 60is $text, 'hash is good5'; 61 62# suppress "once" warnings 63$Q::H = $Q2::H = undef; 64 65# (6) Now in packages 66$text = $t->fill_in(HASH => { H => 'good6' }, PACKAGE => 'Q'); 67is $text, 'hash is good6'; 68 69# (7) Now in the default root of the safe compartment 70TODO: { 71 local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; 72 $text = $t->fill_in(HASH => { H => 'good7' }, SAFE => $c); 73 is $text, 'hash is good7'; 74} 75 76# (8) Now in the default root after aliasing to a package that 77# got the hash stuffed in 78our $H; 79TODO: { 80 local $TODO = "test fails when tested with TAP/Devel::Cover" if defined $Devel::Cover::VERSION; 81 $text = $t->fill_in(HASH => { H => 'good8' }, SAFE => $c, PACKAGE => 'Q2'); 82 is $text, 'hash is good8'; 83} 84 85# Now let's make sure that none of the packages leaked on each other. 86# (9) This var should NOT have been installed into the main package 87ok !defined $H; 88$H = $H; 89 90# (11) this value overwrote the one from test 6. 91is $Q::H, 'good7'; 92 93# (12) 94is $Q2::H, 'good8'; 95