The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;

BEGIN {
    unless ( $ENV{DOWNSTREAM_TESTS} ) {
        print "1..0 # Skip many perls have broken threads.  Enable with AUTHOR_TESTING.\n";
        exit 0;
    }
}

use Test::More;

ok(run_string(<<"EOT"), "Installed a fresh perlbrew") || exit 1;
perlbrew uninstall TestMore$$ 1>/dev/null 2>/dev/null || true
perlbrew install --thread --notest -j9 --as TestMore$$ perl-5.20.1
EOT

ok(run_string(<<"EOT"), "Installed Test::More") || exit 1;
perlbrew exec --with TestMore$$ cpan .
EOT

ok(run_string(<<"EOT"), "Installed cpanm") || exit 1;
perlbrew exec --with TestMore$$ cpan App::cpanminus
EOT

ok(run_string(<<"EOT"), "Installed downstream modules with no issues") || exit 1;
perlbrew exec --with TestMore$$ cpanm `cat xt/downstream_dists.list`
EOT


if (-e 'xt/downstream_dists.list.known_broken') {
    local $TODO = "These are known to be broken";
    ok(run_string(<<"    EOT"), "Known broken dists");
    perlbrew exec --with TestMore$$ cpanm `cat xt/downstream_dists.list.known_broken`
    EOT
}

ok(run_string(<<"EOT"), "Cleanup up the perlbrew");
perlbrew uninstall TestMore$$
EOT

sub run_string {
    my $exec = shift;
    local %ENV = %ENV;

    delete $ENV{$_} for (
        'DOWNSTREAM_TESTS',
        'HARNESS_ACTIVE',
        'HARNESS_IS_VERBOSE',
        'HARNESS_VERSION',
        'OLDPWD',
        'PERL5LIB',
        'TAP_VERSION',
        'TEST_VERBOSE',
    );

    return !system($exec);
}

done_testing;