Skip to content

Commit

Permalink
add trailing_whitespace option and release (3 times)
Browse files Browse the repository at this point in the history
  • Loading branch information
Arthur Axel 'fREW' Schmidt committed Jan 19, 2010
1 parent 5bcec1c commit 9161327
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 12 deletions.
13 changes: 12 additions & 1 deletion Changes
@@ -1,4 +1,15 @@
Revision history for Test-NoTabs
Revision history for Test-EOL

0.6 2010-01-19
- I'm so bad at this! Fix another logic error that made all files fail
when using trailing_whitespace option (fREW)

0.5 2010-01-19
- Fix logic fail that made all filenames the same if a user uses the
trailing_whitespace option (fREW)

0.4 2010-01-19
- Add checks for trailing whitespace (fREW)

0.3 2009-07-18
- Fix File::Find regex which I had broken.
Expand Down
19 changes: 17 additions & 2 deletions README
Expand Up @@ -8,6 +8,11 @@ SYNOPSIS
use Test::EOL tests => 1;
eol_unix_ok( 'lib/Module.pm', 'Module is ^M free');

and to add checks for trailing whitespace:

use Test::EOL tests => 1;
eol_unix_ok( 'lib/Module.pm', 'Module is ^M and trailing whitespace free', { trailing_whitespace => 1 });

Module authors can include the following in a t/eol.t and have
"Test::EOL" automatically find and check all perl files in a module
distribution:
Expand All @@ -20,6 +25,16 @@ SYNOPSIS
use Test::EOL;
all_perl_files_ok( @mydirs );

and if authors would like to check for trailing whitespace:

use Test::EOL;
all_perl_files_ok({ trailing_whitespace => 1 });

or

use Test::EOL;
all_perl_files_ok({ trailing_whitespace => 1 }, @mydirs );

DESCRIPTION
This module scans your project/distribution for any perl files (scripts,
modules, etc) for the presence of windows line endings.
Expand All @@ -29,7 +44,7 @@ EXPORT
you don't export anything, such as for a purely object-oriented module.

FUNCTIONS
all_perl_files_ok( [ @directories ] )
all_perl_files_ok( [ \%options ], [ @directories ] )
Applies "eol_unix_ok()" to all perl files found in @directories (and sub
directories). If no <@directories> is given, the starting point is one
level above the current running script, that should cover all the files
Expand All @@ -43,7 +58,7 @@ FUNCTIONS

the total number of files tested must be specified.

eol_unix_ok( $file [, $text] )
eol_unix_ok( $file [, $text] [, \%options ] )
Run a unix EOL check on $file. For a module, the path (lib/My/Module.pm)
or the name (My::Module) can be both used.

Expand Down
38 changes: 31 additions & 7 deletions lib/Test/EOL.pm
Expand Up @@ -10,7 +10,7 @@ use File::Find;

use vars qw( $VERSION $PERL $UNTAINT_PATTERN $PERL_PATTERN);

$VERSION = '0.3';
$VERSION = '0.6';

