The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# sample.t -- a sample test file for Module::Build

use strict;
use lib 't/lib';
use MBTest;
use DistGen;

plan tests => 8; # or 'no_plan'

# Ensure any Module::Build modules are loaded from correct directory
blib_load('Module::Build');

# create dist object in a temp directory
# enter the directory and generate the skeleton files
my $dist = DistGen->new->chdir_in->regen;

$dist->add_file('t/subtest/foo.t', <<'END_T');
use strict;
use Test::More tests => 1;
ok(1, "this is a recursive test");
END_T

$dist->regen;

# get a Module::Build object and test with it
my $mb = $dist->new_from_context(); # quiet by default
isa_ok( $mb, "Module::Build" );
is( $mb->dist_name, "Simple", "dist_name is 'Simple'" );
ok( ! $mb->recursive_test_files, "set for no recursive testing" );

# set for recursive testing using PERL_MB_OPT
{
  local $ENV{PERL_MB_OPT} = "--verbose --recursive_test_files 1";

  my $out = stdout_stderr_of( sub {
      $dist->run_build('test');
  });
  like( $out, qr/this is a recursive test/,
    "recursive tests run via PERL_MB_OPT"
  );
}

# set Build.PL opts using PERL_MB_OPT
{
  local $ENV{PERL_MB_OPT} = "--verbose --recursive_test_files 1";
  my $mb = $dist->new_from_context(); # quiet by default
  ok( $mb->recursive_test_files, "PERL_MB_OPT set recusive tests in Build.PL" );
  ok( $mb->verbose, "PERL_MB_OPT set verbose in Build.PL" );
}

# verify settings preserved during 'Build test'
{
  ok( !$ENV{PERL_MB_OPT}, "PERL_MB_OPT cleared" );
  my $out = stdout_stderr_of( sub {
      $dist->run_build('test');
  });
  like( $out, qr/this is a recursive test/,
    "recursive tests run via Build object"
  );
}

# vim:ts=2:sw=2:et:sta:sts=2