1#!perl 2 3use strict; 4use warnings; 5use Test::More tests => 3; 6 7sub not_in_file_ok { 8 my ($filename, %regex) = @_; 9 open( my $fh, '<', $filename ) 10 or die "couldn't open $filename for reading: $!"; 11 12 my %violated; 13 14 while (my $line = <$fh>) { 15 while (my ($desc, $regex) = each %regex) { 16 if ($line =~ $regex) { 17 push @{$violated{$desc}||=[]}, $.; 18 } 19 } 20 } 21 22 if (%violated) { 23 fail("$filename contains boilerplate text"); 24 diag "$_ appears on lines @{$violated{$_}}" for keys %violated; 25 } else { 26 pass("$filename contains no boilerplate text"); 27 } 28} 29 30sub module_boilerplate_ok { 31 my ($module) = @_; 32 not_in_file_ok($module => 33 'the great new $MODULENAME' => qr/ - The great new /, 34 'boilerplate description' => qr/Quick summary of what the module/, 35 'stub function definition' => qr/function[12]/, 36 ); 37} 38 39TODO: { 40 local $TODO = "Need to replace the boilerplate text"; 41 42 not_in_file_ok(README => 43 "The README is used..." => qr/The README is used/, 44 "'version information here'" => qr/to provide version information/, 45 ); 46 47 not_in_file_ok(Changes => 48 "placeholder date/time" => qr(Date/time) 49 ); 50 51 module_boilerplate_ok('lib/Foo/Bar.pm'); 52 53 54} 55 56