Update the bundled external perl module Text-Template to version 1.56
[openssl.git] / external / perl / Text-Template-1.56 / t / hash.t
1 #!perl
2 #
3 # test apparatus for Text::Template module
4 # still incomplete.
5
6 use strict;
7 use warnings;
8 use Test::More tests => 13;
9
10 use_ok 'Text::Template' or exit 1;
11
12 my $template = 'We will put value of $v (which is "good") here -> {$v}';
13
14 my $v = 'oops (main)';
15 $Q::v = 'oops (Q)';
16
17 my $vars = { 'v' => \'good' };
18
19 # (1) Build template from string
20 $template = Text::Template->new('type' => 'STRING', 'source' => $template);
21 isa_ok $template, 'Text::Template';
22
23 # (2) Fill in template in anonymous package
24 my $result2 = 'We will put value of $v (which is "good") here -> good';
25 my $text = $template->fill_in(HASH => $vars);
26 is $text, $result2;
27
28 # (3) Did we clobber the main variable?
29 is $v, 'oops (main)';
30
31 # (4) Fill in same template again
32 my $result4 = 'We will put value of $v (which is "good") here -> good';
33 $text = $template->fill_in(HASH => $vars);
34 is $text, $result4;
35
36 # (5) Now with a package
37 my $result5 = 'We will put value of $v (which is "good") here -> good';
38 $text = $template->fill_in(HASH => $vars, PACKAGE => 'Q');
39 is $text, $result5;
40
41 # (6) We expect to have clobbered the Q variable.
42 is $Q::v, 'good';
43
44 # (7) Now let's try it without a package
45 my $result7 = 'We will put value of $v (which is "good") here -> good';
46 $text = $template->fill_in(HASH => $vars);
47 is $text, $result7;
48
49 # (8-11) Now what does it do when we pass a hash with undefined values?
50 # Roy says it does something bad. (Added for 1.20.)
51 my $WARNINGS = 0;
52 {
53     local $SIG{__WARN__} = sub { $WARNINGS++ };
54     local $^W = 1;    # Make sure this is on for this test
55     my $template8 = 'We will put value of $v (which is "good") here -> {defined $v ? "bad" : "good"}';
56     my $result8   = 'We will put value of $v (which is "good") here -> good';
57     my $template  = Text::Template->new('type' => 'STRING', 'source' => $template8);
58     my $text = $template->fill_in(HASH => { 'v' => undef });
59
60     # (8) Did we generate a warning?
61     cmp_ok $WARNINGS, '==', 0;
62
63     # (9) Was the output correct?
64     is $text, $result8;
65
66     # (10-11) Let's try that again, with a twist this time
67     $WARNINGS = 0;
68     $text = $template->fill_in(HASH => [ { 'v' => 17 }, { 'v' => undef } ]);
69
70     # (10) Did we generate a warning?
71     cmp_ok $WARNINGS, '==', 0;
72
73     # (11) Was the output correct?
74     SKIP: {
75         skip 'not supported before 5.005', 1 unless $] >= 5.005;
76
77         is $text, $result8;
78     }
79 }
80
81 # (12) Now we'll test the multiple-hash option  (Added for 1.20.)
82 $text = Text::Template::fill_in_string(q{$v: {$v}.  @v: [{"@v"}].},
83     HASH => [
84         { 'v' => 17 },
85         { 'v' => [ 'a', 'b', 'c' ] },
86         { 'v' => \23 }
87     ]
88 );
89
90 my $result = q{$v: 23.  @v: [a b c].};
91 is $text, $result;