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