The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test2::Bundle::Extended;
use Test::Script;
use File::Temp qw( tempdir );

# the first subtest replaces t/04_runs_good.t

subtest 'good' => sub {

  my $rv;
  
  is(
    intercept { $rv = script_runs 't/bin/good.pl' },
    array {
      event Ok => sub {
        call pass => T();
        call name => 'Script t/bin/good.pl runs';
      };
      end;
    },
    'script_runs t/bin/good.pl',
  );
  
  is $rv, T(), 'script_compiles_ok returns true as convenience';

  is(
    intercept { $rv = script_runs 't/bin/good.pl', 'It worked' },
    array {
      event Ok => sub {
        call pass => T();
        call name => 'It worked';
      };
      end;
    },
    'script_runs t/bin/good.pl It worked',
  );
  
  is $rv, T(), 'script_compiles_ok returns true as convenience';
  
  
};

subtest 'good' => sub {

  my $rv;
  
  is(
    intercept { $rv = script_runs 't/bin/four.pl' },
    array {
      event Ok => sub {
        call pass => F();
        call name => 'Script t/bin/four.pl runs';
      };
      event Diag => sub {};
      event Diag => sub {};
      event Diag => sub {
        call message => match qr{4 - (?:Using.*\n# )?Standard Error\n};
      };
      end;
    },
    'script_runs t/bin/good.pl',
  );
  
  is $rv, F(), 'script_compiles_ok returns false as convenience';

  is(
    intercept { $rv = script_runs 't/bin/four.pl', 'It worked' },
    array {
      event Ok => sub {
        call pass => F();
        call name => 'It worked';
      };
      event Diag => sub {};
      event Diag => sub {};
      event Diag => sub {
        call message => match qr{4 - (?:Using.*\n# )?Standard Error\n};
      };
      end;
    },
    'script_runs t/bin/good.pl It worked',
  );
  
  is $rv, F(), 'script_compiles_ok returns false as convenience';
  
  
};

subtest 'unreasonable number of libs' => sub {

  skip_all 'developer only test' unless $ENV{TEST_SCRIPT_DEV_TEST};

  local @INC = @INC;
  my $dir = tempdir( CLEANUP => 1 );
  for(map { File::Spec->catfile($dir, $_) } 1..1000000)
  {
    #mkdir;
    push @INC, $_;
  }
  
  script_runs 't/bin/good.pl';

};

done_testing;