Bundle the non core Perl module Text::Template
[openssl.git] / external / perl / Text-Template-1.46 / t / 02-hash.t
1 #!perl
2 #
3 # test apparatus for Text::Template module
4 # still incomplete.
5
6 use Text::Template;
7
8 die "This is the test program for Text::Template version 1.46.
9 You are using version $Text::Template::VERSION instead.
10 That does not make sense.\n
11 Aborting"
12   unless $Text::Template::VERSION == 1.46;
13
14
15 print "1..12\n";
16
17 $n=1;
18
19 $template = 'We will put value of $v (which is "good") here -> {$v}';
20
21 $v = 'oops (main)';
22 $Q::v = 'oops (Q)';
23
24 $vars = { 'v' => \'good' };
25
26 # (1) Build template from string
27 $template = new Text::Template ('type' => 'STRING', 'source' => $template);
28 print +($template ? '' : 'not '), "ok $n\n";
29 $n++;
30
31 # (2) Fill in template in anonymous package
32 $result2 = 'We will put value of $v (which is "good") here -> good';
33 $text = $template->fill_in(HASH => $vars);
34 print +($text eq $result2 ? '' : 'not '), "ok $n\n";
35 $n++;
36
37 # (3) Did we clobber the main variable?
38 print +($v eq 'oops (main)' ? '' : 'not '), "ok $n\n";
39 $n++;
40
41 # (4) Fill in same template again
42 $result4 = 'We will put value of $v (which is "good") here -> good';
43 $text = $template->fill_in(HASH => $vars);
44 print +($text eq $result4 ? '' : 'not '), "ok $n\n";
45 $n++;
46
47 # (5) Now with a package
48 $result5 = 'We will put value of $v (which is "good") here -> good';
49 $text = $template->fill_in(HASH => $vars, PACKAGE => 'Q');
50 print +($text eq $result5 ? '' : 'not '), "ok $n\n";
51 $n++;
52
53 # (6) We expect to have clobbered the Q variable.
54 print +($Q::v eq 'good' ? '' : 'not '), "ok $n\n";
55 $n++;
56
57 # (7) Now let's try it without a package
58 $result7 = 'We will put value of $v (which is "good") here -> good';
59 $text = $template->fill_in(HASH => $vars);
60 print +($text eq $result7 ? '' : 'not '), "ok $n\n";
61 $n++;
62
63 # (8-11) Now what does it do when we pass a hash with undefined values?
64 # Roy says it does something bad. (Added for 1.20.)
65 my $WARNINGS = 0;
66 {
67   local $SIG{__WARN__} = sub {$WARNINGS++};
68   local $^W = 1;       # Make sure this is on for this test
69   $template8 = 'We will put value of $v (which is "good") here -> {defined $v ? "bad" : "good"}';
70   $result8 = 'We will put value of $v (which is "good") here -> good';
71   my $template = 
72     new Text::Template ('type' => 'STRING', 'source' => $template8);
73   my $text = $template->fill_in(HASH => {'v' => undef});
74   # (8) Did we generate a warning?
75   print +($WARNINGS == 0 ? '' : 'not '), "ok $n\n";
76   $n++;
77   
78   # (9) Was the output correct?
79   print +($text eq $result8 ? '' : 'not '), "ok $n\n";
80   $n++;
81
82   # (10-11) Let's try that again, with a twist this time
83   $WARNINGS = 0;
84   $text = $template->fill_in(HASH => [{'v' => 17}, {'v' => undef}]);
85   # (10) Did we generate a warning?
86   print +($WARNINGS == 0 ? '' : 'not '), "ok $n\n";
87   $n++;
88   
89   # (11) Was the output correct?
90   if ($] < 5.005) {
91     print "ok $n # skipped -- not supported before 5.005\n";
92   } else {
93     print +($text eq $result8 ? '' : 'not '), "ok $n\n";
94   }
95   $n++;
96 }
97
98
99 # (12) Now we'll test the multiple-hash option  (Added for 1.20.)
100 $text = Text::Template::fill_in_string(q{$v: {$v}.  @v: [{"@v"}].},
101                                        HASH => [{'v' => 17}, 
102                                                 {'v' => ['a', 'b', 'c']},
103                                                 {'v' => \23},
104                                                ]);
105 $result = q{$v: 23.  @v: [a b c].};
106 print +($text eq $result ? '' : 'not '), "ok $n\n";
107 $n++;
108
109
110 exit;
111