Clarify the status of bundled external perl modules
[openssl.git] / external / perl / Text-Template-1.46 / t / 01-basic.t
1 #!perl
2 #
3 # Tests of basic, essential functionality
4 #
5
6 use Text::Template;
7 $X::v = $Y::v = 0;              # Suppress `var used only once'
8
9 print "1..31\n";
10
11 $n=1;
12
13 $template_1 = <<EOM;
14 We will put value of \$v (which is "abc") here -> {\$v}
15 We will evaluate 1+1 here -> {1 + 1}
16 EOM
17
18 # (1) Construct temporary template file for testing
19 # file operations
20 $TEMPFILE = "tt$$";
21 open(TMP, "> $TEMPFILE") or print "not ok $n\n" && &abort("Couldn\'t write tempfile $TEMPFILE: $!");
22 print TMP $template_1;
23 close TMP;
24 print "ok $n\n"; $n++;
25
26 # (2) Build template from file
27 $template = new Text::Template ('type' => 'FILE', 'source' => $TEMPFILE);
28 if (defined($template)) {
29   print "ok $n\n";
30 } else {
31   print "not ok $n $Text::Template::ERROR\n";
32 }
33 $n++;
34
35 # (3) Fill in template from file
36 $X::v = "abc";  
37 $resultX = <<EOM;
38 We will put value of \$v (which is "abc") here -> abc
39 We will evaluate 1+1 here -> 2
40 EOM
41 $Y::v = "ABC";  
42 $resultY = <<EOM;
43 We will put value of \$v (which is "abc") here -> ABC
44 We will evaluate 1+1 here -> 2
45 EOM
46
47 $text = $template->fill_in('package' => X);
48 if ($text eq $resultX) {
49   print "ok $n\n";
50 } else {
51   print "not ok $n\n";
52 }
53 $n++;
54
55 # (4) Fill in same template again
56 $text = $template->fill_in('package' => Y);
57 if ($text eq $resultY) {
58   print "ok $n\n";
59 } else {
60   print "not ok $n\n";
61 }
62 $n++;
63
64
65
66 # (5) Simple test of `fill_this_in'
67 $text = Text::Template->fill_this_in( $template_1, 'package' => X);
68 if ($text eq $resultX) {
69   print "ok $n\n";
70 } else {
71   print "not ok $n\n";
72 }
73 $n++;
74
75 # (6) test creation of template from filehandle
76 if (open (TMPL, "< $TEMPFILE")) {
77   $template = new Text::Template ('type' => 'FILEHANDLE', 
78                                   'source' => *TMPL);
79   if (defined($template)) {
80     print "ok $n\n";
81   } else {
82     print "not ok $n $Text::Template::ERROR\n";
83   }
84   $n++;
85
86 # (7) test filling in of template from filehandle
87   $text = $template->fill_in('package' => X);
88   if ($text eq $resultX) {
89     print "ok $n\n";
90   } else {
91     print "not ok $n\n";
92   }
93   $n++;
94
95 # (8) test second fill_in on same template object
96   $text = $template->fill_in('package' => Y);
97   if ($text eq $resultY) {
98     print "ok $n\n";
99   } else {
100     print "not ok $n\n";
101   }
102   $n++;
103   close TMPL;
104 } else {
105   print "not ok $n\n";  $n++;
106   print "not ok $n\n";  $n++;
107   print "not ok $n\n";  $n++;
108 }
109
110
111 # (9) test creation of template from array
112 $template = new Text::Template 
113     ('type' => 'ARRAY', 
114      'source' => [ 
115                   'We will put value of $v (which is "abc") here -> {$v}',
116                   "\n",
117                   'We will evaluate 1+1 here -> {1+1}',
118                   "\n",
119                   ]);
120 if (defined($template)) {
121   print "ok $n\n";
122 } else {
123   print "not ok $n $Text::Template::ERROR\n";
124 }
125 $n++;
126
127 # (10) test filling in of template from array
128 $text = $template->fill_in('package' => X);
129 if ($text eq $resultX) {
130   print "ok $n\n";
131 } else {
132   print "not ok $n\n";
133 }
134 $n++;
135
136 # (11) test second fill_in on same array template object
137 $text = $template->fill_in('package' => Y);
138 if ($text eq $resultY) {
139   print "ok $n\n";
140 } else {
141   print "not ok $n\n";
142   print STDERR "$resultX\n---\n$text";
143   unless (!defined($text)) { print STDERR "ERROR: $Text::Template::ERROR\n"};
144 }
145 $n++;
146
147
148
149 # (12) Make sure \ is working properly
150 # Test added for version 1.11
151 my $tmpl = Text::Template->new(TYPE => 'STRING',
152                                SOURCE => 'B{"\\}"}C{"\\{"}D',
153                                );
154 # This should fail if the \ are not interpreted properly.
155 my $text = $tmpl->fill_in();
156 print +($text eq "B}C{D" ? '' : 'not '), "ok $n\n";
157 $n++;
158
159 # (13) Make sure \ is working properly
160 # Test added for version 1.11
161 $tmpl = Text::Template->new(TYPE => 'STRING',
162                             SOURCE => qq{A{"\t"}B},
163                            );
164 # Symptom of old problem:  ALL \ were special in templates, so
165 # The lexer would return (A, PROGTEXT("t"), B), and the
166 # result text would be AtB instead of A(tab)B.
167 $text = $tmpl->fill_in();
168
169 print +($text eq "A\tB" ? '' : 'not '), "ok $n\n";
170 $n++;
171
172 # (14-27) Make sure \ is working properly
173 # Test added for version 1.11
174 # This is a sort of general test.
175 my @tests = ('{""}' => '',      # (14)
176              '{"}"}' => undef,  # (15)
177              '{"\\}"}' => '}',  # One backslash
178              '{"\\\\}"}' => undef, # Two backslashes
179              '{"\\\\\\}"}' => '}', # Three backslashes
180              '{"\\\\\\\\}"}' => undef, # Four backslashes
181              '{"\\\\\\\\\\}"}' => '\}', # Five backslashes  (20)
182              '{"x20"}' => 'x20',
183              '{"\\x20"}' => ' ',        # One backslash
184              '{"\\\\x20"}' => '\\x20', # Two backslashes
185              '{"\\\\\\x20"}' => '\\ ', # Three backslashes
186              '{"\\\\\\\\x20"}' => '\\\\x20', # Four backslashes  (25)
187              '{"\\\\\\\\\\x20"}' => '\\\\ ', # Five backslashes
188              '{"\\x20\\}"}' => ' }', # (27)
189             );
190
191 my $i;
192 for ($i=0; $i<@tests; $i+=2) {
193   my $tmpl = Text::Template->new(TYPE => 'STRING',
194                                  SOURCE => $tests[$i],
195                                 );
196   my $text = $tmpl->fill_in;
197   my $result = $tests[$i+1];
198   my $ok = (! defined $text && ! defined $result
199             || $text eq $result);
200   unless ($ok) {
201     print STDERR "($n) expected .$result., got .$text.\n";
202   }
203   print +($ok ? '' : 'not '), "ok $n\n";
204   $n++;
205 }
206
207
208 # (28-30) I discovered that you can't pass a glob ref as your filehandle.
209 # MJD 20010827
210 # (28) test creation of template from filehandle
211 if (open (TMPL, "< $TEMPFILE")) {
212   $template = new Text::Template ('type' => 'FILEHANDLE', 
213                                   'source' => \*TMPL);
214   if (defined($template)) {
215     print "ok $n\n";
216   } else {
217     print "not ok $n $Text::Template::ERROR\n";
218   }
219   $n++;
220
221 # (29) test filling in of template from filehandle
222   $text = $template->fill_in('package' => X);
223   if ($text eq $resultX) {
224     print "ok $n\n";
225   } else {
226     print "not ok $n\n";
227   }
228   $n++;
229
230 # (30) test second fill_in on same template object
231   $text = $template->fill_in('package' => Y);
232   if ($text eq $resultY) {
233     print "ok $n\n";
234   } else {
235     print "not ok $n\n";
236   }
237   $n++;
238   close TMPL;
239 } else {
240   print "not ok $n\n";  $n++;
241   print "not ok $n\n";  $n++;
242   print "not ok $n\n";  $n++;
243 }
244
245 # (31) Test _scrubpkg for leakiness
246 $Text::Template::GEN0::test = 1;
247 Text::Template::_scrubpkg('Text::Template::GEN0');
248 if ($Text::Template::GEN0::test) {
249   print "not ok $n\n";
250 } else {
251   print "ok $n\n";
252 }
253 $n++;
254
255
256 END {unlink $TEMPFILE;}
257
258 exit;
259
260
261
262
263 sub abort {
264   unlink $TEMPFILE;
265   die $_[0];
266 }