The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w
use strict;
use Test::More qw(no_plan);

# by Eric Wilhelm in response to Randal Schwartz pointing out that
# CPAN.pm chokes on the VERSION >... construct
# I dare not mention it here.

use ExtUtils::MakeMaker;
use_ok('Jifty::Everything');

# XXX there may be a more cross-platform and harness-friendly way to say
# this.  Tricky bit is that the harness absolutifies the lib paths or
# plans to chdir() somewhere.

# just look for Jifty.pm
my $dir = $INC{'Jifty.pm'};
$dir =~ s/Jifty\.pm$//;
$dir = quotemeta $dir;  # as MSWin32 has backslashes in the path
my @files = grep({$_ and $_ =~ m/^$dir/} map({$INC{$_}} grep(/^Jifty\//, keys(%INC))));
ok(scalar(@files));

foreach my $file (@files) {
    # Gah! parse_version complains on stderr!
    my ($e, @a) = error_catch(sub {MM->parse_version($file)});
    ok(($e || '') eq '', $file) or warn "$e ";
}

# runs subroutine reference, looking for error message $look in STDERR
# and runs tests based on $name
#   ($errs, @ans) = error_catch(sub {$this->test()});
#
sub error_catch {
    my ($sub) = @_;
    my $TO_ERR;
    open($TO_ERR, '<&STDERR');
    close(STDERR);
    my $catch;
    open(STDERR, '>', \$catch);
    my @ans = $sub->();
    open(STDERR, ">&", $TO_ERR);
    close($TO_ERR);
    return($catch, @ans);
} # end subroutine error_catch definition
########################################################################