$PERL = $^X || 'perl';
$UNTAINT_PATTERN = qr|^([-+@\w./:\\]+)$|;
Expand Down Expand Up @@ -64,26 +64,35 @@ sub _all_files {

sub eol_unix_ok {
my $file = shift;
my $test_txt = shift || "No windows line endings in '$file'";
my $test_txt;
$test_txt = shift if !ref $_[0];
$test_txt ||= "No windows line endings in '$file'";
my $options = shift if ref $_[0] eq 'HASH';
$options ||= {
trailing_whitespace => 0,
};
$file = _module_to_path($file);
open my $fh, $file or do { $Test->ok(0, $test_txt); $Test->diag("Could not open $file: $!"); return; };
my $line = 0;
while (<$fh>) {
$line++;
if ( /\r$/ ) {
if (
(!$options->{trailing_whitespace} && /\r$/) ||
( $options->{trailing_whitespace} && /(\r|[ \t]+)$/)
) {
$Test->ok(0, $test_txt . " on line $line");
return 0;
}
}
$Test->ok(1, $test_txt);
return 1;
}

sub all_perl_files_ok {
my $options = shift if ref $_[0] eq 'HASH';
my @files = _all_perl_files( @_ );
_make_plan();
foreach my $file ( @files ) {
eol_unix_ok($file);
eol_unix_ok($file, $options);
}
}

Expand Down Expand Up @@ -142,6 +151,11 @@ report its results in standard C<Test::Simple> fashion:
use Test::EOL tests => 1;
eol_unix_ok( 'lib/Module.pm', 'Module is ^M free');
and to add checks for trailing whitespace:
use Test::EOL tests => 1;
eol_unix_ok( 'lib/Module.pm', 'Module is ^M and trailing whitespace free', { trailing_whitespace => 1 });
Module authors can include the following in a t/eol.t and have C<Test::EOL>
automatically find and check all perl files in a module distribution:
Expand All @@ -153,6 +167,16 @@ or
use Test::EOL;
all_perl_files_ok( @mydirs );
and if authors would like to check for trailing whitespace:
use Test::EOL;
all_perl_files_ok({ trailing_whitespace => 1 });
or
use Test::EOL;
all_perl_files_ok({ trailing_whitespace => 1 }, @mydirs );
=head1 DESCRIPTION
This module scans your project/distribution for any perl files (scripts,
Expand All @@ -165,7 +189,7 @@ if you don't export anything, such as for a purely object-oriented module.
=head1 FUNCTIONS
=head2 all_perl_files_ok( [ @directories ] )
=head2 all_perl_files_ok( [ \%options ], [ @directories ] )
Applies C<eol_unix_ok()> to all perl files found in C<@directories> (and sub
directories). If no <@directories> is given, the starting point is one level
Expand All @@ -180,7 +204,7 @@ If the test plan is defined:
the total number of files tested must be specified.
=head2 eol_unix_ok( $file [, $text] )
=head2 eol_unix_ok( $file [, $text] [, \%options ] )
Run a unix EOL check on C<$file>. For a module, the path (lib/My/Module.pm) or the
name (My::Module) can be both used.
Expand Down
5 changes: 4 additions & 1 deletion t/11-all.t
Expand Up @@ -18,7 +18,10 @@ eol_unix_ok( $file2 );
my $file3 = make_file3();
eol_unix_ok( $file3 );

unlink foreach ( $file1, $file2, $file3 );
my $file4 = make_file3();
eol_unix_ok( $file3, { trailing_whitespace => 1 });

unlink foreach ( $file1, $file2, $file3, $file4 );

sub make_file1 {
my ($fh, $filename) = tempfile();
Expand Down
37 changes: 36 additions & 1 deletion t/12-fail.t
Expand Up @@ -42,6 +42,18 @@ $inc = "-I $inc" if $inc;
system("rm -rf $dir");
}

{
my $dir = make_bad_file_4();
my (undef, $outfile) = tempfile();
ok( `$perl $inc -MTest::EOL -e "all_perl_files_ok({trailing_whitespace => 1}, '$dir' )" 2>&1 > $outfile` );
open my $fh, '<', $outfile or die $!;
local $/ = undef;
my $content = <$fh>;
like( $content, qr/^not ok 1 - No windows line endings in '[^']*' on line \d+/m, 'windows EOL found in tmp file 4' );
unlink $outfile;
system("rm -rf $dir");
}

sub make_bad_file_1 {
my $tmpdir = tempdir();
my ($fh, $filename) = tempfile( DIR => $tmpdir, SUFFIX => '.pL' );
Expand All @@ -50,7 +62,7 @@ sub make_bad_file_1 {
sub main {
print "Hello!\r\n";
}
}
DUMMY
return $tmpdir;
}
Expand Down Expand Up @@ -97,3 +109,26 @@ DUMMY
return ($tmpdir, $filename);
}

sub make_bad_file_4 {
my $tmpdir = tempdir();
my ($fh, $filename) = tempfile( DIR => $tmpdir, SUFFIX => '.pL' );
print $fh <<"DUMMY";
#!perl
=pod
=head1 NAME
test.pL - A test script
=cut
sub main {
DUMMY

print $fh qq{ print "Hello!\n"; \n}; # <-- whitespace
print $fh '}';

return $tmpdir;
}

Expand Down

0 comments on commit 9161327

Please sign in to comment.