mirror of
https://github.com/openssl/openssl.git
synced 2024-12-21 06:09:35 +08:00
95 lines
2.5 KiB
Perl
95 lines
2.5 KiB
Perl
|
#!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';
|