xref: /openbsd-src/gnu/usr.bin/perl/t/io/paragraph_mode.t (revision f3efcd0145415b7d44d9da97e0ad5c21b186ac61)
1*f3efcd01Safresh1#!./perl
2*f3efcd01Safresh1
3*f3efcd01Safresh1BEGIN {
4*f3efcd01Safresh1    chdir 't' if -d 't';
5*f3efcd01Safresh1    require './test.pl';
6*f3efcd01Safresh1    set_up_inc('../lib');
7*f3efcd01Safresh1}
8*f3efcd01Safresh1
9*f3efcd01Safresh1plan tests =>  80;
10*f3efcd01Safresh1
11*f3efcd01Safresh1my ($OUT, $filename, @chunks, @expected, $msg);
12*f3efcd01Safresh1
13*f3efcd01Safresh1{
14*f3efcd01Safresh1    # We start with files whose "paragraphs" contain no internal newlines.
15*f3efcd01Safresh1    @chunks = (
16*f3efcd01Safresh1        join('' => ( 1..3 )),
17*f3efcd01Safresh1        join('' => ( 4..6 )),
18*f3efcd01Safresh1        join('' => ( 7..9 )),
19*f3efcd01Safresh1        10
20*f3efcd01Safresh1    );
21*f3efcd01Safresh1
22*f3efcd01Safresh1    {
23*f3efcd01Safresh1        $msg = "'Well behaved' file: >= 2 newlines between text blocks; no internal newlines; 3 final newlines";
24*f3efcd01Safresh1
25*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
26*f3efcd01Safresh1        print $OUT "$_\n" for (
27*f3efcd01Safresh1            $chunks[0],
28*f3efcd01Safresh1            ("") x 1,
29*f3efcd01Safresh1            $chunks[1],
30*f3efcd01Safresh1            ("") x 2,
31*f3efcd01Safresh1            $chunks[2],
32*f3efcd01Safresh1            ("") x 3,
33*f3efcd01Safresh1        );
34*f3efcd01Safresh1        print $OUT $chunks[3];
35*f3efcd01Safresh1        close $OUT or die;
36*f3efcd01Safresh1
37*f3efcd01Safresh1        @expected = (
38*f3efcd01Safresh1            "$chunks[0]\n\n",
39*f3efcd01Safresh1            "$chunks[1]\n\n",
40*f3efcd01Safresh1            "$chunks[2]\n\n",
41*f3efcd01Safresh1            $chunks[3],
42*f3efcd01Safresh1        );
43*f3efcd01Safresh1        local $/ = '';
44*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
45*f3efcd01Safresh1    }
46*f3efcd01Safresh1
47*f3efcd01Safresh1    {
48*f3efcd01Safresh1        $msg = "'Well behaved' file: >= 2 newlines between text blocks; no internal newlines; 0 final newline";
49*f3efcd01Safresh1
50*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
51*f3efcd01Safresh1        print $OUT "$_\n" for (
52*f3efcd01Safresh1            $chunks[0],
53*f3efcd01Safresh1            ("") x 1,
54*f3efcd01Safresh1            $chunks[1],
55*f3efcd01Safresh1            ("") x 2,
56*f3efcd01Safresh1            $chunks[2],
57*f3efcd01Safresh1            ("") x 3,
58*f3efcd01Safresh1            $chunks[3],
59*f3efcd01Safresh1        );
60*f3efcd01Safresh1        close $OUT or die;
61*f3efcd01Safresh1
62*f3efcd01Safresh1        @expected = (
63*f3efcd01Safresh1            "$chunks[0]\n\n",
64*f3efcd01Safresh1            "$chunks[1]\n\n",
65*f3efcd01Safresh1            "$chunks[2]\n\n",
66*f3efcd01Safresh1            "$chunks[3]\n",
67*f3efcd01Safresh1        );
68*f3efcd01Safresh1        local $/ = '';
69*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
70*f3efcd01Safresh1    }
71*f3efcd01Safresh1
72*f3efcd01Safresh1    {
73*f3efcd01Safresh1        $msg = "'Well behaved' file: >= 2 newlines between text blocks; no internal newlines; 1 final newline";
74*f3efcd01Safresh1
75*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
76*f3efcd01Safresh1        print $OUT "$_\n" for (
77*f3efcd01Safresh1            $chunks[0],
78*f3efcd01Safresh1            ("") x 1,
79*f3efcd01Safresh1            $chunks[1],
80*f3efcd01Safresh1            ("") x 2,
81*f3efcd01Safresh1            $chunks[2],
82*f3efcd01Safresh1            ("") x 3,
83*f3efcd01Safresh1            $chunks[3],
84*f3efcd01Safresh1            ("") x 1,
85*f3efcd01Safresh1        );
86*f3efcd01Safresh1        close $OUT or die;
87*f3efcd01Safresh1
88*f3efcd01Safresh1        @expected = (
89*f3efcd01Safresh1            "$chunks[0]\n\n",
90*f3efcd01Safresh1            "$chunks[1]\n\n",
91*f3efcd01Safresh1            "$chunks[2]\n\n",
92*f3efcd01Safresh1            "$chunks[3]\n\n",
93*f3efcd01Safresh1        );
94*f3efcd01Safresh1        local $/ = '';
95*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
96*f3efcd01Safresh1    }
97*f3efcd01Safresh1
98*f3efcd01Safresh1    {
99*f3efcd01Safresh1        $msg = "'Well behaved' file: >= 2 newlines between text blocks; no internal newlines; 2 final newlines";
100*f3efcd01Safresh1
101*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
102*f3efcd01Safresh1        print $OUT "$_\n" for (
103*f3efcd01Safresh1            $chunks[0],
104*f3efcd01Safresh1            ("") x 1,
105*f3efcd01Safresh1            $chunks[1],
106*f3efcd01Safresh1            ("") x 2,
107*f3efcd01Safresh1            $chunks[2],
108*f3efcd01Safresh1            ("") x 3,
109*f3efcd01Safresh1            $chunks[3],
110*f3efcd01Safresh1            ("") x 2,
111*f3efcd01Safresh1        );
112*f3efcd01Safresh1        close $OUT or die;
113*f3efcd01Safresh1
114*f3efcd01Safresh1        @expected = (
115*f3efcd01Safresh1            "$chunks[0]\n\n",
116*f3efcd01Safresh1            "$chunks[1]\n\n",
117*f3efcd01Safresh1            "$chunks[2]\n\n",
118*f3efcd01Safresh1            "$chunks[3]\n\n",
119*f3efcd01Safresh1        );
120*f3efcd01Safresh1        local $/ = '';
121*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
122*f3efcd01Safresh1    }
123*f3efcd01Safresh1}
124*f3efcd01Safresh1
125*f3efcd01Safresh1{
126*f3efcd01Safresh1    # We continue with files whose "paragraphs" contain internal newlines.
127*f3efcd01Safresh1    @chunks = (
128*f3efcd01Safresh1        join('' => ( 1, 2, "\n", 3 )),
129*f3efcd01Safresh1        join('' => ( 4, 5, "   \n", 6 )),
130*f3efcd01Safresh1        join('' => ( 7, 8, " \t\n", 9 )),
131*f3efcd01Safresh1        10
132*f3efcd01Safresh1    );
133*f3efcd01Safresh1
134*f3efcd01Safresh1    {
135*f3efcd01Safresh1        $msg = "'Misbehaving' file: >= 2 newlines between text blocks; no internal newlines; 3 final newlines";
136*f3efcd01Safresh1
137*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
138*f3efcd01Safresh1        print $OUT "$_\n" for (
139*f3efcd01Safresh1            $chunks[0],
140*f3efcd01Safresh1            ("") x 1,
141*f3efcd01Safresh1            $chunks[1],
142*f3efcd01Safresh1            ("") x 2,
143*f3efcd01Safresh1            $chunks[2],
144*f3efcd01Safresh1            ("") x 3,
145*f3efcd01Safresh1        );
146*f3efcd01Safresh1        print $OUT $chunks[3];
147*f3efcd01Safresh1        close $OUT or die;
148*f3efcd01Safresh1
149*f3efcd01Safresh1        @expected = (
150*f3efcd01Safresh1            "$chunks[0]\n\n",
151*f3efcd01Safresh1            "$chunks[1]\n\n",
152*f3efcd01Safresh1            "$chunks[2]\n\n",
153*f3efcd01Safresh1            $chunks[3],
154*f3efcd01Safresh1        );
155*f3efcd01Safresh1        local $/ = '';
156*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
157*f3efcd01Safresh1    }
158*f3efcd01Safresh1
159*f3efcd01Safresh1    {
160*f3efcd01Safresh1        $msg = "'Misbehaving' file: >= 2 newlines between text blocks; no internal newlines; 0 final newline";
161*f3efcd01Safresh1
162*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
163*f3efcd01Safresh1        print $OUT "$_\n" for (
164*f3efcd01Safresh1            $chunks[0],
165*f3efcd01Safresh1            ("") x 1,
166*f3efcd01Safresh1            $chunks[1],
167*f3efcd01Safresh1            ("") x 2,
168*f3efcd01Safresh1            $chunks[2],
169*f3efcd01Safresh1            ("") x 3,
170*f3efcd01Safresh1            $chunks[3],
171*f3efcd01Safresh1        );
172*f3efcd01Safresh1        close $OUT or die;
173*f3efcd01Safresh1
174*f3efcd01Safresh1        @expected = (
175*f3efcd01Safresh1            "$chunks[0]\n\n",
176*f3efcd01Safresh1            "$chunks[1]\n\n",
177*f3efcd01Safresh1            "$chunks[2]\n\n",
178*f3efcd01Safresh1            "$chunks[3]\n",
179*f3efcd01Safresh1        );
180*f3efcd01Safresh1        local $/ = '';
181*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
182*f3efcd01Safresh1    }
183*f3efcd01Safresh1
184*f3efcd01Safresh1    {
185*f3efcd01Safresh1        $msg = "'Misbehaving' file: >= 2 newlines between text blocks; no internal newlines; 1 final newline";
186*f3efcd01Safresh1
187*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
188*f3efcd01Safresh1        print $OUT "$_\n" for (
189*f3efcd01Safresh1            $chunks[0],
190*f3efcd01Safresh1            ("") x 1,
191*f3efcd01Safresh1            $chunks[1],
192*f3efcd01Safresh1            ("") x 2,
193*f3efcd01Safresh1            $chunks[2],
194*f3efcd01Safresh1            ("") x 3,
195*f3efcd01Safresh1            $chunks[3],
196*f3efcd01Safresh1            ("") x 1,
197*f3efcd01Safresh1        );
198*f3efcd01Safresh1        close $OUT or die;
199*f3efcd01Safresh1
200*f3efcd01Safresh1        @expected = (
201*f3efcd01Safresh1            "$chunks[0]\n\n",
202*f3efcd01Safresh1            "$chunks[1]\n\n",
203*f3efcd01Safresh1            "$chunks[2]\n\n",
204*f3efcd01Safresh1            "$chunks[3]\n\n",
205*f3efcd01Safresh1        );
206*f3efcd01Safresh1        local $/ = '';
207*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
208*f3efcd01Safresh1    }
209*f3efcd01Safresh1
210*f3efcd01Safresh1    {
211*f3efcd01Safresh1        $msg = "'Misbehaving' file: >= 2 newlines between text blocks; no internal newlines; 2 final newlines";
212*f3efcd01Safresh1
213*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
214*f3efcd01Safresh1        print $OUT "$_\n" for (
215*f3efcd01Safresh1            $chunks[0],
216*f3efcd01Safresh1            ("") x 1,
217*f3efcd01Safresh1            $chunks[1],
218*f3efcd01Safresh1            ("") x 2,
219*f3efcd01Safresh1            $chunks[2],
220*f3efcd01Safresh1            ("") x 3,
221*f3efcd01Safresh1            $chunks[3],
222*f3efcd01Safresh1            ("") x 2,
223*f3efcd01Safresh1        );
224*f3efcd01Safresh1        close $OUT or die;
225*f3efcd01Safresh1
226*f3efcd01Safresh1        @expected = (
227*f3efcd01Safresh1            "$chunks[0]\n\n",
228*f3efcd01Safresh1            "$chunks[1]\n\n",
229*f3efcd01Safresh1            "$chunks[2]\n\n",
230*f3efcd01Safresh1            "$chunks[3]\n\n",
231*f3efcd01Safresh1        );
232*f3efcd01Safresh1        local $/ = '';
233*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
234*f3efcd01Safresh1    }
235*f3efcd01Safresh1}
236*f3efcd01Safresh1
237*f3efcd01Safresh1{
238*f3efcd01Safresh1    # We continue with files which start with newlines
239*f3efcd01Safresh1    # but whose "paragraphs" contain no internal newlines.
240*f3efcd01Safresh1    # We'll set our expectation that the leading newlines will get trimmed off
241*f3efcd01Safresh1    # and everything else will proceed normally.
242*f3efcd01Safresh1
243*f3efcd01Safresh1    @chunks = (
244*f3efcd01Safresh1        join('' => ( 1..3 )),
245*f3efcd01Safresh1        join('' => ( 4..6 )),
246*f3efcd01Safresh1        join('' => ( 7..9 )),
247*f3efcd01Safresh1        10
248*f3efcd01Safresh1    );
249*f3efcd01Safresh1
250*f3efcd01Safresh1    {
251*f3efcd01Safresh1        $msg = "'Badly behaved' file: leading newlines; 3 final newlines";
252*f3efcd01Safresh1
253*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
254*f3efcd01Safresh1        print $OUT "\n\n\n";
255*f3efcd01Safresh1        print $OUT "$_\n" for (
256*f3efcd01Safresh1            $chunks[0],
257*f3efcd01Safresh1            ("") x 1,
258*f3efcd01Safresh1            $chunks[1],
259*f3efcd01Safresh1            ("") x 2,
260*f3efcd01Safresh1            $chunks[2],
261*f3efcd01Safresh1            ("") x 3,
262*f3efcd01Safresh1        );
263*f3efcd01Safresh1        print $OUT $chunks[3];
264*f3efcd01Safresh1        close $OUT or die;
265*f3efcd01Safresh1
266*f3efcd01Safresh1        @expected = (
267*f3efcd01Safresh1            "$chunks[0]\n\n",
268*f3efcd01Safresh1            "$chunks[1]\n\n",
269*f3efcd01Safresh1            "$chunks[2]\n\n",
270*f3efcd01Safresh1            $chunks[3],
271*f3efcd01Safresh1        );
272*f3efcd01Safresh1        local $/ = '';
273*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
274*f3efcd01Safresh1    }
275*f3efcd01Safresh1
276*f3efcd01Safresh1    {
277*f3efcd01Safresh1        $msg = "'Badly behaved' file: leading newlines; 0 final newline";
278*f3efcd01Safresh1
279*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
280*f3efcd01Safresh1        print $OUT "\n\n\n";
281*f3efcd01Safresh1        print $OUT "$_\n" for (
282*f3efcd01Safresh1            $chunks[0],
283*f3efcd01Safresh1            ("") x 1,
284*f3efcd01Safresh1            $chunks[1],
285*f3efcd01Safresh1            ("") x 2,
286*f3efcd01Safresh1            $chunks[2],
287*f3efcd01Safresh1            ("") x 3,
288*f3efcd01Safresh1            $chunks[3],
289*f3efcd01Safresh1        );
290*f3efcd01Safresh1        close $OUT or die;
291*f3efcd01Safresh1
292*f3efcd01Safresh1        @expected = (
293*f3efcd01Safresh1            "$chunks[0]\n\n",
294*f3efcd01Safresh1            "$chunks[1]\n\n",
295*f3efcd01Safresh1            "$chunks[2]\n\n",
296*f3efcd01Safresh1            "$chunks[3]\n",
297*f3efcd01Safresh1        );
298*f3efcd01Safresh1        local $/ = '';
299*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
300*f3efcd01Safresh1    }
301*f3efcd01Safresh1
302*f3efcd01Safresh1    {
303*f3efcd01Safresh1        $msg = "'Badly behaved' file: leading newlines; 1 final newline";
304*f3efcd01Safresh1
305*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
306*f3efcd01Safresh1        print $OUT "\n\n\n";
307*f3efcd01Safresh1        print $OUT "$_\n" for (
308*f3efcd01Safresh1            $chunks[0],
309*f3efcd01Safresh1            ("") x 1,
310*f3efcd01Safresh1            $chunks[1],
311*f3efcd01Safresh1            ("") x 2,
312*f3efcd01Safresh1            $chunks[2],
313*f3efcd01Safresh1            ("") x 3,
314*f3efcd01Safresh1            $chunks[3],
315*f3efcd01Safresh1            ("") x 1,
316*f3efcd01Safresh1        );
317*f3efcd01Safresh1        close $OUT or die;
318*f3efcd01Safresh1
319*f3efcd01Safresh1        @expected = (
320*f3efcd01Safresh1            "$chunks[0]\n\n",
321*f3efcd01Safresh1            "$chunks[1]\n\n",
322*f3efcd01Safresh1            "$chunks[2]\n\n",
323*f3efcd01Safresh1            "$chunks[3]\n\n",
324*f3efcd01Safresh1        );
325*f3efcd01Safresh1        local $/ = '';
326*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
327*f3efcd01Safresh1    }
328*f3efcd01Safresh1
329*f3efcd01Safresh1    {
330*f3efcd01Safresh1        $msg = "'Badly behaved' file: leading newlines; 2 final newlines";
331*f3efcd01Safresh1
332*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
333*f3efcd01Safresh1        print $OUT "\n\n\n";
334*f3efcd01Safresh1        print $OUT "$_\n" for (
335*f3efcd01Safresh1            $chunks[0],
336*f3efcd01Safresh1            ("") x 1,
337*f3efcd01Safresh1            $chunks[1],
338*f3efcd01Safresh1            ("") x 2,
339*f3efcd01Safresh1            $chunks[2],
340*f3efcd01Safresh1            ("") x 3,
341*f3efcd01Safresh1            $chunks[3],
342*f3efcd01Safresh1            ("") x 2,
343*f3efcd01Safresh1        );
344*f3efcd01Safresh1        close $OUT or die;
345*f3efcd01Safresh1
346*f3efcd01Safresh1        @expected = (
347*f3efcd01Safresh1            "$chunks[0]\n\n",
348*f3efcd01Safresh1            "$chunks[1]\n\n",
349*f3efcd01Safresh1            "$chunks[2]\n\n",
350*f3efcd01Safresh1            "$chunks[3]\n\n",
351*f3efcd01Safresh1        );
352*f3efcd01Safresh1        local $/ = '';
353*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
354*f3efcd01Safresh1    }
355*f3efcd01Safresh1}
356*f3efcd01Safresh1
357*f3efcd01Safresh1{
358*f3efcd01Safresh1    # We continue with files which start with newlines
359*f3efcd01Safresh1    # and whose "paragraphs" contain internal newlines.
360*f3efcd01Safresh1    # We'll set our expectation that the leading newlines will get trimmed off
361*f3efcd01Safresh1    # and everything else will proceed normally.
362*f3efcd01Safresh1
363*f3efcd01Safresh1    @chunks = (
364*f3efcd01Safresh1        join('' => ( 1, 2, "\n", 3 )),
365*f3efcd01Safresh1        join('' => ( 4, 5, "   \n", 6 )),
366*f3efcd01Safresh1        join('' => ( 7, 8, " \t\n", 9 )),
367*f3efcd01Safresh1        10
368*f3efcd01Safresh1    );
369*f3efcd01Safresh1
370*f3efcd01Safresh1    {
371*f3efcd01Safresh1        $msg = "'Very badly behaved' file: leading newlines; internal newlines; 3 final newlines";
372*f3efcd01Safresh1
373*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
374*f3efcd01Safresh1        print $OUT "\n\n\n";
375*f3efcd01Safresh1        print $OUT "$_\n" for (
376*f3efcd01Safresh1            $chunks[0],
377*f3efcd01Safresh1            ("") x 1,
378*f3efcd01Safresh1            $chunks[1],
379*f3efcd01Safresh1            ("") x 2,
380*f3efcd01Safresh1            $chunks[2],
381*f3efcd01Safresh1            ("") x 3,
382*f3efcd01Safresh1        );
383*f3efcd01Safresh1        print $OUT $chunks[3];
384*f3efcd01Safresh1        close $OUT or die;
385*f3efcd01Safresh1
386*f3efcd01Safresh1        @expected = (
387*f3efcd01Safresh1            "$chunks[0]\n\n",
388*f3efcd01Safresh1            "$chunks[1]\n\n",
389*f3efcd01Safresh1            "$chunks[2]\n\n",
390*f3efcd01Safresh1            $chunks[3],
391*f3efcd01Safresh1        );
392*f3efcd01Safresh1        local $/ = '';
393*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
394*f3efcd01Safresh1    }
395*f3efcd01Safresh1
396*f3efcd01Safresh1    {
397*f3efcd01Safresh1        $msg = "'Very badly behaved' file: leading newlines; internal newlines; 0 final newline";
398*f3efcd01Safresh1
399*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
400*f3efcd01Safresh1        print $OUT "\n\n\n";
401*f3efcd01Safresh1        print $OUT "$_\n" for (
402*f3efcd01Safresh1            $chunks[0],
403*f3efcd01Safresh1            ("") x 1,
404*f3efcd01Safresh1            $chunks[1],
405*f3efcd01Safresh1            ("") x 2,
406*f3efcd01Safresh1            $chunks[2],
407*f3efcd01Safresh1            ("") x 3,
408*f3efcd01Safresh1            $chunks[3],
409*f3efcd01Safresh1        );
410*f3efcd01Safresh1        close $OUT or die;
411*f3efcd01Safresh1
412*f3efcd01Safresh1        @expected = (
413*f3efcd01Safresh1            "$chunks[0]\n\n",
414*f3efcd01Safresh1            "$chunks[1]\n\n",
415*f3efcd01Safresh1            "$chunks[2]\n\n",
416*f3efcd01Safresh1            "$chunks[3]\n",
417*f3efcd01Safresh1        );
418*f3efcd01Safresh1        local $/ = '';
419*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
420*f3efcd01Safresh1    }
421*f3efcd01Safresh1
422*f3efcd01Safresh1    {
423*f3efcd01Safresh1        $msg = "'Very badly behaved' file: leading newlines; internal newlines; 1 final newline";
424*f3efcd01Safresh1
425*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
426*f3efcd01Safresh1        print $OUT "\n\n\n";
427*f3efcd01Safresh1        print $OUT "$_\n" for (
428*f3efcd01Safresh1            $chunks[0],
429*f3efcd01Safresh1            ("") x 1,
430*f3efcd01Safresh1            $chunks[1],
431*f3efcd01Safresh1            ("") x 2,
432*f3efcd01Safresh1            $chunks[2],
433*f3efcd01Safresh1            ("") x 3,
434*f3efcd01Safresh1            $chunks[3],
435*f3efcd01Safresh1            ("") x 1,
436*f3efcd01Safresh1        );
437*f3efcd01Safresh1        close $OUT or die;
438*f3efcd01Safresh1
439*f3efcd01Safresh1        @expected = (
440*f3efcd01Safresh1            "$chunks[0]\n\n",
441*f3efcd01Safresh1            "$chunks[1]\n\n",
442*f3efcd01Safresh1            "$chunks[2]\n\n",
443*f3efcd01Safresh1            "$chunks[3]\n\n",
444*f3efcd01Safresh1        );
445*f3efcd01Safresh1        local $/ = '';
446*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
447*f3efcd01Safresh1    }
448*f3efcd01Safresh1
449*f3efcd01Safresh1    {
450*f3efcd01Safresh1        $msg = "'Very badly behaved' file: leading newlines; internal newlines; 2 final newlines";
451*f3efcd01Safresh1
452*f3efcd01Safresh1        ($OUT, $filename) = open_tempfile();
453*f3efcd01Safresh1        print $OUT "\n\n\n";
454*f3efcd01Safresh1        print $OUT "$_\n" for (
455*f3efcd01Safresh1            $chunks[0],
456*f3efcd01Safresh1            ("") x 1,
457*f3efcd01Safresh1            $chunks[1],
458*f3efcd01Safresh1            ("") x 2,
459*f3efcd01Safresh1            $chunks[2],
460*f3efcd01Safresh1            ("") x 3,
461*f3efcd01Safresh1            $chunks[3],
462*f3efcd01Safresh1            ("") x 2,
463*f3efcd01Safresh1        );
464*f3efcd01Safresh1        close $OUT or die;
465*f3efcd01Safresh1
466*f3efcd01Safresh1        @expected = (
467*f3efcd01Safresh1            "$chunks[0]\n\n",
468*f3efcd01Safresh1            "$chunks[1]\n\n",
469*f3efcd01Safresh1            "$chunks[2]\n\n",
470*f3efcd01Safresh1            "$chunks[3]\n\n",
471*f3efcd01Safresh1        );
472*f3efcd01Safresh1        local $/ = '';
473*f3efcd01Safresh1        perform_tests($filename, \@expected, $msg);
474*f3efcd01Safresh1    }
475*f3efcd01Safresh1}
476*f3efcd01Safresh1
477*f3efcd01Safresh1########## SUBROUTINES ##########
478*f3efcd01Safresh1
479*f3efcd01Safresh1sub open_tempfile {
480*f3efcd01Safresh1    my $filename = tempfile();
481*f3efcd01Safresh1    open my $OUT, '>', $filename or die;
482*f3efcd01Safresh1    binmode $OUT;
483*f3efcd01Safresh1    return ($OUT, $filename);
484*f3efcd01Safresh1}
485*f3efcd01Safresh1
486*f3efcd01Safresh1sub perform_tests {
487*f3efcd01Safresh1    my ($filename, $expected, $msg) = @_;
488*f3efcd01Safresh1    open my $IN, '<', $filename or die;
489*f3efcd01Safresh1    my @got = <$IN>;
490*f3efcd01Safresh1    my $success = 1;
491*f3efcd01Safresh1    for (my $i=0; $i<=$#${expected}; $i++) {
492*f3efcd01Safresh1        if ($got[$i] ne $expected->[$i]) {
493*f3efcd01Safresh1            $success = 0;
494*f3efcd01Safresh1            last;
495*f3efcd01Safresh1        }
496*f3efcd01Safresh1    }
497*f3efcd01Safresh1    ok($success, $msg);
498*f3efcd01Safresh1
499*f3efcd01Safresh1    seek $IN, 0, 0;
500*f3efcd01Safresh1    for (my $i=0; $i<=$#${expected}; $i++) {
501*f3efcd01Safresh1        is(<$IN>, $expected->[$i], "Got expected record $i");
502*f3efcd01Safresh1    }
503*f3efcd01Safresh1    close $IN or die;
504*f3efcd01Safresh1}
505