#!perl -T

use strict;
use warnings;
use Test::Most tests => 3;

eval 'use autodie qw(:all)';	# Test for open/close failures

sub not_in_file_ok {
	my ($filename, %regex) = @_;
	open(my $fh, '<', $filename)
		or die "couldn't open $filename for reading: $!";

	my %violated;

	while (my $line = <$fh>) {
		while (my ($desc, $regex) = each %regex) {
			if ($line =~ $regex) {
				push @{$violated{$desc}||=[]}, $.;
			}
		}
	}
	close $fh;

	if (%violated) {
		fail("$filename contains boilerplate text");
		diag "$_ appears on lines @{$violated{$_}}" for keys %violated;
	} else {
		pass("$filename contains no boilerplate text");
	}
}

sub module_boilerplate_ok {
	my ($module) = @_;
	not_in_file_ok($module =>
		'the great new $MODULENAME' => qr/ - The great new /,
		'boilerplate description' => qr/Quick summary of what the module/,
		'stub function definition'	=> qr/function[12]/,
	);
}

TODO: {
	local $TODO = "Need to replace the boilerplate text";

	not_in_file_ok(README =>
		"The README is used..." => qr/The README is used/,
		"'version information here'" => qr/to provide version information/,
	);

	not_in_file_ok(Changes =>
		"placeholder date/time" => qr(Date/time)
	);

	module_boilerplate_ok('lib/Geo/Coder/CA.pm');
}

