NetWare port from Guruprasad S <SGURUPRASAD@novell.com>.
[p5sagit/p5-mst-13.2.git] / t / op / write.t
CommitLineData
a687059c 1#!./perl
2
9ccde9ea 3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
7
8print "1..44\n";
a687059c 9
2986a63f 10my $CAT = ($^O eq 'MSWin32' || $^O eq 'NetWare') ? 'type'
11 : ($^O eq 'MacOS') ? 'catenate'
12 : 'cat';
3fe9a6f1 13
a687059c 14format OUT =
15the quick brown @<<
16$fox
17jumped
18@*
19$multiline
20^<<<<<<<<<
21$foo
22^<<<<<<<<<
23$foo
24^<<<<<<...
25$foo
26now @<<the@>>>> for all@|||||men to come @<<<<
a0d0e21e 27{
28 'i' . 's', "time\n", $good, 'to'
29}
a687059c 30.
31
a0d0e21e 32open(OUT, '>Op_write.tmp') || die "Can't create Op_write.tmp";
a687059c 33
34$fox = 'foxiness';
35$good = 'good';
36$multiline = "forescore\nand\nseven years\n";
37$foo = 'when in the course of human events it becomes necessary';
38write(OUT);
39close OUT;
40
41$right =
42"the quick brown fox
43jumped
44forescore
45and
46seven years
47when in
48the course
49of huma...
50now is the time for all good men to come to\n";
51
3fe9a6f1 52if (`$CAT Op_write.tmp` eq $right)
784707d5 53 { print "ok 1\n"; 1 while unlink 'Op_write.tmp'; }
a687059c 54else
55 { print "not ok 1\n"; }
56
748a9306 57$fox = 'wolfishness';
58my $fox = 'foxiness'; # Test a lexical variable.
59
a687059c 60format OUT2 =
61the quick brown @<<
62$fox
63jumped
64@*
65$multiline
66^<<<<<<<<< ~~
67$foo
68now @<<the@>>>> for all@|||||men to come @<<<<
69'i' . 's', "time\n", $good, 'to'
70.
71
a0d0e21e 72open OUT2, '>Op_write.tmp' or die "Can't create Op_write.tmp";
a687059c 73
a687059c 74$good = 'good';
75$multiline = "forescore\nand\nseven years\n";
76$foo = 'when in the course of human events it becomes necessary';
77write(OUT2);
78close OUT2;
79
80$right =
81"the quick brown fox
82jumped
83forescore
84and
85seven years
86when in
87the course
88of human
89events it
90becomes
91necessary
92now is the time for all good men to come to\n";
93
3fe9a6f1 94if (`$CAT Op_write.tmp` eq $right)
784707d5 95 { print "ok 2\n"; 1 while unlink 'Op_write.tmp'; }
a687059c 96else
97 { print "not ok 2\n"; }
98
0f85fab0 99eval <<'EOFORMAT';
100format OUT2 =
101the brown quick @<<
102$fox
103jumped
104@*
105$multiline
a0d0e21e 106and
0f85fab0 107^<<<<<<<<< ~~
108$foo
109now @<<the@>>>> for all@|||||men to come @<<<<
110'i' . 's', "time\n", $good, 'to'
111.
112EOFORMAT
113
a0d0e21e 114open(OUT2, '>Op_write.tmp') || die "Can't create Op_write.tmp";
0f85fab0 115
116$fox = 'foxiness';
117$good = 'good';
118$multiline = "forescore\nand\nseven years\n";
119$foo = 'when in the course of human events it becomes necessary';
120write(OUT2);
121close OUT2;
122
123$right =
124"the brown quick fox
125jumped
126forescore
127and
128seven years
a0d0e21e 129and
0f85fab0 130when in
131the course
132of human
133events it
134becomes
135necessary
136now is the time for all good men to come to\n";
137
3fe9a6f1 138if (`$CAT Op_write.tmp` eq $right)
784707d5 139 { print "ok 3\n"; 1 while unlink 'Op_write.tmp'; }
0f85fab0 140else
141 { print "not ok 3\n"; }
142
55497cff 143# formline tests
144
145$mustbe = <<EOT;
146@ a
147@> ab
148@>> abc
149@>>> abc
150@>>>> abc
151@>>>>> abc
152@>>>>>> abc
153@>>>>>>> abc
154@>>>>>>>> abc
155@>>>>>>>>> abc
156@>>>>>>>>>> abc
157EOT
158
159$was1 = $was2 = '';
160for (0..10) {
161 # lexical picture
162 $^A = '';
163 my $format1 = '@' . '>' x $_;
164 formline $format1, 'abc';
165 $was1 .= "$format1 $^A\n";
166 # global
167 $^A = '';
168 local $format2 = '@' . '>' x $_;
169 formline $format2, 'abc';
170 $was2 .= "$format2 $^A\n";
171}
172print $was1 eq $mustbe ? "ok 4\n" : "not ok 4\n";
173print $was2 eq $mustbe ? "ok 5\n" : "not ok 5\n";
174
7056ecde 175$^A = '';
176
177# more test
178
179format OUT3 =
180^<<<<<<...
181$foo
182.
183
184open(OUT3, '>Op_write.tmp') || die "Can't create Op_write.tmp";
185
186$foo = 'fit ';
187write(OUT3);
188close OUT3;
189
190$right =
191"fit\n";
192
193if (`$CAT Op_write.tmp` eq $right)
784707d5 194 { print "ok 6\n"; 1 while unlink 'Op_write.tmp'; }
7056ecde 195else
196 { print "not ok 6\n"; }
197
445b3f51 198# test lexicals and globals
199{
200 my $this = "ok";
201 our $that = 7;
202 format LEX =
203@<<@|
204$this,$that
205.
206 open(LEX, ">&STDOUT") or die;
207 write LEX;
208 $that = 8;
209 write LEX;
fdc7a9f2 210 close LEX;
445b3f51 211}
c2e66d9e 212# LEX_INTERPNORMAL test
213my %e = ( a => 1 );
214format OUT4 =
215@<<<<<<
216"$e{a}"
217.
218open OUT4, ">Op_write.tmp" or die "Can't create Op_write.tmp";
219write (OUT4);
220close OUT4;
221if (`$CAT Op_write.tmp` eq "1\n") {
222 print "ok 9\n";
784707d5 223 1 while unlink "Op_write.tmp";
c2e66d9e 224 }
225else {
226 print "not ok 9\n";
227 }
784707d5 228
229eval <<'EOFORMAT';
230format OUT10 =
231@####.## @0###.##
232$test1, $test1
233.
234EOFORMAT
235
236open(OUT10, '>Op_write.tmp') || die "Can't create Op_write.tmp";
237
238$test1 = 12.95;
239write(OUT10);
240close OUT10;
241
242$right = " 12.95 00012.95\n";
243if (`$CAT Op_write.tmp` eq $right)
244 { print "ok 10\n"; 1 while unlink 'Op_write.tmp'; }
245else
246 { print "not ok 10\n"; }
247
248eval <<'EOFORMAT';
249format OUT11 =
250@0###.##
251$test1
252@ 0#
253$test1
254@0 #
255$test1
256.
257EOFORMAT
258
259open(OUT11, '>Op_write.tmp') || die "Can't create Op_write.tmp";
260
261$test1 = 12.95;
262write(OUT11);
263close OUT11;
264
265$right =
266"00012.95
2671 0#
26810 #\n";
269if (`$CAT Op_write.tmp` eq $right)
270 { print "ok 11\n"; 1 while unlink 'Op_write.tmp'; }
271else
272 { print "not ok 11\n"; }
9ccde9ea 273
274# 12..44: scary format testing from Merijn H. Brand
275
276use strict; # Amazed that this hackery can be made strict ...
277
278# Just a complete test for format, including top-, left- and bottom marging
279# and format detection through glob entries
280
281 $= = 7; # Page length
282my $ps = $^L; $^L = ""; # Catch the page separator
283my $tm = 1; # Top margin (empty lines before first output)
284my $bm = 2; # Bottom marging (empty lines between last text and footer)
285my $lm = 4; # Left margin (indent in spaces)
286
287if ($lm > 0 and !open STDOUT, "|-") { # Left margin (in this test ALWAYS set)
288 my $i = 12;
289 my $s = " " x $lm;
290 while (<STDIN>) {
291 s/^/$s/;
292 print + ($_ eq <DATA> ? "" : "not "), "ok ", $i++, "\n";
293 }
294 close STDIN;
295 print + (<DATA>?"not ":""), "ok ", $i++, "\n";
296 close STDOUT;
297 exit;
298 }
299$tm = "\n" x $tm;
300$= -= $bm + 1; # count one for the trailing "----"
301my $lastmin = 0;
302
303my @E;
304
305sub wryte
306{
307 $lastmin = $-;
308 write;
309 } # wryte;
310
311sub footer
312{
313 $% == 1 and return "";
314
315 $lastmin < $= and print "\n" x $lastmin;
316 print "\n" x $bm, "----\n", $ps;
317 $lastmin = $-;
318 "";
319 } # footer
320
321# Yes, this is sick ;-)
322format TOP =
323@* ~
324@{[footer]}
325@* ~
326$tm
327.
328
329format EmptyTOP =
330.
331
332format ENTRY =
333@ @<<<<~~
334@{(shift @E)||["",""]}
335.
336
337format EOR =
338- -----
339.
340
341sub has_format ($)
342{
343 my $fmt = shift;
344 exists $::{$fmt} or return 0;
345 $^O eq "MSWin32" or return defined *{$::{$fmt}}{FORMAT};
346 open my $null, "> /dev/null" or die;
347 my $fh = select $null;
348 local $~ = $fmt;
349 eval "write";
350 select $fh;
351 $@?0:1;
352 } # has_format
353
354$^ = has_format ("TOP") ? "TOP" : "EmptyTOP";
355has_format ("ENTRY") or die "No format defined for ENTRY";
356foreach my $e ( [ map { [ $_, "Test$_" ] } 1 .. 7 ],
357 [ map { [ $_, "${_}tseT" ] } 1 .. 5 ]) {
358 @E = @$e;
359 local $~ = "ENTRY";
360 wryte;
361 has_format ("EOR") or next;
362 local $~ = "EOR";
363 wryte;
364 }
365if (has_format ("EOF")) {
366 local $~ = "EOF";
367 wryte;
368 }
369
370close STDOUT;
371
372# That was test 44.
373
374__END__
375
376 1 Test1
377 2 Test2
378 3 Test3
379
380
381 ----
382 \f
383 4 Test4
384 5 Test5
385 6 Test6
386
387
388 ----
389 \f
390 7 Test7
391 - -----
392
393
394
395 ----
396 \f
397 1 1tseT
398 2 2tseT
399 3 3tseT
400
401
402 ----
403 \f
404 4 4tseT
405 5 5tseT
406 - -----