Add check for wrong number of newlines at the end of the file
[catagits/Test-EOL.git] / t / 12-fail.t
index a311f4d..f98c476 100644 (file)
@@ -31,7 +31,7 @@ $inc = "-I $inc" if $inc;
 {
     my ($dir, $file) = make_bad_file_3();
     run_ok( "all_perl_files_ok( '$file' )",
-            qr/^not ok 1 - No incorrect line endings in '[^']*' \Qon line 1: [\r] /m,
+            qr/^not ok 1 - No incorrect line endings in '[^']*' \Qon line 1: [\r]/m,
             'windows EOL found in tmp file 3' );
 }
 
@@ -43,16 +43,43 @@ $inc = "-I $inc" if $inc;
             'Trailing ws EOL found in tmp file 4' );
 }
 
+{
+    my $dir = make_bad_file_5();
+    run_ok( "all_perl_files_ok({trailing_newline => 1}, '$dir' )",
+            qr/^not ok 1 - No incorrect line endings in '[^']*' \Qon line 2: Missing "\n" at end of file/m,
+            'Missing final newline found in tmp file 5' );
+}
+
+{
+    my $dir = make_bad_file_6();
+    run_ok( "all_perl_files_ok({trailing_newline => 1}, '$dir' )",
+            qr/^not ok 1 - No incorrect line endings in '[^']*' \Qon line 2: 1 blank line at end of file/m,
+            'Trailing blank line found in tmp file 6' );
+}
+
+{
+    my $dir = make_bad_file_7();
+    run_ok( "all_perl_files_ok({
+                 trailing_whitespace => 1,
+                 trailing_newline => 1,
+                 all_reasons => 1,
+             }, '$dir' )",
+            qr/^not ok 1 - No incorrect line endings in '[^']*'.*^# line 2: \Q[\s]: [\s]\E.*^# line 2: 1 blank line at end of file.*^# line 2: Missing "\\n" at end of file/ms,
+            'Trailing blank line found in tmp file 7' );
+}
+
 sub run_ok {
     my ($code, $match, $test_name) = @_;
-    my $line = (caller)[2];
-    die "code containing double quotes is not portable on Win32 in one-liners" if $code =~ /"/;
+    my (undef, $file, $line) = caller;
+    die "code containing double quotes is not portable on Win32 in one-liners at $file $line.\n" if $code =~ /"/;
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
     my (undef, $outfile) = tempfile();
-    is( `$perl $inc -MTest::EOL -e "$code" > $outfile 2>&1`, '', "test sub program at line $line: output redirected" );
-    is( $? >> 8, 1, "test sub program at line $line: exit code is 1" );
+    is( `$perl $inc -MTest::EOL -e "$code" > $outfile 2>&1`, '', "test sub program: output redirected" );
+    is( $? >> 8, 1, "test sub program: exit code is 1" );
     local $/ = undef;
-    open my $fh, '<', $outfile or die $!;
+    open my $fh, '<', $outfile or die "Can't open $outfile: $!";
     my $content = <$fh>;
+    close $fh or die "Can't close $outfile: $!";
     like( $content, $match, $test_name );
     unlink $outfile;
 }
@@ -157,3 +184,30 @@ print $fh '}';
   return $tmpdir;
 }
 
+sub make_bad_file_5 {
+  my $tmpdir = tempdir( CLEANUP => 1 );
+  my ($fh, $filename) = tempfile( DIR => $tmpdir, SUFFIX => '.pL' );
+  binmode $fh, ':raw';
+  print $fh "one line here\nno EOL here";
+  close $fh;
+  return $filename;
+}
+
+sub make_bad_file_6 {
+  my $tmpdir = tempdir( CLEANUP => 1 );
+  my ($fh, $filename) = tempfile( DIR => $tmpdir, SUFFIX => '.pL' );
+  binmode $fh, ':raw';
+  print $fh "blank line following here\n \n";
+  close $fh;
+  return $filename;
+}
+
+sub make_bad_file_7 {
+  my $tmpdir = tempdir( CLEANUP => 1 );
+  my ($fh, $filename) = tempfile( DIR => $tmpdir, SUFFIX => '.pL' );
+  binmode $fh, ':raw';
+  print $fh "blank trailing line without newline\n ";
+  close $fh;
+  return $filename;
+}
+