The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- mode: perl; coding: utf-8; tab-width: 4 -*-

use strict;
use warnings;
use Test::More qw(no_plan);
# use Test::More tests => 3;

BEGIN {
	use_ok('Cv', -nomore);
}

our %cv;
our %CLASS;

use File::Basename;
use lib dirname($0);
require "hackcv.pm";

use IO::File;
my $xs = IO::File->new(dirname($0) . "/../Cv.xs");
my $xsfixed = IO::File->new(dirname($0) . "/../Cv.xs.fixed", "w");

my $fixed;
my ($module, $package) = ('', '');
my @hunk;
while (<$xs>) {
	push(@hunk, $_);
	if ($_ =~ /^$/) {
		print $xsfixed $_ for @hunk;
		@hunk = ();
	}
	s/\#.*//;
	if (/^MODULE\s*=\s*([^\s]+)\s+PACKAGE\s*=\s*([^\s]+)\s*/) {
		($module, $package) = ($1, $2);
	}
	next unless $module;
	if (/^(cv\w+)\(.*\)/) {
		my $name = $1;
		parse_decl($hunk[-2].$hunk[-1]);
		if ($CLASS{$name} && $CLASS{$name} ne $package) {
			$package = $CLASS{$name};
			@hunk = (
				# (map { "# $_" } grep /MODULE/, @hunk),
				"MODULE = $module\tPACKAGE = $package\n",
				(grep !/MODULE/, @hunk),
				);
			$fixed++;
		}
	}
}
print $xsfixed $_ for @hunk;

if ($fixed) {
	ok(0, "check PACKAGE stmt; see Cv.xs.fixed");
} else {
	unlink "Cv.xs.fixed";
	ok(1, "PACKAGE stmt");
}

exit 0;