#! perl -w
use strict;

# $Id$

my $findbin;
use File::Basename;
BEGIN { $findbin = dirname $0; }
use lib $findbin;
use TestLib;

use Test::More tests => 11;
BEGIN { 
    use_ok( 'Test::Smoke::Util', qw( get_regen_headers run_regen_headers ) );
}

my $ddir = File::Spec->catdir( $findbin, 'perl-current' );
-d $ddir or mkpath( $ddir, 0, 0755 ) or die "Cannot mkpath($ddir): $!";
END { -d $ddir and rmtree( $ddir ); }

{
    my $regen = get_regen_headers( $ddir );
    is( $regen, undef, "Found none" );
}

SKIP: { # Find 'regen_headers.pl'
    my $to_skip = 2;
    local *FILE;
    my $regen_headers_pl = File::Spec->catfile( $ddir, 'regen_headers.pl' );
    open( FILE, "> $regen_headers_pl" ) 
        or skip "Cannot create '$regen_headers_pl': $!", $to_skip;
    print FILE <<EO_REGEN;
#! $^X -w
print "This is '\Q$regen_headers_pl\E'"
EO_REGEN

    close FILE or skip "Cannot write '$regen_headers_pl': $!", $to_skip;

    my $regen = get_regen_headers( $ddir );

    is( $regen, qq[$^X "$regen_headers_pl"], "Found '$regen'" )
        or skip "Not found [$regen_headers_pl]", --$to_skip;

    local *REGENRUN;
    if ( ok open( REGENRUN, "$regen |" ), "Start pipe" ) {
        chomp( my $output = <REGENRUN> );
        close REGENRUN;
        is( $output, "This is '$regen_headers_pl'",
            "Run regen_headers manually" );
    } else {
        skip "Could not run regen_headers", $to_skip--;
    }
}

SKIP: { # Prefer 'regen_headers.pl' over 'regen.pl'
    my $to_skip = 2;
    local *FILE;
    my $regen_headers_pl = File::Spec->catfile( $ddir, 'regen_headers.pl' );
    my $regen_pl = File::Spec->catfile( $ddir, 'regen.pl' );
    open( FILE, "> $regen_pl" ) 
        or skip "Cannot create '$regen_pl': $!", $to_skip;
    print FILE <<EO_REGEN;
#! $^X -w
print "This is '\Q$regen_pl\E'"
EO_REGEN

    close FILE or skip "Cannot write '$regen_pl': $!", $to_skip--;

    my $regen = get_regen_headers( $ddir );

    is( $regen, qq[$^X "$regen_headers_pl"], "Found '$regen'" )
        or skip "Not found [$regen_headers_pl]", $to_skip--;

    local *REGENRUN;
    if ( ok open( REGENRUN, "$regen |" ), "Start pipe" ) {
        chomp( my $output = <REGENRUN> );
        close REGENRUN;
        is( $output, "This is '$regen_headers_pl'",
            "Run regen_headers manually" );
    } else {
        skip "Could not run regen_headers", $to_skip--;
    }
}

SKIP: { # as of 18852: 'regen_headers.pl' is now 'regen.pl'
    my $to_skip = 2;
    my $regen_headers_pl = File::Spec->catfile( $ddir, 'regen_headers.pl' );
    my $regen_pl = File::Spec->catfile( $ddir, 'regen.pl' );

    unlink $regen_headers_pl 
        or skip "Cannot unlink($regen_headers_pl): $!", $to_skip--;

    my $regen = get_regen_headers( $ddir );

    is( $regen, qq[$^X "$regen_pl"], "Found '$regen'" )
        or skip "Not found [$regen_pl]", $to_skip--;

    local *REGENRUN;
    if ( ok open( REGENRUN, "$regen |" ), "Start pipe" ) {
        chomp( my $output = <REGENRUN> );
        close REGENRUN;
        is( $output, "This is '$regen_pl'",
            "Run regen_headers manually" );
    } else {
        skip "Could not run regen_headers", $to_skip--;
    }
}