X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTest%2FEOL.pm;h=fbbaa2f5fa3d98507a55a81d9669381b4d7a2845;hb=936fb8fb4f754de66979efe34331b62372796eb9;hp=3976a44e72f8924a511f11464b281a9a43272398;hpb=f17f4176809cf543fb1d04b24d83f9af10597b3b;p=catagits%2FTest-EOL.git diff --git a/lib/Test/EOL.pm b/lib/Test/EOL.pm index 3976a44..fbbaa2f 100644 --- a/lib/Test/EOL.pm +++ b/lib/Test/EOL.pm @@ -1,4 +1,5 @@ package Test::EOL; +# ABSTRACT: Check the correct line endings in your project use strict; use warnings; @@ -8,9 +9,7 @@ use File::Spec; use FindBin qw($Bin); use File::Find; -use vars qw( $VERSION $PERL $UNTAINT_PATTERN $PERL_PATTERN); - -$VERSION = '0.7'; +use vars qw( $PERL $UNTAINT_PATTERN $PERL_PATTERN); $PERL = $^X || 'perl'; $UNTAINT_PATTERN = qr|^([-+@\w./:\\]+)$|; @@ -64,10 +63,10 @@ sub _all_files { # Formats various human invisible symbols # to similar visible ones. -# Perhaps ^M or something like that +# Perhaps ^M or something like that # would be more appropriate? -sub _show_whitespace { +sub _show_whitespace { my $string = shift; $string =~ s/\r/[\\r]/g; $string =~ s/\t/[\\t]/g; @@ -77,11 +76,11 @@ sub _show_whitespace { # Format a line record for diagnostics. -sub _debug_line { +sub _debug_line { my ( $options, $line ) = @_; $line->[2] =~ s/\n\z//g; - return "line $line->[1] : $line->[0] " . ( - $options->{show_lines} ? qq{: } . _show_whitespace( $line->[2] ) : q{} + return "line $line->[1]: $line->[0] " . ( + $options->{show_lines} ? qq{: } . _show_whitespace( $line->[2] ) : q{} ); } @@ -89,17 +88,17 @@ sub eol_unix_ok { my $file = shift; my $test_txt; $test_txt = shift if !ref $_[0]; - $test_txt ||= "No windows line endings in '$file'"; + $test_txt ||= "No incorrect line endings in '$file'"; my $options = shift if ref $_[0] eq 'HASH'; $options ||= { trailing_whitespace => 0, all_reasons => 0, }; $file = _module_to_path($file); - + open my $fh, $file or do { $Test->ok(0, $test_txt); $Test->diag("Could not open $file: $!"); return; }; # Windows-- , default is :crlf, which hides \r\n -_- - binmode( $fh, ':raw:utf8' ); + binmode( $fh, ':raw' ); my $line = 0; my @fails; while (<$fh>) { @@ -116,11 +115,11 @@ sub eol_unix_ok { # once there's an err. last if( @fails > 0 && !$options->{all_reasons} ); } - if( @fails ){ + if( @fails ){ $Test->ok( 0, $test_txt . " on " . _debug_line({ show_lines => 0 } , $fails[0] ) ); if ( $options->{all_reasons} || 1 ){ $Test->diag( " Problem Lines: "); - for ( @fails ){ + for ( @fails ){ $Test->diag(_debug_line({ show_lines => 1 } , $_ ) ); } } @@ -146,7 +145,7 @@ sub _is_perl_script { my $file = shift; return 1 if $file =~ /\.pl$/i; return 1 if $file =~ /\.t$/; - open my $fh, $file or return; + open (my $fh, $file) or return; my $first = <$fh>; return 1 if defined $first && ($first =~ $PERL_PATTERN); return; @@ -178,17 +177,12 @@ sub _untaint { } 1; -__END__ - -=head1 NAME - -Test::EOL - Check the correct line endings in your project =head1 SYNOPSIS -C lets you check the presence of windows line endings in your -perl code. It -report its results in standard C fashion: +C lets you check for the presence of trailing whitespace and/or +windows line endings in your perl code. It reports its results in standard +C fashion: use Test::EOL tests => 1; eol_unix_ok( 'lib/Module.pm', 'Module is ^M free'); @@ -229,9 +223,9 @@ modules, etc) for the presence of windows line endings. A list of functions that can be exported. You can delete this section if you don't export anything, such as for a purely object-oriented module. -=head1 FUNCTIONS +=func all_perl_files_ok -=head2 all_perl_files_ok( [ \%options ], [ @directories ] ) + all_perl_files_ok( [ \%options ], [ @directories ] ) Applies C to all perl files found in C<@directories> (and sub directories). If no <@directories> is given, the starting point is one level @@ -239,34 +233,39 @@ above the current running script, that should cover all the files of a typical CPAN distribution. A perl file is *.pl or *.pm or *.t or a file starting with C<#!...perl> -If the test plan is defined: +Valid C<\%options> currently are: - use Test::EOL tests => 3; - all_perl_files_ok(); +=over -the total number of files tested must be specified. +=item * trailing_whitespace -=head2 eol_unix_ok( $file [, $text] [, \%options ] ) +By default Test::EOL only looks for Windows (CR/LF) line-endings. Set this +to true to raise errors if any kind of trailing whitespace is present in +the file. -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. +=item * all_reasons + +Normally Test::EOL reports only the first error in every file (given that +a text file originated on Windows will fail every single line). Set this +a true value to register a test failure for every line with an error. -=head1 AUTHOR +=back -Tomas Doran (t0m) C<< >> +If the test plan is defined: -=head1 BUGS + use Test::EOL tests => 3; + all_perl_files_ok(); + +the total number of files tested must be specified. -Testing for EOL styles other than unix (\n) currently unsupported. +=func eol_unix_ok -The source code can be found on github, as listed in C< META.yml >, -patches are welcome. + eol_unix_ok ( $file [, $text] [, \%options ] ) -Otherwise please report any bugs or feature requests to -C, or through the web interface at -L. -I will be notified, and then you'll automatically be notified of progress on -your bug as I make changes. +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. C<$text> is the diagnostic label emited after +the C/C TAP output. C<\%options> takes the same values as described in +L. =head1 ACKNOWLEDGEMENTS @@ -277,12 +276,4 @@ Shamelessly ripped off from L. L, L. L, L, L, L. -=head1 COPYRIGHT & LICENSE - -Copyright 2009 Tomas Doran, some rights reserved. - -This program is free software; you can redistribute it and/or modify it -under the same terms as Perl itself. - =cut -