summaryrefslogtreecommitdiff
path: root/cpan/Module-Build/t
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/Module-Build/t')
-rw-r--r--cpan/Module-Build/t/PL_files.t2
-rw-r--r--cpan/Module-Build/t/README.pod94
-rw-r--r--cpan/Module-Build/t/actions/installdeps.t48
-rw-r--r--cpan/Module-Build/t/add_property.t5
-rw-r--r--cpan/Module-Build/t/basic.t14
-rw-r--r--cpan/Module-Build/t/bundle_inc.t194
-rw-r--r--cpan/Module-Build/t/compat.t94
-rwxr-xr-x[-rw-r--r--]cpan/Module-Build/t/compat/exit.t11
-rw-r--r--cpan/Module-Build/t/debug.t10
-rw-r--r--cpan/Module-Build/t/destinations.t10
-rw-r--r--cpan/Module-Build/t/ext.t10
-rw-r--r--cpan/Module-Build/t/extend.t26
-rw-r--r--cpan/Module-Build/t/files.t7
-rw-r--r--cpan/Module-Build/t/help.t27
-rw-r--r--cpan/Module-Build/t/install.t13
-rw-r--r--cpan/Module-Build/t/install_extra_target.t30
-rw-r--r--cpan/Module-Build/t/lib/DistGen.pm235
-rw-r--r--cpan/Module-Build/t/lib/MBTest.pm73
-rw-r--r--cpan/Module-Build/t/manifypods.t16
-rw-r--r--cpan/Module-Build/t/mbyaml.t262
-rw-r--r--cpan/Module-Build/t/metadata.t20
-rw-r--r--cpan/Module-Build/t/metadata2.t28
-rw-r--r--cpan/Module-Build/t/moduleinfo.t192
-rw-r--r--cpan/Module-Build/t/mymeta.t30
-rw-r--r--cpan/Module-Build/t/new_from_context.t8
-rw-r--r--cpan/Module-Build/t/notes.t8
-rw-r--r--cpan/Module-Build/t/parents.t5
-rw-r--r--cpan/Module-Build/t/perl_mb_opt.t62
-rw-r--r--cpan/Module-Build/t/pod_parser.t28
-rw-r--r--cpan/Module-Build/t/ppm.t18
-rw-r--r--cpan/Module-Build/t/properties/module_name.t53
-rw-r--r--cpan/Module-Build/t/properties/needs_compiler.t122
-rw-r--r--cpan/Module-Build/t/properties/share_dir.t228
-rw-r--r--cpan/Module-Build/t/resume.t43
-rw-r--r--cpan/Module-Build/t/runthrough.t21
-rw-r--r--cpan/Module-Build/t/sample.t20
-rw-r--r--cpan/Module-Build/t/script_dist.t8
-rw-r--r--cpan/Module-Build/t/test_file_exts.t8
-rw-r--r--cpan/Module-Build/t/test_type.t7
-rw-r--r--cpan/Module-Build/t/test_types.t16
-rw-r--r--cpan/Module-Build/t/tilde.t8
-rw-r--r--cpan/Module-Build/t/use_tap_harness.t51
-rw-r--r--cpan/Module-Build/t/versions.t9
-rw-r--r--cpan/Module-Build/t/write_default_maniskip.t4
-rw-r--r--cpan/Module-Build/t/xs.t55
45 files changed, 1450 insertions, 783 deletions
diff --git a/cpan/Module-Build/t/PL_files.t b/cpan/Module-Build/t/PL_files.t
index a22171458c..68614c80e4 100644
--- a/cpan/Module-Build/t/PL_files.t
+++ b/cpan/Module-Build/t/PL_files.t
@@ -4,7 +4,7 @@ use strict;
use lib 't/lib';
use MBTest tests => 8;
use DistGen;
-use Module::Build;
+blib_load('Module::Build');
my $dist;
diff --git a/cpan/Module-Build/t/README.pod b/cpan/Module-Build/t/README.pod
new file mode 100644
index 0000000000..b2d0579d3e
--- /dev/null
+++ b/cpan/Module-Build/t/README.pod
@@ -0,0 +1,94 @@
+=head1 A GUIDE TO WRITING TESTS FOR MODULE::BUILD
+
+This document provides tips on writing new tests for Module::Build. Please
+note that many existing tests were written prior to these guidelines and
+have many different styles. Please don't copy/paste old tests by rote without
+considering better ways to test. See C<sample.t> for a starter test file.
+
+=head1 TEST FILE PREAMBLE
+
+Every Module::Build test should begin with the same preamble to ensure that the
+test library is set properly and that the correct version of Module::Build is
+being tested.
+
+ use strict;
+ use lib 't/lib';
+ use MBTest tests => 2; # or 'no_plan'
+
+ blib_load('Module::Build');
+
+The C<MBTest> module is in C<t/lib/> and subclasses Test::More. When loaded
+it cleans up several environment variables that could cause problems,
+tweaks C<@INC> and exports several helper functions. See that module for
+details.
+
+=head1 CREATING A TEST DISTRIBUTION
+
+The C<DistGen> module in C<t/lib/> should be used to create sample
+distributions for testing. It provides numerous helpful methods to
+create a skeleton distribution, add files, change files, and so on.
+Run C<perldoc> on C<t/lib/DistGen.pm> to see the documentation.
+
+ # CREATE A TEST DISTRIBUTION
+
+ use DistGen;
+
+ # create dist object in a temp directory
+ my $dist = DistGen->new;
+
+ # enter the test distribution directory before further testing
+ $dist->chdir_in;
+
+ # generate the skeleton files
+ $dist->regen;
+
+
+=head1 GETTING A MODULE::BUILD OBJECT
+
+From inside the test distribution, you can get the Module::Build object
+configured in Build.PL using the C<new_from_context> method on the
+dist object. This is just like Module::Build's C<new_from_context> except
+it passes C<< quiet => 1 >> to avoid sending output to the terminal.
+Use the Module::Build object to test the programmatic API.
+
+ my $mb = $dist->new_from_context( quiet => 1 );
+ isa_ok( $mb, "Module::Build" );
+ is( $mb->dist_name, "Simple", "dist_name is 'Simple'" );
+
+=head1 TESTING THE COMMAND LINE API
+
+The command line API is tested by running subprocesses, not via a Module::Build
+object. The C<DistGen> object has helper methods for running C<Build.PL> and
+C<Build> and passing arguments on the command line.
+
+ $dist->run_build_pl( '--quiet' );
+ $dist->run_build( 'test' );
+
+=head1 TYPICAL TESTING CYCLE
+
+The typical testing cycle is to generate or modify a test distribution, either
+through the C<DistGen> object or directly in the filesystem, then regenerate
+the distribution and test it (or run command line tests and observe the
+result.)
+
+ # Modify the distribution
+
+ $dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'artistic',
+ }
+ );
+ $dist->regen;
+
+ # Get a new build object and test it
+
+ $mb = $dist->new_from_context;
+ is( $mb->license, "artistic", "saw 'artistic' license" );
+
+
+=head1 COPYRIGHT
+
+This documentation is Copyright (C) 2009 by David Golden. You can redistribute
+it and/or modify it under the same terms as Perl 5.10.0.
+
diff --git a/cpan/Module-Build/t/actions/installdeps.t b/cpan/Module-Build/t/actions/installdeps.t
new file mode 100644
index 0000000000..95e221d0ad
--- /dev/null
+++ b/cpan/Module-Build/t/actions/installdeps.t
@@ -0,0 +1,48 @@
+use strict;
+use lib 't/lib';
+use MBTest;
+use DistGen;
+
+plan tests => 7;
+
+# 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;
+
+$dist->change_build_pl(
+ module_name => $dist->name,
+ requires => {
+ 'File::Spec' => 9999,
+ },
+ build_requires => {
+ 'Getopt::Long' => 9998,
+ },
+ cpan_client => $^X . ' -le print($_)for($^X,@ARGV)',
+)->regen;
+
+# get a Module::Build object and test with it
+my $mb;
+stdout_stderr_of( sub { $mb = $dist->new_from_context('verbose' => 1) } );
+isa_ok( $mb, "Module::Build" );
+like( $mb->cpan_client, qr/^\Q$^X\E/, "cpan_client is mocked with perl" );
+
+my $out = stdout_of( sub {
+ $dist->run_build('installdeps')
+});
+ok( length($out), "ran mocked Build installdeps");
+my $expected = quotemeta(Module::Build->find_command($^X));
+like( $out, qr/$expected/i, "relative cpan_client resolved relative to \$^X" );
+like( $out, qr/File::Spec/, "saw File::Spec prereq" );
+like( $out, qr/Getopt::Long/, "saw Getopt::Long prereq" );
+
+$out = stdout_stderr_of( sub {
+ $dist->run_build('installdeps', '--cpan_client', 'ADLKASJDFLASDJ')
+});
+like( $out, qr/cpan_client .* is not executable/,
+ "Build installdeps with bad cpan_client dies"
+);
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/add_property.t b/cpan/Module-Build/t/add_property.t
index 6032b0929d..e0b25ae00f 100644
--- a/cpan/Module-Build/t/add_property.t
+++ b/cpan/Module-Build/t/add_property.t
@@ -2,12 +2,11 @@
use strict;
use lib 't/lib';
-use MBTest tests => 29;
+use MBTest tests => 27;
#use MBTest 'no_plan';
use DistGen;
-BEGIN { use_ok 'Module::Build' or die; }
-ensure_blib 'Module::Build';
+blib_load 'Module::Build';
my $tmp = MBTest->tmpdir;
my $dist = DistGen->new( dir => $tmp );
diff --git a/cpan/Module-Build/t/basic.t b/cpan/Module-Build/t/basic.t
index f46be0a4c9..74c50b6178 100644
--- a/cpan/Module-Build/t/basic.t
+++ b/cpan/Module-Build/t/basic.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 60;
+use MBTest tests => 58;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -28,7 +27,7 @@ $dist->chdir_in;
$mb = Module::Build->new( dist_name => $dist->name, dist_version => 7 );
ok $mb;
- ok ! $mb->module_name; # Make sure it's defined
+ ok $mb->module_name; # Set via heuristics
is $mb->dist_name, $dist->name;
}
@@ -163,10 +162,7 @@ $dist->chdir_in;
is $args{foo}, 1;
# revert test distribution to pristine state because we modified a file
- $dist->remove;
- $dist = DistGen->new( dir => $tmp );
- $dist->regen;
- $dist->chdir_in;
+ $dist->regen( clean => 1 );
}
# Test author stuff
@@ -236,5 +232,3 @@ $dist->chdir_in;
is_deeply $mb->include_dirs, ['/foo'], 'Should have single include dir';
}
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/bundle_inc.t b/cpan/Module-Build/t/bundle_inc.t
new file mode 100644
index 0000000000..edb1aa94cd
--- /dev/null
+++ b/cpan/Module-Build/t/bundle_inc.t
@@ -0,0 +1,194 @@
+# sample.t -- a sample test file for Module::Build
+
+use strict;
+use lib 't/lib';
+use MBTest; # or 'no_plan'
+use DistGen;
+use Config;
+use IO::File;
+use File::Spec;
+use ExtUtils::Packlist;
+use File::Path;
+
+# Ensure any Module::Build modules are loaded from correct directory
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
+
+if ( Module::Build::ConfigData->feature('inc_bundling_support') ) {
+ plan tests => 18;
+} else {
+ plan skip_all => 'inc_bundling_support feature is not enabled';
+}
+
+# need to do a temp install of M::B being tested to ensure a packlist
+# is available for bundling
+
+my $current_mb = Module::Build->resume();
+my $temp_install = MBTest->tmpdir();
+my $arch = $Config{archname};
+my $lib_path = File::Spec->catdir($temp_install,qw/lib perl5/);
+my $arch_path = File::Spec->catdir( $lib_path, $arch );
+mkpath ( $arch_path );
+ok( -d $arch_path, "created temporary M::B pseudo-install directory");
+
+unshift @INC, $lib_path, $arch_path;
+local $ENV{PERL5LIB} = join( $Config{path_sep},
+ $lib_path, $arch_path, ($ENV{PERL5LIB} ? $ENV{PERL5LIB} : () )
+);
+
+stdout_of( sub { $current_mb->dispatch('install', install_base => $temp_install) } );
+
+# create dist object in a temp directory
+# enter the directory and generate the skeleton files
+my $dist = DistGen->new( inc => 1 )->chdir_in->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'" );
+is_deeply( $mb->bundle_inc, [ 'Module::Build' ],
+ "Module::Build is flagged for bundling"
+);
+
+# see what gets bundled
+stdout_stderr_of( sub { $mb->dispatch('distdir') } );
+
+my $dist_inc = File::Spec->catdir($mb->dist_dir, 'inc');
+ok( -e File::Spec->catfile( $dist_inc, 'latest.pm' ),
+ "./inc/latest.pm created"
+);
+
+ok( -d File::Spec->catdir( $dist_inc, 'inc_Module-Build' ),
+ "dist_dir/inc/inc_Module_Build created"
+);
+
+my $mb_file =
+ File::Spec->catfile( $dist_inc, qw/inc_Module-Build Module Build.pm/ );
+
+ok( -e $mb_file,
+ "dist_dir/inc/inc_Module_Build/Module/Build.pm created"
+);
+
+ok( -e File::Spec->catfile( $dist_inc, qw/inc_Module-Build Module Build Base.pm/ ),
+ "dist_dir/inc/inc_Module_Build/Module/Build/Base.pm created"
+);
+
+# Force bundled M::B to a higher version so it gets loaded
+
+my $fh = IO::File->new($mb_file, "+<") or die "Could not open $mb_file: $!";
+my $mb_code = do { local $/; <$fh> };
+$mb_code =~ s{\$VERSION\s+=\s+\S+}{\$VERSION = 9999;};
+$fh->seek(0,0);
+print {$fh} $mb_code;
+$fh->close;
+
+# test the bundling in dist_dir
+chdir $mb->dist_dir;
+
+stdout_of( sub { Module::Build->run_perl_script('Build.PL',[],[]) } );
+
+my $meta = IO::File->new('MYMETA.yml');
+ok( $meta, "found MYMETA.yml" );
+ok( scalar( grep { /generated_by:.*9999/ } <$meta> ),
+ "dist_dir Build.PL loaded bundled Module::Build"
+);
+
+#--------------------------------------------------------------------------#
+# test identification of dependencies
+#--------------------------------------------------------------------------#
+
+$dist->chdir_in;
+
+$dist->add_file( 'mylib/Foo.pm', << 'HERE' );
+package Foo;
+our $VERSION = 1;
+1;
+HERE
+
+$dist->add_file( 'mylib/Bar.pm', << 'HERE' );
+package Bar;
+use Foo;
+our $VERSION = 42;
+1;
+HERE
+
+$dist->change_file( 'Build.PL', << "HERE" );
+use inc::latest 'Module::Build';
+use inc::latest 'Foo';
+
+Module::Build->new(
+ module_name => '$dist->{name}',
+ license => 'perl',
+)->create_build_script;
+HERE
+
+$dist->regen( clean => 1 );
+
+make_packlist($_,'mylib') for qw/Foo Bar/;
+
+# get a Module::Build object and test with it
+my $abs_mylib = File::Spec->rel2abs('mylib');
+
+
+unshift @INC, $abs_mylib;
+$mb = $dist->new_from_context(); # quiet by default
+isa_ok( $mb, "Module::Build" );
+is_deeply( [sort @{$mb->bundle_inc}], [ 'Foo', 'Module::Build' ],
+ "Module::Build and Foo are flagged for bundling"
+);
+
+my $output = stdout_stderr_of( sub { $mb->dispatch('distdir') } );
+
+ok( -e File::Spec->catfile( $dist_inc, 'latest.pm' ),
+ "./inc/latest.pm created"
+);
+
+ok( -d File::Spec->catdir( $dist_inc, 'inc_Foo' ),
+ "dist_dir/inc/inc_Foo created"
+);
+
+$dist->change_file( 'Build.PL', << "HERE" );
+use inc::latest 'Module::Build';
+use inc::latest 'Bar';
+
+Module::Build->new(
+ module_name => '$dist->{name}',
+ license => 'perl',
+)->create_build_script;
+HERE
+
+$dist->regen( clean => 1 );
+make_packlist($_,'mylib') for qw/Foo Bar/;
+
+$mb = $dist->new_from_context(); # quiet by default
+isa_ok( $mb, "Module::Build" );
+is_deeply( [sort @{$mb->bundle_inc}], [ 'Bar', 'Module::Build' ],
+ "Module::Build and Bar are flagged for bundling"
+);
+
+$output = stdout_stderr_of( sub { $mb->dispatch('distdir') } );
+
+ok( -e File::Spec->catfile( $dist_inc, 'latest.pm' ),
+ "./inc/latest.pm created"
+);
+
+ok( -d File::Spec->catdir( $dist_inc, 'inc_Bar' ),
+ "dist_dir/inc/inc_Bar created"
+);
+
+
+
+sub make_packlist {
+ my ($mod, $lib) = @_;
+ my $arch = $Config{archname};
+ (my $mod_path = $mod) =~ s{::}{/}g;
+ my $mod_file = File::Spec->catfile( $lib, "$mod_path\.pm" );
+ my $abs = File::Spec->rel2abs($mod_file);
+ my $packlist_path = File::Spec->catdir($lib, $arch, 'auto', $mod_path);
+ mkpath $packlist_path;
+ my $packlist = ExtUtils::Packlist->new;
+ $packlist->{$abs}++;
+ $packlist->write( File::Spec->catfile( $packlist_path, '.packlist' ));
+}
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/compat.t b/cpan/Module-Build/t/compat.t
index 88e5953408..f84b79b744 100644
--- a/cpan/Module-Build/t/compat.t
+++ b/cpan/Module-Build/t/compat.t
@@ -25,8 +25,8 @@ if ( $Config{make} && $^O ne 'VMS' ? find_in_path($Config{make}) : 1 ) {
my $is_vms_mms = ($^O eq 'VMS') && ($Config{make} =~ /MM[SK]/i);
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
+blib_load('Module::Build::Version');
#########################
@@ -43,8 +43,8 @@ $dist->chdir_in;
#########################
-use Module::Build;
-use Module::Build::Compat;
+blib_load('Module::Build');
+blib_load('Module::Build::Compat');
use Carp; $SIG{__WARN__} = \&Carp::cluck;
@@ -72,10 +72,11 @@ $dist->change_build_pl({
license => 'perl',
requires => {
'perl' => $],
- 'File::Spec' => 0,
+ 'File::Spec' => 0.2,
},
- build_requires => {
- 'Test::More' => 0,
+ build_requires => {
+ 'Test::More' => 0,
+ 'File::Spec' => 0,
},
PL_files => { 'foo.PL' => 'foo' },
});
@@ -90,8 +91,11 @@ $dist->regen;
test_makefile_types(
requires => {
'perl' => $],
- 'File::Spec' => 0,
+ 'File::Spec' => 0.2,
+ },
+ build_requires => {
'Test::More' => 0,
+ 'File::Spec' => 0,
},
PL_files => {
'foo.PL' => 'foo',
@@ -108,7 +112,7 @@ $dist->regen;
# Create M::B instance but don't pollute STDOUT
my $mb;
-stdout_of( sub {
+stdout_stderr_of( sub {
$mb = Module::Build->new_from_context;
});
ok $mb, "Module::Build->new_from_context";
@@ -131,7 +135,7 @@ ok $mb, "Module::Build->new_from_context";
# Makefile.PL - make sure it fails in the right way here.
local @Foo::Builder::ISA = qw(Module::Build);
my $foo_builder;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$foo_builder = Foo::Builder->new_from_context;
});
foreach my $style ('passthrough', 'small') {
@@ -148,13 +152,13 @@ ok $mb, "Module::Build->new_from_context";
# Now make sure it can actually work.
my $bar_builder;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$bar_builder = Module::Build->subclass( class => 'Bar::Builder' )->new_from_context;
});
foreach my $style ('passthrough', 'small') {
create_makefile_pl($style, $bar_builder);
my $result;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$result = $mb->run_perl_script('Makefile.PL');
});
ok $result, "Makefile.PL ran without error";
@@ -167,7 +171,7 @@ ok $mb, "Module::Build->new_from_context";
my $libdir = File::Spec->catdir( $tmp, 'libdir' );
my $result;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$result = $mb->run_perl_script('Makefile.PL', [],
[
"LIB=$libdir",
@@ -188,7 +192,7 @@ ok $mb, "Module::Build->new_from_context";
# Make sure those switches actually had an effect
my ($ran_ok, $output);
- $output = stdout_of( sub { $ran_ok = $new_build->do_system(@make, 'test') } );
+ $output = stdout_stderr_of( sub { $ran_ok = $new_build->do_system(@make, 'test') } );
ok $ran_ok, "make test ran without error";
$output =~ s/^/# /gm; # Don't confuse our own test output
like $output, qr/(?:# ok \d+\s+)+/, 'Should be verbose';
@@ -201,7 +205,7 @@ ok $mb, "Module::Build->new_from_context";
$make_macro = '/macro=("' . $make_macro . '")';
}
- $output = stdout_of( sub {
+ $output = stdout_stderr_of( sub {
local $ENV{HARNESS_TIMER}; # RT#39635 - timer messes with output
$ran_ok = $mb->do_system(@make, 'test', $make_macro)
} );
@@ -258,7 +262,7 @@ ok $mb, "Module::Build->new_from_context";
}
}
- stdout_of( sub { $mb->do_system(@make, 'realclean'); } );
+ stdout_stderr_of( sub { $mb->do_system(@make, 'realclean'); } );
ok ! -e $makefile, "$makefile shouldn't exist";
1 while unlink 'Makefile.PL';
@@ -274,14 +278,14 @@ ok $mb, "Module::Build->new_from_context";
create_makefile_pl('passthrough', $mb);
- stdout_of( sub {
+ stdout_stderr_of( sub {
$mb->run_perl_script('Makefile.PL', [], ['INSTALL_BASE=~/foo']);
});
my $b2 = Module::Build->current;
ok $b2->install_base, "install_base set";
unlike $b2->install_base, qr/^~/, "Tildes should be expanded";
- stdout_of( sub { $mb->do_system(@make, 'realclean'); } );
+ stdout_stderr_of( sub { $mb->do_system(@make, 'realclean'); } );
ok ! -e $makefile, "$makefile shouldn't exist";
1 while unlink 'Makefile.PL';
@@ -293,34 +297,53 @@ ok $mb, "Module::Build->new_from_context";
$dist->regen;
my $mb;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$mb = Module::Build->new_from_context( recursive_test_files => 1 );
});
create_makefile_pl('traditional', $mb);
my $args = extract_writemakefile_args() || {};
- is $args->{TESTS},
- join( q{ },
- File::Spec->catfile(qw(t *.t)),
- File::Spec->catfile(qw(t deep *.t))
- ),
- 'Makefile.PL has correct TESTS line for recursive test files';
-}
-# cleanup
-$dist->remove;
+ if ( exists $args->{test}->{TESTS} ) {
+ is $args->{test}->{TESTS},
+ join( q{ },
+ File::Spec->catfile(qw(t *.t)),
+ File::Spec->catfile(qw(t deep *.t))
+ ),
+ 'Makefile.PL has correct TESTS line for recursive test files';
+ } else {
+ ok( ! exists $args->{TESTS}, 'Not using incorrect recursive tests key' );
+ }
+
+}
#########################################################
+sub _merge_prereqs {
+ my ($first, $second) = @_;
+ my $new = { %$first };
+ for my $k (keys %$second) {
+ if ( exists $new->{$k} ) {
+ my ($v1,$v2) = ($new->{$k},$second->{$k});
+ $new->{$k} = ($v1 > $v2 ? $v1 : $v2);
+ }
+ else {
+ $new->{$k} = $second->{$k};
+ }
+ }
+ return $new;
+}
+
sub test_makefile_types {
my %opts = @_;
$opts{requires} ||= {};
+ $opts{build_requires} ||= {};
$opts{PL_files} ||= {};
foreach my $type (@makefile_types) {
# Create M::B instance
my $mb;
- stdout_of( sub {
+ stdout_stderr_of( sub {
$mb = Module::Build->new_from_context;
});
ok $mb, "Module::Build->new_from_context";
@@ -330,12 +353,12 @@ sub test_makefile_types {
test_makefile_pl_requires_perl( $opts{requires}{perl} );
test_makefile_creation($mb);
- test_makefile_prereq_pm( $opts{requires} );
+ test_makefile_prereq_pm( _merge_prereqs($opts{requires}, $opts{build_requires}) );
test_makefile_pl_files( $opts{PL_files} ) if $type eq 'traditional';
my ($output,$success);
# Capture output to keep our STDOUT clean
- $output = stdout_of( sub {
+ $output = stdout_stderr_of( sub {
$success = $mb->do_system(@make);
});
ok $success, "make ran without error";
@@ -345,13 +368,13 @@ sub test_makefile_types {
}
# Can't let 'test' STDOUT go to our STDOUT, or it'll confuse Test::Harness.
- $output = stdout_of( sub {
+ $output = stdout_stderr_of( sub {
$success = $mb->do_system(@make, 'test');
});
ok $success, "make test ran without error";
like uc $output, qr{DONE\.|SUCCESS}, "make test output indicated success";
- $output = stdout_of( sub {
+ $output = stdout_stderr_of( sub {
$success = $mb->do_system(@make, 'realclean');
});
ok $success, "make realclean ran without error";
@@ -372,7 +395,7 @@ sub test_makefile_creation {
my ($output, $result);
# capture output to avoid polluting our test output
- $output = stdout_of( sub {
+ $output = stdout_stderr_of( sub {
$result = $build->run_perl_script('Makefile.PL', $preargs, $postargs);
});
my $label = "Makefile.PL ran without error";
@@ -472,7 +495,8 @@ sub extract_writemakefile_args {
}
sub create_makefile_pl {
- Module::Build::Compat->create_makefile_pl(@_);
+ my @args = @_;
+ stdout_stderr_of( sub { Module::Build::Compat->create_makefile_pl(@args) } );
my $ok = ok -e 'Makefile.PL', "$_[0] Makefile.PL created";
# Some really conservative make's, like HP/UX, assume files with the same
diff --git a/cpan/Module-Build/t/compat/exit.t b/cpan/Module-Build/t/compat/exit.t
index 78269a97a3..3672c938c3 100644..100755
--- a/cpan/Module-Build/t/compat/exit.t
+++ b/cpan/Module-Build/t/compat/exit.t
@@ -3,10 +3,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 5;
+use MBTest tests => 3;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
#########################
@@ -24,11 +23,13 @@ $dist->chdir_in;
my $mb; stdout_of(sub{ $mb = Module::Build->new_from_context});
-use Module::Build::Compat;
+blib_load('Module::Build::Compat');
$dist->regen;
-Module::Build::Compat->create_makefile_pl('passthrough', $mb);
+stdout_stderr_of(
+ sub{ Module::Build::Compat->create_makefile_pl('passthrough', $mb); }
+);
# as silly as all of this exit(0) business is, that is what the cpan
# testers have instructed everybody to do so...
diff --git a/cpan/Module-Build/t/debug.t b/cpan/Module-Build/t/debug.t
index c9b4fa581c..e0b8f60817 100644
--- a/cpan/Module-Build/t/debug.t
+++ b/cpan/Module-Build/t/debug.t
@@ -2,18 +2,15 @@
use strict;
use lib 't/lib';
-use MBTest tests => 3;
+use MBTest tests => 1;
-require_ok('Module::Build');
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
use DistGen;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-END{ $dist->remove }
-
$dist->chdir_in;
#########################
@@ -28,6 +25,3 @@ $dist->chdir_in;
);
}
-#########################
-
-# cleanup
diff --git a/cpan/Module-Build/t/destinations.t b/cpan/Module-Build/t/destinations.t
index 4af99d0031..07247a32ba 100644
--- a/cpan/Module-Build/t/destinations.t
+++ b/cpan/Module-Build/t/destinations.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 115;
+use MBTest tests => 113;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -248,7 +247,8 @@ $mb->prefix(undef);
}
# Poke at the innards of MB to change the default install locations.
- my $old = $mb->install_sets->{site} = \%test_config;
+ my $old = $mb->install_sets->{site};
+ $mb->install_sets->{site} = \%test_config;
$mb->config(siteprefixexp => catdir(File::Spec->rootdir,
'wierd', 'prefix'));
@@ -321,5 +321,3 @@ sub test_install_destinations {
}
}
-
-$dist->remove;
diff --git a/cpan/Module-Build/t/ext.t b/cpan/Module-Build/t/ext.t
index 8045761c2a..6101bccd16 100644
--- a/cpan/Module-Build/t/ext.t
+++ b/cpan/Module-Build/t/ext.t
@@ -4,8 +4,6 @@ use strict;
use lib 't/lib';
use MBTest;
-use Module::Build;
-
my @unix_splits =
(
{ q{one t'wo th'ree f"o\"ur " "five" } => [ 'one', 'two three', 'fo"ur ', 'five' ] },
@@ -58,9 +56,11 @@ my @win_splits =
{ 'a " b " c' => [ 'a', ' b ', 'c' ] },
);
-plan tests => 10 + 4*@unix_splits + 4*@win_splits;
+plan tests => 9 + 4*@unix_splits + 4*@win_splits;
-ensure_blib('Module::Build');
+blib_load('Module::Build');
+blib_load('Module::Build::Platform::Unix');
+blib_load('Module::Build::Platform::Windows');
#########################
@@ -74,7 +74,6 @@ foreach my $platform ('', '::Platform::Unix', '::Platform::Windows') {
# I think 3.24 isn't actually the majik version, my 3.23 seems to pass...
my $low_TPW_version = Text::ParseWords->VERSION < 3.24;
-use Module::Build::Platform::Unix;
foreach my $test (@unix_splits) {
# Text::ParseWords bug:
local $TODO = $low_TPW_version && ((keys %$test)[0] =~ m{\\\n});
@@ -82,7 +81,6 @@ foreach my $test (@unix_splits) {
do_split_tests('Module::Build::Platform::Unix', $test);
}
-use Module::Build::Platform::Windows;
foreach my $test (@win_splits) {
do_split_tests('Module::Build::Platform::Windows', $test);
}
diff --git a/cpan/Module-Build/t/extend.t b/cpan/Module-Build/t/extend.t
index db99eec70b..36ff4b6946 100644
--- a/cpan/Module-Build/t/extend.t
+++ b/cpan/Module-Build/t/extend.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 66;
+use MBTest tests => 64;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -79,7 +78,7 @@ print "Hello, World!\n";
$mb->add_build_element('foo');
$mb->add_build_element('foo');
- is_deeply $mb->build_elements, [qw(PL support pm xs pod script foo)],
+ is_deeply $mb->build_elements, [qw(PL support pm xs share_dir pod script foo)],
'The foo element should be in build_elements only once';
$mb->dispatch('build');
@@ -187,21 +186,20 @@ print "Hello, World!\n";
meta_add => {foo => 'bar'},
conflicts => {'Foo::Barxx' => 0},
);
- my %data;
- $mb->prepare_metadata( \%data );
- is $data{foo}, 'bar';
+ my $data = $mb->prepare_metadata;
+ is $data->{foo}, 'bar';
$mb->meta_merge(foo => 'baz');
- $mb->prepare_metadata( \%data );
- is $data{foo}, 'baz';
+ $data = $mb->prepare_metadata;
+ is $data->{foo}, 'baz';
$mb->meta_merge(conflicts => {'Foo::Fooxx' => 0});
- $mb->prepare_metadata( \%data );
- is_deeply $data{conflicts}, {'Foo::Barxx' => 0, 'Foo::Fooxx' => 0};
+ $data = $mb->prepare_metadata;
+ is_deeply $data->{conflicts}, {'Foo::Barxx' => 0, 'Foo::Fooxx' => 0};
$mb->meta_add(conflicts => {'Foo::Bazxx' => 0});
- $mb->prepare_metadata( \%data );
- is_deeply $data{conflicts}, {'Foo::Bazxx' => 0, 'Foo::Fooxx' => 0};
+ $data = $mb->prepare_metadata;
+ is_deeply $data->{conflicts}, {'Foo::Bazxx' => 0, 'Foo::Fooxx' => 0};
}
{
@@ -275,5 +273,3 @@ print "Hello, World!\n";
}
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/files.t b/cpan/Module-Build/t/files.t
index 87b192eaba..cf822fb091 100644
--- a/cpan/Module-Build/t/files.t
+++ b/cpan/Module-Build/t/files.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 6;
+use MBTest tests => 4;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
use IO::File;
my $tmp = MBTest->tmpdir;
@@ -46,5 +45,3 @@ my $mb = Module::Build->new_from_context;
ok( Module::Build->dir_contains($first, $second) );
}
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/help.t b/cpan/Module-Build/t/help.t
index 8408315f07..2bf34c8d50 100644
--- a/cpan/Module-Build/t/help.t
+++ b/cpan/Module-Build/t/help.t
@@ -2,38 +2,23 @@
use strict;
use lib 't/lib';
-use MBTest tests => 25;
+use MBTest tests => 23;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
-
-use Cwd ();
-use File::Path ();
-
-my $cwd = Cwd::cwd();
-my $tmp = MBTest->tmpdir;
+blib_load('Module::Build');
use DistGen;
-my $dist = DistGen->new(dir => $tmp);
-
-
+my $dist = DistGen->new;
$dist->regen;
+$dist->chdir_in;
my $restart = sub {
- $dist->clean();
- DistGen::chdir_all( $cwd );
- File::Path::rmtree( $tmp );
# we're redefining the same package as we go, so...
delete($::{'MyModuleBuilder::'});
delete($INC{'MyModuleBuilder.pm'});
- $dist->regen;
- chdir($dist->dirname) or
- die "Can't chdir to '@{[$dist->dirname]}': $!";
+ $dist->regen( clean => 1 );
};
-chdir($dist->dirname) or die "Can't chdir to '@{[$dist->dirname]}': $!";
-
########################################################################
{ # check the =item style
my $mb = Module::Build->subclass(
@@ -274,7 +259,5 @@ is($mb->get_action_docs('batz'), undef, 'nothing after uplevel');
# cleanup
$dist->clean();
-DistGen::chdir_all($cwd);
-File::Path::rmtree( $tmp );
# vim:ts=2:sw=2:et:sta
diff --git a/cpan/Module-Build/t/install.t b/cpan/Module-Build/t/install.t
index 2cadaa39da..66cdd5c94a 100644
--- a/cpan/Module-Build/t/install.t
+++ b/cpan/Module-Build/t/install.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 36;
+use MBTest tests => 34;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
use Config;
use Cwd ();
@@ -225,10 +224,7 @@ Simple Man <simple@example.com>
is keys %$pms, 0;
# revert to pristine state
- $dist->remove;
- $dist = DistGen->new( dir => $tmp );
- $dist->regen;
- $dist->chdir_in;
+ $dist->regen( clean => 1 );
}
sub strip_volume {
@@ -243,6 +239,3 @@ sub file_exists {
ok -e $file or diag("Expected $file to exist, but it doesn't");
}
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/install_extra_target.t b/cpan/Module-Build/t/install_extra_target.t
index c717ce5eee..21d0c272ae 100644
--- a/cpan/Module-Build/t/install_extra_target.t
+++ b/cpan/Module-Build/t/install_extra_target.t
@@ -3,10 +3,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 8;
+use MBTest tests => 6;
-require_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
use File::Spec::Functions qw( catdir );
@@ -46,11 +45,11 @@ sub process_etc_files
}
#Copy share files to blib
-sub process_share_files
+sub process_shared_files
{
my $self = shift;
- $self->copy_files("share");
+ $self->copy_files("shared");
}
1;
@@ -62,23 +61,23 @@ my $build = $subclass->new(
);
$build->add_build_element('etc');
-$build->add_build_element('share');
+$build->add_build_element('shared');
my $distdir = lc $build->dist_name();
foreach my $id ('core', 'site', 'vendor') {
#Where to install these build types when using prefix symantics
- $build->prefix_relpaths($id, 'share' => "share/$distdir");
+ $build->prefix_relpaths($id, 'shared' => "shared/$distdir");
$build->prefix_relpaths($id, 'etc' => "etc/$distdir");
#Where to install these build types when using default symantics
my $set = $build->install_sets($id);
- $set->{'share'} = '/usr/'.($id eq 'site' ? 'local/':'')."share/$distdir";
+ $set->{'shared'} = '/usr/'.($id eq 'site' ? 'local/':'')."shared/$distdir";
$set->{'etc'} = ($id eq 'site' ? '/usr/local/etc/':'/etc/').$distdir;
}
#Where to install these types when using install_base symantics
-$build->install_base_relpaths('share' => "share/$distdir");
+$build->install_base_relpaths('shared' => "shared/$distdir");
$build->install_base_relpaths('etc' => "etc/$distdir");
$build->create_build_script();
@@ -97,12 +96,12 @@ stardate = 1234344
===EOF===
-$dist->add_file("share/data", <<'===EOF===');
+$dist->add_file("shared/data", <<'===EOF===');
7 * 9 = 42?
===EOF===
-$dist->add_file("share/html/index.html", <<'===EOF===');
+$dist->add_file("shared/html/index.html", <<'===EOF===');
<HTML>
<BODY>
<H1>Hello World!</H1>
@@ -122,16 +121,15 @@ $output .= stdout_of sub { $dist->run_build };
my $error;
$error++ unless ok(-e "blib/etc/config", "Built etc/config");
-$error++ unless ok(-e "blib/share/data", "Built share/data");
-$error++ unless ok(-e "blib/share/html/index.html", "Built share/html");
+$error++ unless ok(-e "blib/shared/data", "Built shared/data");
+$error++ unless ok(-e "blib/shared/html/index.html", "Built shared/html");
diag "OUTPUT:\n$output" if $error;
$output = stdout_of sub { $dist->run_build('install') };
$error = 0;
$error++ unless ok(-e "$installdest/etc/simple/config", "installed etc/config");
-$error++ unless ok(-e "$installdest/share/simple/data", "installed share/data");
-$error++ unless ok(-e "$installdest/share/simple/html/index.html", "installed share/html");
+$error++ unless ok(-e "$installdest/shared/simple/data", "installed shared/data");
+$error++ unless ok(-e "$installdest/shared/simple/html/index.html", "installed shared/html");
diag "OUTPUT:\n$output" if $error;
-$dist->remove();
diff --git a/cpan/Module-Build/t/lib/DistGen.pm b/cpan/Module-Build/t/lib/DistGen.pm
index 86ee794f3b..d1fb260d60 100644
--- a/cpan/Module-Build/t/lib/DistGen.pm
+++ b/cpan/Module-Build/t/lib/DistGen.pm
@@ -7,9 +7,9 @@ use vars qw( $VERSION $VERBOSE @EXPORT_OK);
$VERSION = '0.01';
$VERBOSE = 0;
-
use Carp;
+use MBTest ();
use Cwd ();
use File::Basename ();
use File::Find ();
@@ -38,7 +38,7 @@ BEGIN {
$vms_efs_case = VMS::Feature::current("efs_case_preserve");
} else {
my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || '';
- $unix_rpt = $env_unix_rpt =~ /^[ET1]/i;
+ $unix_rpt = $env_unix_rpt =~ /^[ET1]/i;
my $efs_case = $ENV{'DECC$EFS_CASE_PRESERVE'} || '';
$vms_efs_case = $efs_case =~ /^[ET1]/i;
}
@@ -64,44 +64,76 @@ sub undent {
}
sub chdir_all ($) {
- # OS/2 has "current directory per disk", undeletable;
+ # OS/2 has "current directory per disk", undeletable;
# doing chdir() to another disk won't change cur-dir of initial disk...
chdir('/') if $^O eq 'os2';
chdir shift;
}
+
########################################################################
+END { chdir_all(MBTest->original_cwd); }
+
sub new {
- my $package = shift;
+ my $self = bless {}, shift;
+ $self->reset(@_);
+}
+
+sub reset {
+ my $self = shift;
my %options = @_;
$options{name} ||= 'Simple';
- $options{dir} ||= Cwd::cwd();
+ $options{dir} = File::Spec->rel2abs(
+ defined $options{dir} ? $options{dir} : MBTest->tmpdir
+ );
my %data = (
no_manifest => 0,
xs => 0,
+ inc => 0,
%options,
);
- my $self = bless( \%data, $package );
-
- # So we can clean up later even if the caller chdir()s
- $self->{dir} = File::Spec->rel2abs($self->{dir});
+ %$self = %data;
tie %{$self->{filedata}}, 'Tie::CPHash';
tie %{$self->{pending}{change}}, 'Tie::CPHash';
+ # start with a fresh, empty directory
if ( -d $self->dirname ) {
warn "Warning: Removing existing directory '@{[$self->dirname]}'\n";
- $self->remove;
+ File::Path::rmtree( $self->dirname );
}
+ File::Path::mkpath( $self->dirname );
$self->_gen_default_filedata();
return $self;
}
+sub remove {
+ my $self = shift;
+ $self->chdir_original if($self->did_chdir);
+ File::Path::rmtree( $self->dirname );
+ return $self;
+}
+
+sub revert {
+ my ($self, $file) = @_;
+ if ( defined $file ) {
+ delete $self->{filedata}{$file};
+ delete $self->{pending}{$_}{$file} for qw/change remove/;
+ }
+ else {
+ delete $self->{filedata}{$_} for keys %{ $self->{filedata} };
+ for my $pend ( qw/change remove/ ) {
+ delete $self->{pending}{$pend}{$_} for keys %{ $self->{pending}{$pend} };
+ }
+ }
+ $self->_gen_default_filedata;
+}
+
sub _gen_default_filedata {
my $self = shift;
@@ -112,17 +144,32 @@ sub _gen_default_filedata {
$self->add_file($member, $data) unless($self->{filedata}{$member});
};
- $self->$add_unless('Build.PL', undent(<<" ---"));
- use strict;
- use Module::Build;
+ if ( ! $self->{inc} ) {
+ $self->$add_unless('Build.PL', undent(<<" ---"));
+ use strict;
+ use Module::Build;
- my \$builder = Module::Build->new(
- module_name => '$self->{name}',
- license => 'perl',
- );
+ my \$builder = Module::Build->new(
+ module_name => '$self->{name}',
+ license => 'perl',
+ );
- \$builder->create_build_script();
- ---
+ \$builder->create_build_script();
+ ---
+ }
+ else {
+ $self->$add_unless('Build.PL', undent(<<" ---"));
+ use strict;
+ use inc::latest 'Module::Build';
+
+ my \$builder = Module::Build->new(
+ module_name => '$self->{name}',
+ license => 'perl',
+ );
+
+ \$builder->create_build_script();
+ ---
+ }
my $module_filename =
join( '/', ('lib', split(/::/, $self->{name})) ) . '.pm';
@@ -229,7 +276,7 @@ sub _gen_default_filedata {
# 5.6 is missing const char * in its typemap
$self->$add_unless('typemap', undent(<<" ---"));
- const char * T_PV
+ const char *\tT_PV
---
$self->$add_unless('t/basic.t', undent(<<" ---"));
@@ -249,7 +296,6 @@ sub _gen_manifest {
my $manifest = shift;
my $fh = IO::File->new( ">$manifest" ) or do {
- $self->remove();
die "Can't write '$manifest'\n";
};
@@ -312,7 +358,6 @@ sub regen {
my $dirname = File::Basename::dirname( $fullname );
unless ( -d $dirname ) {
File::Path::mkpath( $dirname ) or do {
- $self->remove();
die "Can't create '$dirname'\n";
};
}
@@ -322,7 +367,6 @@ sub regen {
}
my $fh = IO::File->new(">$fullname") or do {
- $self->remove();
die "Can't write '$fullname'\n";
};
print $fh $self->{filedata}{$file};
@@ -339,6 +383,7 @@ sub regen {
}
$self->_gen_manifest( $manifest );
}
+ return $self;
}
sub clean {
@@ -396,20 +441,7 @@ sub clean {
}, ($^O eq 'VMS' ? './' : File::Spec->curdir) );
chdir_all( $here );
-}
-
-sub remove {
- my $self = shift;
- croak("invalid usage -- remove()") if(@_);
- $self->chdir_original if($self->did_chdir);
- File::Path::rmtree( $self->dirname );
- # might as well check
- croak("\nthis test should have used chdir_in()") unless(Cwd::getcwd);
-}
-
-sub revert {
- my $self = shift;
- die "Unimplemented.\n";
+ return $self;
}
sub add_file {
@@ -425,10 +457,13 @@ sub remove_file {
}
delete( $self->{filedata}{$file} );
$self->{pending}{remove}{$file} = 1;
+ return $self;
}
sub change_build_pl {
- my ($self, $opts) = @_;
+ my ($self, @opts) = @_;
+
+ my $opts = ref $opts[0] eq 'HASH' ? $opts[0] : { @opts };
local $Data::Dumper::Terse = 1;
(my $args = Dumper($opts)) =~ s/^\s*\{|\}\s*$//g;
@@ -437,16 +472,17 @@ sub change_build_pl {
use strict;
use Module::Build;
my \$b = Module::Build->new(
- # Some CPANPLUS::Dist::Build versions need to allow mismatches
+ # Some CPANPLUS::Dist::Build versions need to allow mismatches
# On logic: thanks to Module::Install, CPAN.pm must set both keys, but
# CPANPLUS sets only the one
- allow_mb_mismatch => (
+ allow_mb_mismatch => (
\$ENV{PERL5_CPANPLUS_IS_RUNNING} && ! \$ENV{PERL5_CPAN_IS_RUNNING} ? 1 : 0
),
$args
);
\$b->create_build_script();
---
+ return $self;
}
sub change_file {
@@ -455,6 +491,7 @@ sub change_file {
my $data = shift;
$self->{filedata}{$file} = $data;
$self->{pending}{change}{$file} = 1;
+ return $self;
}
sub get_file {
@@ -466,40 +503,43 @@ sub get_file {
sub chdir_in {
my $self = shift;
-
- $self->{original_dir} ||= Cwd::cwd; # only once
+ $self->{original_dir} ||= Cwd::cwd; # only once!
my $dir = $self->dirname;
chdir($dir) or die "Can't chdir to '$dir': $!";
+ return $self;
}
########################################################################
-sub did_chdir {
- my $self = shift;
+sub did_chdir { exists shift()->{original_dir} }
- return exists($self->{original_dir});
-}
########################################################################
sub chdir_original {
my $self = shift;
- croak("never called chdir_in()") unless($self->{original_dir});
- my $dir = $self->{original_dir};
+ my $dir = delete $self->{original_dir};
chdir_all($dir) or die "Can't chdir to '$dir': $!";
+ return $self;
}
########################################################################
+sub new_from_context {
+ my ($self, @args) = @_;
+ require Module::Build;
+ return Module::Build->new_from_context( quiet => 1, @args );
+}
+
sub run_build_pl {
my ($self, @args) = @_;
require Module::Build;
- Module::Build->run_perl_script('Build.PL', [], [@args])
+ return Module::Build->run_perl_script('Build.PL', [], [@args])
}
sub run_build {
my ($self, @args) = @_;
require Module::Build;
my $build_script = $^O eq 'VMS' ? 'Build.com' : 'Build';
- Module::Build->run_perl_script($build_script, [], [@args])
+ return Module::Build->run_perl_script($build_script, [], [@args])
}
1;
@@ -516,8 +556,7 @@ DistGen - Creates simple distributions for testing.
use DistGen;
# create distribution and prepare to test
- my $dist = DistGen->new(name => 'Foo::Bar', dir => $tmp);
- $dist->regen;
+ my $dist = DistGen->new(name => 'Foo::Bar');
$dist->chdir_in;
# change distribution files
@@ -526,42 +565,48 @@ DistGen - Creates simple distributions for testing.
$dist->remove_file('t/some_test.t');
$dist->regen;
- # clean up extraneous files
+ # undo changes and clean up extraneous files
+ $dist->revert;
$dist->clean;
# exercise the command-line interface
$dist->run_build_pl();
$dist->run_build('test');
- # finish testing and clean up
- $dist->chdir_original;
- $dist->remove;
+ # start over as a new distribution
+ $dist->reset( name => 'Foo::Bar', xs => 1 );
+ $dist->chdir_in;
=head1 USAGE
A DistGen object manages a set of files in a distribution directory.
-The constructor and some methods only define the target state of the
-distribution. They do B<not> make any changes to the filesystem:
+The C<new()> constructor initializes the object and creates an empty
+directory for the distribution. It does not create files or chdir into
+the directory. The C<reset()> method re-initializes the object in a
+new directory with new parameters. It also does not create files or change
+the current directory.
+
+Some methods only define the target state of the distribution. They do B<not>
+make any changes to the filesystem:
- new
add_file
change_file
change_build_pl
remove_file
+ revert
Other methods then change the filesystem to match the target state of
-the distribution (or to remove it entirely):
+the distribution:
- regen
clean
+ regen
remove
Other methods are provided for a convenience during testing. The
-most important are ones that manage the current directory:
+most important is the one to enter the distribution directory:
chdir_in
- chdir_original
Additional methods portably encapsulate running Build.PL and Build:
@@ -570,16 +615,19 @@ Additional methods portably encapsulate running Build.PL and Build:
=head1 API
-=head2 Constructor
+=head2 Constructors
=head3 new()
-Create a new object. Does not write its contents (see L</regen()>.)
+Create a new object and an empty directory to hold the distribution's files.
+If no C<dir> option is provided, it defaults to MBTest->tmpdir, which sets
+a different temp directory for Perl core testing and CPAN testing.
+
+The C<new> method does not write any files -- see L</regen()> below.
- my $tmp = MBTest->tmpdir;
my $dist = DistGen->new(
name => 'Foo::Bar',
- dir => $tmp,
+ dir => MBTest->tmpdir,
xs => 1,
no_manifest => 0,
);
@@ -596,9 +644,14 @@ dist name.
=item dir
-The (parent) directory in which to create the distribution directory.
-The default is File::Spec->curdir. The distribution will be created
-under this according to the "dist" form of C<name> (e.g. "Foo-Bar".)
+The (parent) directory in which to create the distribution directory. The
+distribution will be created under this according to the "dist" form of C<name>
+(e.g. "Foo-Bar".) Defaults to a temporary directory.
+
+ $dist = DistGen->new( dir => '/tmp/MB-test' );
+ $dist->regen;
+
+ # distribution files have been created in /tmp/MB-test/Simple
=item xs
@@ -622,6 +675,13 @@ the following files are also added:
typemap
lib/Simple.xs # based on name parameter
+=head3 reset()
+
+The C<reset> method re-initializes the object as if it were generated
+from a fresh call to C<new>. It takes the same optional parameters as C<new>.
+
+ $dist->reset( name => 'Foo::Bar', xs => 0 );
+
=head2 Adding and editing files
Note that C<$filename> should always be specified with unix-style paths,
@@ -669,6 +729,14 @@ Removes C<$filename> from the distribution.
$dist->remove_file( $filename );
+=head3 revert()
+
+Returns the object to its initial state, or given a $filename it returns that
+file to its initial state if it is one of the built-in files.
+
+ $dist->revert;
+ $dist->revert($filename);
+
=head2 Changing the distribution directory
These methods immediately affect the filesystem.
@@ -680,8 +748,10 @@ flagged for removal with remove_file().
$dist->regen(clean => 1);
-If the optional C<clean> argument is given, it also removes any
-extraneous files that do not belong to the distribution.
+If the optional C<clean> argument is given, it also calls C<clean>. These
+can also be chained like this, instead:
+
+ $dist->clean->regen;
=head3 clean()
@@ -689,22 +759,19 @@ Removes any files that are not part of the distribution.
$dist->clean;
-=begin TODO
-
-=head3 revert()
-
-[Unimplemented] Returns the object to its initial state, or given a
-$filename it returns that file to it's initial state if it is one of
-the built-in files.
+=head3 remove()
- $dist->revert;
- $dist->revert($filename);
+Changes back to the original directory and removes the distribution
+directory (but not the temporary directory set during C<new()>).
-=end TODO
+ $dist = DistGen->new->chdir->regen;
+ # ... do some testing ...
-=head3 remove()
+ $dist->remove->chdir_in->regen;
+ # ... do more testing ...
-Removes the entire distribution directory.
+This is like a more aggressive form of C<clean>. Generally, calling C<clean>
+and C<regen> should be sufficient.
=head2 Changing directories
diff --git a/cpan/Module-Build/t/lib/MBTest.pm b/cpan/Module-Build/t/lib/MBTest.pm
index dc2410b399..8a5acd257a 100644
--- a/cpan/Module-Build/t/lib/MBTest.pm
+++ b/cpan/Module-Build/t/lib/MBTest.pm
@@ -13,6 +13,7 @@ BEGIN {
my @delete_env_keys = qw(
DEVEL_COVER_OPTIONS
MODULEBUILDRC
+ PERL_MB_OPT
HARNESS_TIMER
HARNESS_OPTIONS
HARNESS_VERBOSE
@@ -49,7 +50,15 @@ BEGIN {
# In case the test wants to use our other bundled
# modules, make sure they can be loaded.
- push @INC, File::Spec->catdir('t', 'bundled');
+ my $t_lib = File::Spec->catdir('t', 'bundled');
+ push @INC, $t_lib; # Let user's installed version override
+
+ if ($ENV{PERL_CORE}) {
+ # We change directories, so expand @INC and $^X to absolute paths
+ # Also add .
+ @INC = (map(File::Spec->rel2abs($_), @INC), ".");
+ $^X = File::Spec->rel2abs($^X);
+ }
}
use Exporter;
@@ -74,7 +83,7 @@ my @extra_exports = qw(
find_in_path
check_compiler
have_module
- ensure_blib
+ blib_load
);
push @EXPORT, @extra_exports;
__PACKAGE__->export(scalar caller, @extra_exports);
@@ -85,7 +94,9 @@ __PACKAGE__->export(scalar caller, @extra_exports);
# always return to the current directory
{
- my $cwd = Cwd::cwd;
+ my $cwd = File::Spec->rel2abs(Cwd::cwd);
+
+ sub original_cwd { return $cwd }
END {
# Go back to where you came from!
@@ -103,13 +114,11 @@ __PACKAGE__->export(scalar caller, @extra_exports);
}
########################################################################
-# Setup a temp directory
-sub tmpdir {
- my ($self, $usr_tmp) = @_;
- return File::Temp::tempdir( 'MB-XXXXXXXX',
- CLEANUP => 1, DIR => $ENV{PERL_CORE} ? Cwd::cwd :
- $usr_tmp ? $usr_tmp : File::Spec->tmpdir
- );
+# Setup a temp directory
+sub tmpdir {
+ my ($self, @args) = @_;
+ my $dir = $ENV{PERL_CORE} ? MBTest->original_cwd : File::Spec->tmpdir;
+ return File::Temp::tempdir('MB-XXXXXXXX', CLEANUP => 1, DIR => $dir, @args);
}
sub save_handle {
@@ -137,7 +146,7 @@ sub stdout_stderr_of {
$stdout = stdout_of ( sub {
$stderr = stderr_of( $subr )
});
- return ($stdout, $stderr);
+ return wantarray ? ($stdout, $stderr) : $stdout . $stderr;
}
sub slurp {
@@ -160,13 +169,20 @@ sub exe_exts {
sub find_in_path {
my $thing = shift;
-
- my @path = split $Config{path_sep}, $ENV{PATH};
+
my @exe_ext = exe_exts();
- foreach (@path) {
- my $fullpath = File::Spec->catfile($_, $thing);
+ if ( File::Spec->file_name_is_absolute( $thing ) ) {
foreach my $ext ( '', @exe_ext ) {
- return "$fullpath$ext" if -e "$fullpath$ext";
+ return "$thing$ext" if -e "$thing$ext";
+ }
+ }
+ else {
+ my @path = split $Config{path_sep}, $ENV{PATH};
+ foreach (@path) {
+ my $fullpath = File::Spec->catfile($_, $thing);
+ foreach my $ext ( '', @exe_ext ) {
+ return "$fullpath$ext" if -e "$fullpath$ext";
+ }
}
}
return;
@@ -178,6 +194,7 @@ sub check_compiler {
local $SIG{__WARN__} = sub {};
+ blib_load('Module::Build');
my $mb = Module::Build->current;
$mb->verbose( 0 );
@@ -202,21 +219,23 @@ sub check_compiler {
sub have_module {
my $module = shift;
- return eval "use $module; 1";
+ return eval "require $module; 1";
}
-sub ensure_blib {
- # Make sure the given module was loaded from blib/, not the larger system
+sub blib_load {
+ # Load the given module and ensure it came from blib/, not the larger system
my $mod = shift;
+ have_module($mod) or die "Error loading $mod\: $@\n";
+
(my $path = $mod) =~ s{::}{/}g;
-
- local $Test::Builder::Level = $Test::Builder::Level + 1;
- SKIP: {
- skip "no blib in core", 1 if $ENV{PERL_CORE};
- like $INC{"$path.pm"}, qr/\bblib\b/, "Make sure $mod was loaded from blib/"
- or diag "PERL5LIB: " . ($ENV{PERL5LIB} || '') . "\n" .
- "PERL5OPT: " . ($ENV{PERL5OPT} || '') . "\n" .
- "\@INC contains:\n " . join("\n ", @INC) . "\n";
+ $path .= ".pm";
+ my ($pkg, $file, $line) = caller;
+ unless($ENV{PERL_CORE}) {
+ unless($INC{$path} =~ m/\bblib\b/) {
+ (my $load_from = $INC{$path}) =~ s{$path$}{};
+ die "$mod loaded from '$load_from'\nIt should have been loaded from blib. \@INC contains:\n ",
+ join("\n ", @INC) . "\nFatal error occured in blib_load() at $file, line $line.\n";
+ }
}
}
diff --git a/cpan/Module-Build/t/manifypods.t b/cpan/Module-Build/t/manifypods.t
index 31c9e8ea83..5947646d13 100644
--- a/cpan/Module-Build/t/manifypods.t
+++ b/cpan/Module-Build/t/manifypods.t
@@ -3,15 +3,14 @@
use strict;
use lib 't/lib';
use MBTest;
-use Module::Build;
-use Module::Build::ConfigData;
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
if ( Module::Build::ConfigData->feature('manpage_support') ) {
- plan tests => 22;
+ plan tests => 21;
} else {
plan skip_all => 'manpage_support feature is not enabled';
}
-ensure_blib('Module::Build');
#########################
@@ -139,11 +138,7 @@ $mb->dispatch('realclean');
# revert to a pristine state
-$dist->remove;
-$dist = DistGen->new( dir => $tmp );
-$dist->regen;
-$dist->chdir_in;
-
+$dist->regen( clean => 1 );
my $mb2 = Module::Build->new(
module_name => $dist->name,
@@ -163,6 +158,3 @@ foreach ('testcover', 'disttest') {
unlike $docs, qr/\n=/, $docs;
}
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/mbyaml.t b/cpan/Module-Build/t/mbyaml.t
deleted file mode 100644
index d2cb0d547f..0000000000
--- a/cpan/Module-Build/t/mbyaml.t
+++ /dev/null
@@ -1,262 +0,0 @@
-#!/usr/local/bin/perl -w
-
-use strict;
-use lib 't/lib';
-use MBTest 'no_plan';
-
-use_ok 'Module::Build::YAML';
-ensure_blib('Module::Build::YAML');
-
-my ($dir);
-$dir = ".";
-$dir = "t" if (-d "t");
-
-{
- my ($expected, $got, $var);
- ##########################################################
- # Test a typical-looking Module::Build structure (alphabetized)
- ##########################################################
- $var = {
- 'resources' => {
- 'license' => 'http://opensource.org/licenses/artistic-license.php'
- },
- 'meta-spec' => {
- 'version' => '1.2',
- 'url' => 'http://module-build.sourceforge.net/META-spec-v1.2.html'
- },
- 'generated_by' => 'Module::Build version 0.2709',
- 'version' => '0.13',
- 'name' => 'js-app',
- 'dynamic_config' => '1',
- 'author' => [
- '"Stephen Adkins" <spadkins@gmail.com>'
- ],
- 'license' => 'lgpl',
- 'build_requires' => {
- 'App::Build' => '0',
- 'File::Spec' => '0',
- 'Module::Build' => '0'
- },
- 'provides' => {
- 'JavaScript::App' => {
- 'version' => '0',
- 'file' => 'lib/JavaScript/App.pm'
- }
- },
- 'requires' => {
- 'App::Options' => '0'
- },
- 'abstract' => 'A framework for building dynamic widgets or full applications in Javascript'
- };
- $expected = <<'EOF';
----
-abstract: A framework for building dynamic widgets or full applications in Javascript
-author:
- - '"Stephen Adkins" <spadkins@gmail.com>'
-build_requires:
- App::Build: 0
- File::Spec: 0
- Module::Build: 0
-dynamic_config: 1
-generated_by: Module::Build version 0.2709
-license: lgpl
-meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.2.html
- version: 1.2
-name: js-app
-provides:
- JavaScript::App:
- file: lib/JavaScript/App.pm
- version: 0
-requires:
- App::Options: 0
-resources:
- license: http://opensource.org/licenses/artistic-license.php
-version: 0.13
-EOF
- $got = &Module::Build::YAML::Dump($var);
- is($got, $expected, "Dump(): single deep hash");
-
- ##########################################################
- # Test a typical-looking Module::Build structure (ordered)
- ##########################################################
- $expected = <<'EOF';
----
-name: js-app
-version: 0.13
-author:
- - '"Stephen Adkins" <spadkins@gmail.com>'
-abstract: A framework for building dynamic widgets or full applications in Javascript
-license: lgpl
-resources:
- license: http://opensource.org/licenses/artistic-license.php
-requires:
- App::Options: 0
-build_requires:
- App::Build: 0
- File::Spec: 0
- Module::Build: 0
-dynamic_config: 1
-provides:
- JavaScript::App:
- file: lib/JavaScript/App.pm
- version: 0
-generated_by: Module::Build version 0.2709
-meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.2.html
- version: 1.2
-EOF
- $var->{_order} = [qw(name version author abstract license resources requires build_requires dynamic_config provides)];
- $got = &Module::Build::YAML::Dump($var);
- is($got, $expected, "Dump(): single deep hash, ordered");
-
- ##########################################################
- # Test that an array turns into multiple documents
- ##########################################################
- $var = [
- "e",
- 2.71828,
- [ "pi", "is", 3.1416 ],
- { fun => "under_sun", 6 => undef, "more", undef },
- ];
- $expected = <<'EOF';
----
-e
----
-2.71828
----
-- pi
-- is
-- 3.1416
----
-6: ~
-fun: under_sun
-more: ~
-EOF
- $got = &Module::Build::YAML::Dump(@$var);
- is($got, $expected, "Dump(): multiple, various");
-
- ##########################################################
- # Test that a single array ref turns into one document
- ##########################################################
- $expected = <<'EOF';
----
-- e
-- 2.71828
--
- - pi
- - is
- - 3.1416
--
- 6: ~
- fun: under_sun
- more: ~
-EOF
- $got = &Module::Build::YAML::Dump($var);
- is($got, $expected, "Dump(): single array of various");
-
- ##########################################################
- # Test Object-Oriented Flavor of the API
- ##########################################################
- my $y = Module::Build::YAML->new();
- $got = $y->Dump($var);
- is($got, $expected, "Dump(): single array of various (OO)");
-
- ##########################################################
- # Test Quoting Conditions (newlines, quotes, tildas, undefs)
- ##########################################################
- $var = {
- 'foo01' => '`~!@#$%^&*()_+-={}|[]\\;\':",./?<>
-<nl>',
- 'foo02' => '~!@#$%^&*()_+-={}|[]\\;:,./<>?',
- 'foo03' => undef,
- 'foo04' => '~',
- };
- $expected = <<'EOF';
----
-foo01: "`~!@#$%^&*()_+-={}|[]\;':\",./?<>\n<nl>"
-foo02: "~!@#$%^&*()_+-={}|[]\;:,./<>?"
-foo03: ~
-foo04: "~"
-EOF
- $got = &Module::Build::YAML::Dump($var);
- is($got, $expected, "Dump(): tricky embedded characters");
-
- $var = {
- 'foo10' => undef,
- 'foo40' => '!',
- 'foo41' => '@',
- 'foo42' => '#',
- 'foo43' => '$',
- 'foo44' => '%',
- 'foo45' => '^',
- 'foo47' => '&',
- 'foo48' => '*',
- 'foo49' => '(',
- 'foo50' => ')',
- 'foo51' => '_',
- 'foo52' => '+',
- 'foo53' => '-',
- 'foo54' => '=',
- 'foo55' => '{',
- 'foo56' => '}',
- 'foo57' => '|',
- 'foo58' => '[',
- 'foo59' => ']',
- 'foo60' => '\\',
- 'foo61' => ';',
- 'foo62' => ':',
- 'foo63' => ',',
- 'foo64' => '.',
- 'foo65' => '/',
- 'foo66' => '<',
- 'foo67' => '>',
- 'foo68' => '?',
- 'foo69' => '\'',
- 'foo70' => '"',
- 'foo71' => '`',
- 'foo72' => '
-',
- };
- $expected = <<'EOF';
----
-foo10: ~
-foo40: "!"
-foo41: '@'
-foo42: "#"
-foo43: $
-foo44: %
-foo45: "^"
-foo47: "&"
-foo48: "*"
-foo49: "("
-foo50: ")"
-foo51: _
-foo52: +
-foo53: -
-foo54: =
-foo55: "{"
-foo56: "}"
-foo57: "|"
-foo58: "["
-foo59: "]"
-foo60: \
-foo61: ;
-foo62: :
-foo63: ,
-foo64: .
-foo65: /
-foo66: '<'
-foo67: '>'
-foo68: "?"
-foo69: "'"
-foo70: '"'
-foo71: "`"
-foo72: "\n"
-EOF
- $got = &Module::Build::YAML::Dump($var);
- is($got, $expected, "Dump(): tricky embedded characters (singles)");
-
-}
-
-
diff --git a/cpan/Module-Build/t/metadata.t b/cpan/Module-Build/t/metadata.t
index 6f53c1d225..2850bea24c 100644
--- a/cpan/Module-Build/t/metadata.t
+++ b/cpan/Module-Build/t/metadata.t
@@ -2,15 +2,13 @@
use strict;
use lib 't/lib';
-use MBTest tests => 53;
+use MBTest tests => 51;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
my $tmp = MBTest->tmpdir;
-use Module::Build::ConfigData;
-
my %metadata =
(
module_name => 'Simple',
@@ -56,7 +54,6 @@ my $simple2_file = 'lib/Simple2.pm';
$dist->chdir_in;
-use Module::Build;
my $mb = Module::Build->new_from_context;
##################################################
@@ -68,7 +65,7 @@ my $mb = Module::Build->new_from_context;
my $mb_config_req = {
'Module::Build' => int($Module::Build::VERSION * 100)/100
};
- my $node = $mb->prepare_metadata( {} );
+ my $node = $mb->prepare_metadata( );
# exists() doesn't seem to work here
is $node->{name}, $metadata{module_name};
@@ -89,7 +86,7 @@ my $mb = Module::Build->new_from_context;
{
my $mb_prereq = { 'Module::Build' => 0 };
$mb->configure_requires( $mb_prereq );
- my $node = $mb->prepare_metadata( {} );
+ my $node = $mb->prepare_metadata( );
# exists() doesn't seem to work here
@@ -366,7 +363,7 @@ package Simple;
$VERSION = '2.34';
---
$dist->regen( clean => 1 );
-$mb = new_build();
+stderr_of( sub { $mb = new_build(); } );
$err = stderr_of( sub { $provides = $mb->find_dist_packages } );
is_deeply($provides,
{'Simple' => { file => $simple_file,
@@ -470,7 +467,7 @@ package Foo;
$VERSION = '2.34';
---
$dist->regen( clean => 1 );
-$mb = new_build();
+stderr_of( sub { $mb = new_build(); } );
$err = stderr_of( sub { $provides = $mb->find_dist_packages } );
# XXX Should 'Foo' exist ??? Can't predict values for file & version
ok( exists( $provides->{Foo} ) );
@@ -604,6 +601,3 @@ $dist->regen( clean => 1 );
$mb = new_build();
is_deeply($mb->find_dist_packages, {});
-############################################################
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/metadata2.t b/cpan/Module-Build/t/metadata2.t
index a5af034dc0..954b6589a0 100644
--- a/cpan/Module-Build/t/metadata2.t
+++ b/cpan/Module-Build/t/metadata2.t
@@ -2,14 +2,11 @@
use strict;
use lib 't/lib';
-use MBTest tests => 20;
+use MBTest tests => 18;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
-my $tmp = MBTest->tmpdir;
-
-use Module::Build::ConfigData;
use DistGen;
@@ -19,14 +16,12 @@ SKIP: {
skip( 'YAML_support feature is not enabled', 4 )
unless Module::Build::ConfigData->feature('YAML_support');
- my $dist = DistGen->new( dir => $tmp, no_manifest => 1 );
- $dist->regen;
-
- $dist->chdir_in;
+ my $dist = DistGen->new( no_manifest => 1 )->chdir_in->regen;
ok ! -e 'MANIFEST';
- my $mb = Module::Build->new_from_context;
+ my $mb;
+ stderr_of( sub { $mb = Module::Build->new_from_context } );
my $out;
$out = eval { stderr_of(sub{$mb->dispatch('distmeta')}) };
@@ -36,7 +31,6 @@ SKIP: {
ok -e 'META.yml';
- $dist->remove;
}
@@ -62,7 +56,7 @@ Simple Simon <simon@simple.sim>
=cut
---
-my $dist = DistGen->new( dir => $tmp );
+my $dist = DistGen->new->chdir_in;
$dist->change_build_pl
({
@@ -71,10 +65,6 @@ $dist->change_build_pl
license => 'perl',
create_readme => 1,
});
-$dist->regen;
-
-$dist->chdir_in;
-
# .pm File with pod
#
@@ -139,7 +129,3 @@ is( $mb->dist_author->[0], 'Simple Simon <simon@simple.sim>',
is( $mb->dist_abstract, "A simple module",
"Extracting abstract from .pod over .pm");
-
-############################################################
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/moduleinfo.t b/cpan/Module-Build/t/moduleinfo.t
index ca7eb048e5..e28726d493 100644
--- a/cpan/Module-Build/t/moduleinfo.t
+++ b/cpan/Module-Build/t/moduleinfo.t
@@ -4,99 +4,58 @@
use strict;
use lib 't/lib';
-use MBTest tests => 82;
-
-use_ok 'Module::Build::ModuleInfo';
-ensure_blib('Module::Build::ModuleInfo');
-
-my $tmp = MBTest->tmpdir;
-
-use DistGen;
-my $dist = DistGen->new( dir => $tmp );
-$dist->regen;
-
-$dist->chdir_in;
-
-#########################
-
-# class method C<find_module_by_name>
-my $module = Module::Build::ModuleInfo->find_module_by_name(
- 'Module::Build::ModuleInfo' );
-ok( -e $module, 'find_module_by_name() succeeds' );
-
-
-# fail on invalid module name
-my $pm_info = Module::Build::ModuleInfo->new_from_module(
- 'Foo::Bar', inc => [] );
-ok( !defined( $pm_info ), 'fail if can\'t find module by module name' );
-
-
-# fail on invalid filename
-my $file = File::Spec->catfile( 'Foo', 'Bar.pm' );
-$pm_info = Module::Build::ModuleInfo->new_from_file( $file, inc => [] );
-ok( !defined( $pm_info ), 'fail if can\'t find module by file name' );
-
-
-# construct from module filename
-$file = File::Spec->catfile( 'lib', split( /::/, $dist->name ) ) . '.pm';
-$pm_info = Module::Build::ModuleInfo->new_from_file( $file );
-ok( defined( $pm_info ), 'new_from_file() succeeds' );
-
-# construct from module name, using custom include path
-$pm_info = Module::Build::ModuleInfo->new_from_module(
- $dist->name, inc => [ 'lib', @INC ] );
-ok( defined( $pm_info ), 'new_from_module() succeeds' );
-
+use MBTest;
# parse various module $VERSION lines
+# these will be reversed later to create %modules
my @modules = (
- <<'---', # declared & defined on same line with 'our'
+ '1.23' => <<'---', # declared & defined on same line with 'our'
package Simple;
our $VERSION = '1.23';
---
- <<'---', # declared & defined on separate lines with 'our'
+ '1.23' => <<'---', # declared & defined on separate lines with 'our'
package Simple;
our $VERSION;
$VERSION = '1.23';
---
- <<'---', # use vars
+ '1.23' => <<'---', # use vars
package Simple;
use vars qw( $VERSION );
$VERSION = '1.23';
---
- <<'---', # choose the right default package based on package/file name
+ '1.23' => <<'---', # choose the right default package based on package/file name
package Simple::_private;
$VERSION = '0';
package Simple;
$VERSION = '1.23'; # this should be chosen for version
---
- <<'---', # just read the first $VERSION line
+ '1.23' => <<'---', # just read the first $VERSION line
package Simple;
$VERSION = '1.23'; # we should see this line
$VERSION = eval $VERSION; # and ignore this one
---
- <<'---', # just read the first $VERSION line in reopened package (1)
+ '1.23' => <<'---', # just read the first $VERSION line in reopened package (1)
package Simple;
$VERSION = '1.23';
package Error::Simple;
$VERSION = '2.34';
package Simple;
---
- <<'---', # just read the first $VERSION line in reopened package (2)
+ '1.23' => <<'---', # just read the first $VERSION line in reopened package (2)
package Simple;
package Error::Simple;
$VERSION = '2.34';
package Simple;
$VERSION = '1.23';
---
- <<'---', # mentions another module's $VERSION
+ '1.23' => <<'---', # mentions another module's $VERSION
package Simple;
$VERSION = '1.23';
if ( $Other::VERSION ) {
# whatever
}
---
- <<'---', # mentions another module's $VERSION in a different package
+ '1.23' => <<'---', # mentions another module's $VERSION in a different package
package Simple;
$VERSION = '1.23';
package Simple2;
@@ -104,21 +63,21 @@ if ( $Simple::VERSION ) {
# whatever
}
---
- <<'---', # $VERSION checked only in assignments, not regexp ops
+ '1.23' => <<'---', # $VERSION checked only in assignments, not regexp ops
package Simple;
$VERSION = '1.23';
if ( $VERSION =~ /1\.23/ ) {
# whatever
}
---
- <<'---', # $VERSION checked only in assignments, not relational ops
+ '1.23' => <<'---', # $VERSION checked only in assignments, not relational ops
package Simple;
$VERSION = '1.23';
if ( $VERSION == 3.45 ) {
# whatever
}
---
- <<'---', # $VERSION checked only in assignments, not relational ops
+ '1.23' => <<'---', # $VERSION checked only in assignments, not relational ops
package Simple;
$VERSION = '1.23';
package Simple2;
@@ -126,36 +85,36 @@ if ( $Simple::VERSION == 3.45 ) {
# whatever
}
---
- <<'---', # Fully qualified $VERSION declared in package
+ '1.23' => <<'---', # Fully qualified $VERSION declared in package
package Simple;
$Simple::VERSION = 1.23;
---
- <<'---', # Differentiate fully qualified $VERSION in a package
+ '1.23' => <<'---', # Differentiate fully qualified $VERSION in a package
package Simple;
$Simple2::VERSION = '999';
$Simple::VERSION = 1.23;
---
- <<'---', # Differentiate fully qualified $VERSION and unqualified
+ '1.23' => <<'---', # Differentiate fully qualified $VERSION and unqualified
package Simple;
$Simple2::VERSION = '999';
$VERSION = 1.23;
---
- <<'---', # $VERSION declared as package variable from within 'main' package
+ '1.23' => <<'---', # $VERSION declared as package variable from within 'main' package
$Simple::VERSION = '1.23';
{
package Simple;
$x = $y, $cats = $dogs;
}
---
- <<'---', # $VERSION wrapped in parens - space inside
+ '1.23' => <<'---', # $VERSION wrapped in parens - space inside
package Simple;
( $VERSION ) = '1.23';
---
- <<'---', # $VERSION wrapped in parens - no space inside
+ '1.23' => <<'---', # $VERSION wrapped in parens - no space inside
package Simple;
($VERSION) = '1.23';
---
- <<'---', # $VERSION follows a spurious 'package' in a quoted construct
+ '1.23' => <<'---', # $VERSION follows a spurious 'package' in a quoted construct
package Simple;
__PACKAGE__->mk_accessors(qw(
program socket proc
@@ -163,25 +122,87 @@ __PACKAGE__->mk_accessors(qw(
our $VERSION = "1.23";
---
- <<'---', # $VERSION using version.pm
+ '1.23' => <<'---', # $VERSION using version.pm
package Simple;
use version; our $VERSION = version->new('1.23');
---
- <<'---', # $VERSION using version.pm and qv()
+ '1.23' => <<'---', # $VERSION using version.pm and qv()
package Simple;
use version; our $VERSION = qv('1.230');
---
- <<'---', # Two version assignments, should ignore second one
+ '1.23' => <<'---', # Two version assignments, should ignore second one
$Simple::VERSION = '1.230';
$Simple::VERSION = eval $Simple::VERSION;
---
+ '1.23' => <<'---', # declared & defined on same line with 'our'
+package Simple;
+our $VERSION = '1.23_00_00';
+---
+ '1.23' => <<'---', # package NAME VERSION
+ package Simple 1.23;
+---
+ '1.23_01' => <<'---', # package NAME VERSION
+ package Simple 1.23_01;
+---
+ 'v1.2.3' => <<'---', # package NAME VERSION
+ package Simple v1.2.3;
+---
+ 'v1.2_3' => <<'---', # package NAME VERSION
+ package Simple v1.2_3;
+---
);
+my %modules = reverse @modules;
+
+plan tests => 36 + 2 * keys( %modules );
-my( $i, $n ) = ( 1, scalar( @modules ) );
-foreach my $module ( @modules ) {
+blib_load('Module::Build::ModuleInfo');
+
+my $tmp = MBTest->tmpdir;
+
+use DistGen;
+my $dist = DistGen->new( dir => $tmp );
+$dist->regen;
+
+$dist->chdir_in;
+
+#########################
+
+# class method C<find_module_by_name>
+my $module = Module::Build::ModuleInfo->find_module_by_name(
+ 'Module::Build::ModuleInfo' );
+ok( -e $module, 'find_module_by_name() succeeds' );
+
+
+# fail on invalid module name
+my $pm_info = Module::Build::ModuleInfo->new_from_module(
+ 'Foo::Bar', inc => [] );
+ok( !defined( $pm_info ), 'fail if can\'t find module by module name' );
+
+
+# fail on invalid filename
+my $file = File::Spec->catfile( 'Foo', 'Bar.pm' );
+$pm_info = Module::Build::ModuleInfo->new_from_file( $file, inc => [] );
+ok( !defined( $pm_info ), 'fail if can\'t find module by file name' );
+
+
+# construct from module filename
+$file = File::Spec->catfile( 'lib', split( /::/, $dist->name ) ) . '.pm';
+$pm_info = Module::Build::ModuleInfo->new_from_file( $file );
+ok( defined( $pm_info ), 'new_from_file() succeeds' );
+
+# construct from module name, using custom include path
+$pm_info = Module::Build::ModuleInfo->new_from_module(
+ $dist->name, inc => [ 'lib', @INC ] );
+ok( defined( $pm_info ), 'new_from_module() succeeds' );
+
+
+foreach my $module ( sort keys %modules ) {
+ my $expected = $modules{$module};
SKIP: {
skip( "No our() support until perl 5.6", 2 )
- if $] < 5.006 && $module =~ /\bour\b/;
+ if $] < 5.006 && $module =~ /\bour\b/;
+ skip( "No package NAME VERSION support until perl 5.11.1", 2 )
+ if $] < 5.011001 && $module =~ /package\s+[\w\:\']+\s+v?[0-9._]+/;
$dist->change_file( 'lib/Simple.pm', $module );
$dist->regen;
@@ -191,19 +212,17 @@ foreach my $module ( @modules ) {
my $pm_info = Module::Build::ModuleInfo->new_from_file( $file );
# Test::Builder will prematurely numify objects, so use this form
- ok( $pm_info->version eq '1.23',
- "correct module version ($i of $n)" );
- is( $warnings, '', 'no warnings from parsing' );
- $i++;
+ my $errs;
+ ok( $pm_info->version eq $expected,
+ "correct module version (expected '$expected')" )
+ or $errs++;
+ is( $warnings, '', 'no warnings from parsing' ) or $errs++;
+ diag "Got: '@{[$pm_info->version]}'\nModule contents:\n$module" if $errs;
}
}
# revert to pristine state
-$dist->remove;
-$dist = DistGen->new( dir => $tmp );
-$dist->regen;
-$dist->chdir_in;
-
+$dist->regen( clean => 1 );
# Find each package only once
$dist->change_file( 'lib/Simple.pm', <<'---' );
@@ -249,19 +268,15 @@ $pm_info = Module::Build::ModuleInfo->new_from_file( $file );
is( $pm_info->version, '1.23_01', 'alpha version reported');
# NOTE the following test has be done this way because Test::Builder is
-# too smart for our own good and tries to see if the version object is a
+# too smart for our own good and tries to see if the version object is a
# dual-var, which breaks with alpha versions:
# Argument "1.23_0100" isn't numeric in addition (+) at
-# /usr/lib/perl5/5.8.7/Test/Builder.pm line 505.
+# /usr/lib/perl5/5.8.7/Test/Builder.pm line 505.
ok( $pm_info->version > 1.23, 'alpha version greater than non');
# revert to pristine state
-$dist->remove;
-$dist = DistGen->new( dir => $tmp );
-$dist->regen;
-$dist->chdir_in;
-
+$dist->regen( clean => 1 );
# parse $VERSION lines scripts for package main
my @scripts = (
@@ -313,7 +328,7 @@ $::VERSION = 0.01;
---
);
-( $i, $n ) = ( 1, scalar( @scripts ) );
+my ( $i, $n ) = ( 1, scalar( @scripts ) );
foreach my $script ( @scripts ) {
$dist->change_file( 'bin/simple.plx', $script );
$dist->regen;
@@ -402,7 +417,7 @@ __DATA__
is( $pm_info->name, 'Simple', 'found default package' );
is( $pm_info->version, '0.01', 'version for default package' );
my @packages = $pm_info->packages_inside;
- is_deeply(\@packages, ['Simple']);
+ is_deeply(\@packages, ['Simple'], 'packages inside');
}
{
@@ -419,10 +434,7 @@ $VERSION = version->new('0.61.' . (qw$Revision: 129 $)[1]);
is( $pm_info->name, 'Simple', 'found default package' );
is( $pm_info->version, '0.60.128', 'version for default package' );
my @packages = $pm_info->packages_inside;
- is_deeply([sort @packages], ['Simple', 'Simple::Simon']);
+ is_deeply([sort @packages], ['Simple', 'Simple::Simon'], 'packages inside');
is( $pm_info->version('Simple::Simon'), '0.61.129', 'version for embedded package' );
}
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/mymeta.t b/cpan/Module-Build/t/mymeta.t
new file mode 100644
index 0000000000..c60a5b2420
--- /dev/null
+++ b/cpan/Module-Build/t/mymeta.t
@@ -0,0 +1,30 @@
+#!/usr/bin/perl -w
+
+use strict;
+use lib 't/lib';
+use MBTest tests => 3;
+
+blib_load('Module::Build');
+
+my $tmp = MBTest->tmpdir;
+
+use DistGen;
+my $dist = DistGen->new( dir => $tmp );
+$dist->regen;
+$dist->chdir_in;
+
+#########################
+
+# Test MYMETA generation
+{
+ ok( ! -e "MYMETA.yml", "MYMETA.yml doesn't exist before Build.PL runs" );
+ my $output;
+ $output = stdout_of sub { $dist->run_build_pl };
+ like($output, qr/Creating new 'MYMETA.yml' with configuration results/,
+ "Saw MYMETA.yml creation message"
+ );
+ ok( -e "MYMETA.yml", "MYMETA.yml exists" );
+}
+
+#########################
+
diff --git a/cpan/Module-Build/t/new_from_context.t b/cpan/Module-Build/t/new_from_context.t
index ee34f07367..f45a1760eb 100644
--- a/cpan/Module-Build/t/new_from_context.t
+++ b/cpan/Module-Build/t/new_from_context.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 4;
+use MBTest tests => 2;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
use IO::File;
my $tmp = MBTest->tmpdir;
@@ -25,7 +24,4 @@ my $mb = eval { Module::Build->new_from_context};
ok(! $@, 'dodged the bullet') or die;
ok($mb);
-# cleanup
-$dist->remove;
-
# vim:ts=2:sw=2:et:sta
diff --git a/cpan/Module-Build/t/notes.t b/cpan/Module-Build/t/notes.t
index 29f1fc38b1..4568e7c36a 100644
--- a/cpan/Module-Build/t/notes.t
+++ b/cpan/Module-Build/t/notes.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 13;
+use MBTest tests => 11;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -65,6 +64,3 @@ $mb = Module::Build->resume;
ok $mb;
is $mb->notes('foo'), 'bar';
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/parents.t b/cpan/Module-Build/t/parents.t
index 666fb05601..825f79a787 100644
--- a/cpan/Module-Build/t/parents.t
+++ b/cpan/Module-Build/t/parents.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 28;
+use MBTest tests => 26;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
#########################
diff --git a/cpan/Module-Build/t/perl_mb_opt.t b/cpan/Module-Build/t/perl_mb_opt.t
new file mode 100644
index 0000000000..70089ee6be
--- /dev/null
+++ b/cpan/Module-Build/t/perl_mb_opt.t
@@ -0,0 +1,62 @@
+# 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
diff --git a/cpan/Module-Build/t/pod_parser.t b/cpan/Module-Build/t/pod_parser.t
index 42a78209e2..64d4c75348 100644
--- a/cpan/Module-Build/t/pod_parser.t
+++ b/cpan/Module-Build/t/pod_parser.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 8;
+use MBTest tests => 9;
-use_ok 'Module::Build::PodParser';
-ensure_blib('Module::Build::PodParser');
+blib_load('Module::Build::PodParser');
#########################
@@ -66,3 +65,26 @@ EOF
}
+{
+ # Try again with mixed-case =head1s.
+ untie *FH;
+ tie *FH, 'IO::StringBased', <<'EOF';
+=head1 Name
+
+Foo::Bar - Perl extension for blah blah blah
+
+=head1 Author
+
+C<Foo::Bar> was written by Engelbert Humperdinck I<E<lt>eh@example.comE<gt>> in 2004.
+
+Home page: http://example.com/~eh/
+
+=cut
+EOF
+
+ my $pp = Module::Build::PodParser->new(fh => \*FH);
+ ok $pp, 'object created';
+
+ is $pp->get_author->[0], 'C<Foo::Bar> was written by Engelbert Humperdinck I<E<lt>eh@example.comE<gt>> in 2004.', 'author';
+ is $pp->get_abstract, 'Perl extension for blah blah blah', 'abstract';
+}
diff --git a/cpan/Module-Build/t/ppm.t b/cpan/Module-Build/t/ppm.t
index 7fb6450648..4d69c9767a 100644
--- a/cpan/Module-Build/t/ppm.t
+++ b/cpan/Module-Build/t/ppm.t
@@ -3,11 +3,10 @@
use strict;
use lib 't/lib';
use MBTest;
-
-use Module::Build;
-use Module::Build::ConfigData;
use Config;
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
my $manpage_support = Module::Build::ConfigData->feature('manpage_support');
my $HTML_support = Module::Build::ConfigData->feature('HTML_support');
@@ -26,15 +25,13 @@ my $HTML_support = Module::Build::ConfigData->feature('HTML_support');
} elsif ( $^O eq 'VMS' ) {
plan skip_all => "Needs porting work on VMS";
} else {
- plan tests => 13;
+ plan tests => 12;
}
}
-ensure_blib('Module::Build');
my $tmp = MBTest->tmpdir;
-
use DistGen;
my $dist = DistGen->new( dir => $tmp, xs => 1 );
$dist->add_file( 'hello', <<'---' );
@@ -66,7 +63,6 @@ $dist->chdir_in;
use File::Spec::Functions qw(catdir);
-use Module::Build;
my @installstyle = qw(lib perl5);
my $mb = Module::Build->new_from_context(
verbose => 0,
@@ -98,13 +94,10 @@ my $varchname = Module::Build::PPMMaker->_varchname($mb->config);
# do a strict string comparison, but absent an XML parser it's the
# best we can do.
is $ppd, <<"---";
-<SOFTPKG NAME="$dist_filename" VERSION="0,01,0,0">
- <TITLE>@{[$dist->name]}</TITLE>
+<SOFTPKG NAME="$dist_filename" VERSION="0.01">
<ABSTRACT>Perl extension for blah blah blah</ABSTRACT>
<AUTHOR>A. U. Thor, a.u.thor\@a.galaxy.far.far.away</AUTHOR>
<IMPLEMENTATION>
- <PERLCORE VERSION="$perl_version" />
- <OS NAME="$^O" />
<ARCHITECTURE NAME="$varchname" />
<CODEBASE HREF="/path/to/codebase-xs" />
</IMPLEMENTATION>
@@ -185,9 +178,6 @@ SKIP: {
}
-$dist->remove;
-
-
########################################
sub exists_ok {
diff --git a/cpan/Module-Build/t/properties/module_name.t b/cpan/Module-Build/t/properties/module_name.t
new file mode 100644
index 0000000000..c266b41ba2
--- /dev/null
+++ b/cpan/Module-Build/t/properties/module_name.t
@@ -0,0 +1,53 @@
+# sample.t -- a sample test file for Module::Build
+
+use strict;
+use lib 't/lib';
+use MBTest;
+use DistGen;
+
+plan tests => 4;
+
+# Ensure any Module::Build modules are loaded from correct directory
+blib_load('Module::Build');
+
+# enter the directory and generate the skeleton files
+my $dist = DistGen->new( name => "Not::So::Simple" )->chdir_in;
+
+#--------------------------------------------------------------------------#
+# try getting module_name from dist directory name
+#--------------------------------------------------------------------------#
+
+$dist->change_build_pl(
+ dist_name => 'Random-Name',
+ dist_version => 1,
+)->regen;
+
+my $mb = $dist->new_from_context();
+isa_ok( $mb, "Module::Build" );
+is( $mb->module_name, "Not::So::Simple",
+ "module_name guessed from directory name"
+);
+
+#--------------------------------------------------------------------------#
+# Try getting module_name from dist_version_from
+#--------------------------------------------------------------------------#
+
+$dist->add_file( 'lib/Simple/Name.pm', << 'END_PACKAGE' );
+package Simple::Name;
+our $VERSION = 1.23;
+1;
+END_PACKAGE
+
+$dist->change_build_pl(
+ dist_name => 'Random-Name',
+ dist_version_from => 'lib/Simple/Name.pm',
+ dist_abstract => "Don't complain about missing abstract",
+)->regen( clean => 1 );
+
+$mb = $dist->new_from_context();
+isa_ok( $mb, "Module::Build" );
+is( $mb->module_name, "Simple::Name",
+ "module_name guessed from dist_version_from"
+);
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/properties/needs_compiler.t b/cpan/Module-Build/t/properties/needs_compiler.t
new file mode 100644
index 0000000000..f298e82739
--- /dev/null
+++ b/cpan/Module-Build/t/properties/needs_compiler.t
@@ -0,0 +1,122 @@
+# sample.t -- a sample test file for Module::Build
+
+use strict;
+use lib 't/lib';
+use MBTest;
+use DistGen;
+
+plan tests => 19;
+
+# Ensure any Module::Build modules are loaded from correct directory
+blib_load('Module::Build');
+
+my $dist = DistGen->new->regen->chdir_in;
+
+# get a Module::Build object and test with it
+my $mb;
+stderr_of(sub {
+ ok( $mb = $dist->new_from_context, "Default Build.PL" );
+});
+
+ok( ! $mb->needs_compiler, "needs_compiler is false" );
+ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
+ "ExtUtils::CBuilder is not in build_requires"
+);
+
+#--------------------------------------------------------------------------#
+# try with c_source
+#--------------------------------------------------------------------------#
+$dist->change_build_pl({
+ module_name => $dist->name,
+ license => 'perl',
+ c_source => 'src',
+});
+$dist->regen;
+stderr_of(sub {
+ ok( $mb = $dist->new_from_context,
+ "Build.PL with c_source"
+ );
+});
+is( $mb->c_source, 'src', "c_source is set" );
+ok( $mb->needs_compiler, "needs_compiler is true" );
+ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
+ "ExtUtils::CBuilder was added to build_requires"
+);
+
+#--------------------------------------------------------------------------#
+# try with xs files
+#--------------------------------------------------------------------------#
+$dist = DistGen->new(dir => 'MBTest', xs => 1);
+$dist->regen;
+$dist->chdir_in;
+
+stderr_of(sub {
+ ok( $mb = $dist->new_from_context,
+ "Build.PL with xs files"
+ );
+});
+ok( $mb->needs_compiler, "needs_compiler is true" );
+ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
+ "ExtUtils::CBuilder was added to build_requires"
+);
+
+#--------------------------------------------------------------------------#
+# force needs_compiler off, despite xs modules
+#--------------------------------------------------------------------------#
+
+$dist->change_build_pl({
+ module_name => $dist->name,
+ license => 'perl',
+ needs_compiler => 0,
+});
+$dist->regen;
+
+stderr_of(sub {
+ ok( $mb = $dist->new_from_context ,
+ "Build.PL with xs files, but needs_compiler => 0"
+ );
+});
+is( $mb->needs_compiler, 0, "needs_compiler is false" );
+ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
+ "ExtUtils::CBuilder is not in build_requires"
+);
+
+#--------------------------------------------------------------------------#
+# don't override specific EU::CBuilder build_requires
+#--------------------------------------------------------------------------#
+
+$dist->change_build_pl({
+ module_name => $dist->name,
+ license => 'perl',
+ build_requires => { 'ExtUtils::CBuilder' => 0.2 },
+});
+$dist->regen;
+
+stderr_of(sub {
+ ok( $mb = $dist->new_from_context ,
+ "Build.PL with xs files, build_requires EU::CB 0.2"
+ );
+});
+ok( $mb->needs_compiler, "needs_compiler is true" );
+is( $mb->build_requires->{'ExtUtils::CBuilder'}, 0.2,
+ "build_requires for ExtUtils::CBuilder is correct version"
+);
+
+#--------------------------------------------------------------------------#
+# falsify compiler and test error handling
+#--------------------------------------------------------------------------#
+
+my $err = stderr_of( sub {
+ $mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } )
+});
+ok( $mb, "Build.PL while hiding compiler" );
+like( $err, qr/no compiler detected/,
+ "hidden compiler resulted in warning message during Build.PL"
+);
+eval { $mb->dispatch('build') };
+like( $@, qr/no compiler detected/,
+ "hidden compiler resulted in fatal message during Build"
+);
+
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/properties/share_dir.t b/cpan/Module-Build/t/properties/share_dir.t
new file mode 100644
index 0000000000..f781a8a7ce
--- /dev/null
+++ b/cpan/Module-Build/t/properties/share_dir.t
@@ -0,0 +1,228 @@
+#!/usr/bin/perl -w
+
+use strict;
+use lib 't/lib';
+use MBTest;
+use File::Spec::Functions qw/catdir catfile/;
+
+#--------------------------------------------------------------------------#
+# Begin testing
+#--------------------------------------------------------------------------#
+
+plan tests => 21;
+
+blib_load('Module::Build');
+
+#--------------------------------------------------------------------------#
+# Create test distribution
+#--------------------------------------------------------------------------#
+
+my $tmp = MBTest->tmpdir;
+
+use DistGen;
+my $dist = DistGen->new( dir => $tmp, name => 'Simple::Share' );
+$dist->regen;
+$dist->chdir_in;
+
+#--------------------------------------------------------------------------#
+# Test setting 'share_dir'
+#--------------------------------------------------------------------------#
+
+my $mb = $dist->new_from_context;
+
+# Test without a 'share' dir
+ok( $mb, "Created Module::Build object" );
+is( $mb->share_dir, undef,
+ "default share undef if no 'share' dir exists"
+);
+ok( ! exists $mb->{properties}{requires}{'File::ShareDir'},
+ "File::ShareDir not added to 'requires'"
+);
+
+# Add 'share' dir and an 'other' dir and content
+$dist->add_file('share/foo.txt',<< '---');
+This is foo.txt
+---
+$dist->add_file('other/share/bar.txt',<< '---');
+This is bar.txt
+---
+$dist->regen;
+ok( -e catfile(qw/share foo.txt/), "Created 'share' directory" );
+ok( -e catfile(qw/other share bar.txt/), "Created 'other/share' directory" );
+
+# Check default when share_dir is not given
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir, { dist => [ 'share' ] },
+ "Default share_dir set as dist-type share"
+);
+is( $mb->{properties}{requires}{'File::ShareDir'}, '1.00',
+ "File::ShareDir 1.00 added to 'requires'"
+);
+
+# share_dir set to scalar
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => 'share',
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir, { dist => [ 'share' ] },
+ "Scalar share_dir set as dist-type share"
+);
+
+# share_dir set to arrayref
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => [ 'share' ],
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir, { dist => [ 'share' ] },
+ "Arrayref share_dir set as dist-type share"
+);
+
+# share_dir set to hashref w scalar
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => { dist => 'share' },
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir, { dist => [ 'share' ] },
+ "Hashref share_dir w/ scalar dist set as dist-type share"
+);
+
+# share_dir set to hashref w array
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => { dist => [ 'share' ] },
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir, { dist => [ 'share' ] },
+ "Hashref share_dir w/ arrayref dist set as dist-type share"
+);
+
+# Generate a module sharedir (scalar)
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => {
+ dist => 'share',
+ module => { $dist->name => 'other/share' },
+ },
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir,
+ { dist => [ 'share' ],
+ module => { $dist->name => ['other/share'] },
+ },
+ "Hashref share_dir w/ both dist and module shares (scalar-form)"
+);
+
+# Generate a module sharedir (array)
+$dist->change_build_pl(
+ {
+ module_name => $dist->name,
+ license => 'perl',
+ share_dir => {
+ dist => [ 'share' ],
+ module => { $dist->name => ['other/share'] },
+ },
+ }
+);
+$dist->regen;
+stdout_stderr_of( sub { $mb = $dist->new_from_context });
+is_deeply( $mb->share_dir,
+ { dist => [ 'share' ],
+ module => { $dist->name => ['other/share'] },
+ },
+ "Hashref share_dir w/ both dist and module shares (array-form)"
+);
+
+#--------------------------------------------------------------------------#
+# test constructing to/from mapping
+#--------------------------------------------------------------------------#
+
+is_deeply( $mb->_find_share_dir_files,
+ {
+ catfile(qw/share foo.txt/) => catfile(qw/dist Simple-Share foo.txt/),
+ catfile(qw/other share bar.txt/) => catfile(qw/module Simple-Share bar.txt/),
+ },
+ "share_dir filemap for copying to lib complete"
+);
+
+#--------------------------------------------------------------------------#
+# test moving files to blib
+#--------------------------------------------------------------------------#
+
+$mb->dispatch('build');
+
+ok( -d 'blib', "Build ran and blib exists" );
+ok( -d 'blib/lib/auto/share', "blib/lib/auto/share exists" );
+
+my $share_list = Module::Build->rscan_dir('blib/lib/auto/share', sub {-f});
+
+is_deeply(
+ [ sort @$share_list ], [
+ 'blib/lib/auto/share/dist/Simple-Share/foo.txt',
+ 'blib/lib/auto/share/module/Simple-Share/bar.txt',
+ ],
+ "share_dir files copied to blib"
+);
+
+#--------------------------------------------------------------------------#
+# test installing
+#--------------------------------------------------------------------------#
+
+my $temp_install = 'temp_install';
+mkdir $temp_install;
+ok( -d $temp_install, "temp install dir created" );
+
+$mb->install_base($temp_install);
+stdout_of( sub { $mb->dispatch('install') } );
+
+$share_list = Module::Build->rscan_dir(
+ "$temp_install/lib/perl5/auto/share", sub {-f}
+);
+
+is_deeply(
+ [ sort @$share_list ], [
+ "$temp_install/lib/perl5/auto/share/dist/Simple-Share/foo.txt",
+ "$temp_install/lib/perl5/auto/share/module/Simple-Share/bar.txt",
+ ],
+ "share_dir files correctly installed"
+);
+
+#--------------------------------------------------------------------------#
+# test with File::ShareDir
+#--------------------------------------------------------------------------#
+
+SKIP: {
+ eval { require File::ShareDir; File::ShareDir->VERSION(1.00) };
+ skip "needs File::ShareDir 1.00", 2 if $@;
+
+ unshift @INC, File::Spec->catdir($temp_install, qw/lib perl5/);
+ require Simple::Share;
+
+ eval {File::ShareDir::dist_file('Simple-Share','foo.txt') };
+ is( $@, q{}, "Found shared dist file" );
+
+ eval {File::ShareDir::module_file('Simple::Share','bar.txt') };
+ is( $@, q{}, "Found shared module file" );
+}
diff --git a/cpan/Module-Build/t/resume.t b/cpan/Module-Build/t/resume.t
new file mode 100644
index 0000000000..add123d3d4
--- /dev/null
+++ b/cpan/Module-Build/t/resume.t
@@ -0,0 +1,43 @@
+use strict;
+use lib 't/lib';
+use MBTest;
+plan tests => 3; # or 'no_plan'
+use DistGen;
+
+# 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;
+$dist->add_file('mylib/MBUtil.pm', << "---");
+package MBUtil;
+sub foo { 42 }
+1;
+---
+
+$dist->add_file('Build.PL', << "---");
+use strict;
+use lib 'mylib';
+use MBUtil;
+use Module::Build;
+
+die unless MBUtil::foo() == 42;
+
+my \$builder = Module::Build->new(
+module_name => '$dist->{name}',
+license => 'perl',
+);
+
+\$builder->create_build_script();
+---
+
+$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( ( grep { /mylib/ } @INC ), "resume added \@INC addition to \@INC");
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/runthrough.t b/cpan/Module-Build/t/runthrough.t
index 21d3d1c113..741755c12c 100644
--- a/cpan/Module-Build/t/runthrough.t
+++ b/cpan/Module-Build/t/runthrough.t
@@ -2,12 +2,10 @@
use strict;
use lib 't/lib';
-use MBTest tests => 32;
+use MBTest tests => 30;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
-
-use Module::Build::ConfigData;
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
my $have_yaml = Module::Build::ConfigData->feature('YAML_support');
#########################
@@ -24,6 +22,9 @@ $dist->change_build_pl
requires => { 'File::Spec' => 0 },
});
+$dist->add_file( 'MANIFEST.SKIP', <<'---' );
+^MYMETA.yml$
+---
$dist->add_file( 'script', <<'---' );
#!perl -w
print "Hello, World!\n";
@@ -169,12 +170,11 @@ SKIP: {
# do a strict string comparison, but absent an XML parser it's the
# best we can do.
is $ppd, <<'EOF';
-<SOFTPKG NAME="Simple" VERSION="0,01,0,0">
- <TITLE>Simple</TITLE>
+<SOFTPKG NAME="Simple" VERSION="0.01">
<ABSTRACT>Perl extension for blah blah blah</ABSTRACT>
<AUTHOR>A. U. Thor, a.u.thor@a.galaxy.far.far.away</AUTHOR>
<IMPLEMENTATION>
- <DEPENDENCY NAME="File-Spec" VERSION="0,0,0,0" />
+ <REQUIRE NAME="File::Spec" VERSION="0" />
<CODEBASE HREF="/path/to/codebase" />
</IMPLEMENTATION>
</SOFTPKG>
@@ -189,8 +189,6 @@ ok ! -e $mb->build_script;
ok ! -e $mb->config_dir;
ok ! -e $mb->dist_dir;
-$dist->remove;
-
SKIP: {
skip( 'Windows-only test', 4 ) unless $^O =~ /^MSWin/;
@@ -223,8 +221,5 @@ echo Hello, World!
my $out = slurp( $script_file );
is $out, $script_data, ' unmodified by pl2bat';
- $dist->remove;
}
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/sample.t b/cpan/Module-Build/t/sample.t
new file mode 100644
index 0000000000..d83bc56ecc
--- /dev/null
+++ b/cpan/Module-Build/t/sample.t
@@ -0,0 +1,20 @@
+# sample.t -- a sample test file for Module::Build
+
+use strict;
+use lib 't/lib';
+use MBTest tests => 2; # or 'no_plan'
+use DistGen;
+
+# 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;
+
+# 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'" );
+
+# vim:ts=2:sw=2:et:sta:sts=2
diff --git a/cpan/Module-Build/t/script_dist.t b/cpan/Module-Build/t/script_dist.t
index e6b7fd8832..02faca0132 100644
--- a/cpan/Module-Build/t/script_dist.t
+++ b/cpan/Module-Build/t/script_dist.t
@@ -8,7 +8,8 @@ use MBTest 'no_plan';
use DistGen qw(undent);
-use Module::Build;
+blib_load('Module::Build');
+blib_load('Module::Build::ConfigData');
# XXX DistGen shouldn't be assuming module-ness?
my $dist = DistGen->new(dir => MBTest->tmpdir);
@@ -69,12 +70,11 @@ is_deeply($mb->dist_author,
['A. U. Thor, a.u.thor@a.galaxy.far.far.away']);
ok $mb->dispatch('distmeta');
-use Module::Build::ConfigData;
SKIP: {
skip( 'YAML_support feature is not enabled', 1 )
unless Module::Build::ConfigData->feature('YAML_support');
- require YAML;
- my $yml = YAML::LoadFile('META.yml');
+ require YAML::Tiny;
+ my $yml = YAML::Tiny::LoadFile('META.yml');
is_deeply($yml->{provides}, \%meta_provides);
}
$dist->chdir_original if $dist->did_chdir;
diff --git a/cpan/Module-Build/t/test_file_exts.t b/cpan/Module-Build/t/test_file_exts.t
index 9dbf73e290..5bb803c7aa 100644
--- a/cpan/Module-Build/t/test_file_exts.t
+++ b/cpan/Module-Build/t/test_file_exts.t
@@ -2,11 +2,10 @@
use strict;
use lib 't/lib';
-use MBTest tests => 5;
+use MBTest tests => 3;
use DistGen;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
my $dist = DistGen->new( dir => $tmp );
@@ -39,7 +38,4 @@ my $out = uc(stdout_of(
like $out, qr/^OK 1 - FIRST MYTEST[.]S/m, 'Should see first test output';
like $out, qr/^OK 2 - SECOND MYTEST[.]S/m, 'Should see second test output';
-# Cleanup.
-$dist->remove;
-
# vim:ts=4:sw=4:et:sta
diff --git a/cpan/Module-Build/t/test_type.t b/cpan/Module-Build/t/test_type.t
index 3c6cfb61e4..fe4d599d72 100644
--- a/cpan/Module-Build/t/test_type.t
+++ b/cpan/Module-Build/t/test_type.t
@@ -9,10 +9,9 @@ BEGIN {
use strict;
use lib 't/lib';
-use MBTest tests => 9;
+use MBTest tests => 7;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -72,6 +71,4 @@ like($output, qr/\.\. ?OK/);
is($::x, 3, "called a third time");
-$dist->remove;
-
# vim:ts=4:sw=4:et:sta
diff --git a/cpan/Module-Build/t/test_types.t b/cpan/Module-Build/t/test_types.t
index 5f3f5cff8d..d88e215aa3 100644
--- a/cpan/Module-Build/t/test_types.t
+++ b/cpan/Module-Build/t/test_types.t
@@ -2,16 +2,13 @@
use strict;
use lib 't/lib';
-use MBTest tests => 15 + 12;
+use MBTest tests => 25;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
-
-my $tmp = MBTest->tmpdir;
+blib_load('Module::Build');
use DistGen;
-my $dist = DistGen->new(dir => $tmp);
+my $dist = DistGen->new()->chdir_in;
$dist->add_file('t/special_ext.st', <<'---');
#!perl
@@ -34,7 +31,6 @@ die "don't run this non-test file";
---
$dist->regen;
-$dist->chdir_in;
#########################
my $mb = Module::Build->subclass(
@@ -98,10 +94,10 @@ is(scalar(@{[$all_output =~ m/OK 1/mg]}), 3 );
is(scalar(@{[$all_output =~ m/OK/mg]}), 8 );
is(scalar(@{[$all_output =~ m/ALL TESTS SUCCESSFUL\./mg]}), 1);
-$dist->remove;
-
{ # once-again
+$dist->revert;
+
$dist->add_file('t/foo/special.st', <<'---');
#!perl
use Test::More tests => 2;
@@ -114,7 +110,6 @@ use strict; use Simple;
ok 1;
---
$dist->regen;
-$dist->chdir_in;
my $mb = Module::Build->subclass(
code => q#
@@ -174,7 +169,6 @@ like($all_output, qr/^OK 2 - SECOND TEST IN ANOTHER_EXT/m);
is(scalar(@{[$all_output =~ m/(OK 1)/mg]}), 5 );
is(scalar(@{[$all_output =~ m/(OK)/mg]}), 13 );
-$dist->remove;
} # end once-again
# vim:ts=4:sw=4:et:sta
diff --git a/cpan/Module-Build/t/tilde.t b/cpan/Module-Build/t/tilde.t
index 5b39204171..692ade0c8a 100644
--- a/cpan/Module-Build/t/tilde.t
+++ b/cpan/Module-Build/t/tilde.t
@@ -4,10 +4,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 18;
+use MBTest tests => 16;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -111,6 +110,3 @@ SKIP: {
like( run_sample( $p => "~$me/foo")->$p(), qr($expected)i );
}
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/use_tap_harness.t b/cpan/Module-Build/t/use_tap_harness.t
index d14cb052ba..f6e7e5073a 100644
--- a/cpan/Module-Build/t/use_tap_harness.t
+++ b/cpan/Module-Build/t/use_tap_harness.t
@@ -4,7 +4,7 @@ use strict;
use Test::More;
use lib 't/lib';
if (eval { require TAP::Harness } && TAP::Harness->VERSION >= 3) {
- plan tests => 8;
+ plan tests => 9;
} else {
plan skip_all => 'TAP::Harness 3+ not installed'
}
@@ -12,21 +12,24 @@ if (eval { require TAP::Harness } && TAP::Harness->VERSION >= 3) {
use MBTest;
use DistGen;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
my $dist = DistGen->new( dir => $tmp );
$dist->regen;
-
$dist->chdir_in;
+
#########################
# Make sure that TAP::Harness properly does its thing.
-ok my $mb = Module::Build->new(
+$dist->change_build_pl(
module_name => $dist->name,
use_tap_harness => 1,
quiet => 1,
-), 'Construct build object with test_file_exts parameter';
+);
+$dist->regen;
+
+ok my $mb = $dist->new_from_context,
+ 'Construct build object with test_file_exts parameter';
$mb->add_to_cleanup('save_out');
# Use uc() so we don't confuse the current test output
@@ -40,12 +43,16 @@ like $out, qr/^ALL TESTS SUCCESSFUL/m, 'Should see test success message';
#########################
# Make sure that arguments are passed through to TAP::Harness.
-ok $mb = Module::Build->new(
+$dist->change_build_pl(
module_name => $dist->name,
use_tap_harness => 1,
tap_harness_args => { verbosity => 0 },
quiet => 1,
-), 'Construct build object with test_file_exts parameter';
+);
+$dist->regen;
+
+ok $mb = $dist->new_from_context,
+ 'Construct build object with test_file_exts parameter';
$mb->add_to_cleanup('save_out');
# Use uc() so we don't confuse the current test output
@@ -56,6 +63,32 @@ $out = uc(stdout_of(
unlike $out, qr/^OK 1/m, 'Should not see first test output';
like $out, qr/^ALL TESTS SUCCESSFUL/m, 'Should see test success message';
-$dist->remove;
+#--------------------------------------------------------------------------#
+# test that a failing test dies
+#--------------------------------------------------------------------------#
+
+$dist->change_build_pl(
+ module_name => $dist->name,
+ use_tap_harness => 1,
+ tap_harness_args => { verbosity => 1 },
+ quiet => 1,
+);
+$dist->change_file('t/basic.t',<<"---");
+use Test::More tests => 1;
+use strict;
+
+use $dist->{name};
+ok 0;
+---
+$dist->regen;
+
+ok $mb = $dist->new_from_context,
+ 'Construct build object after setting tests to fail';
+# Use uc() so we don't confuse the current test output
+$out = stdout_stderr_of( sub { $dist->run_build('test')} );
+ok( $?, "'Build test' had non-zero exit code" );
+like( $out, qr{Errors in testing\. Cannot continue\.},
+ "Saw emulated Test::Harness die() message"
+);
# vim:ts=4:sw=4:et:sta
diff --git a/cpan/Module-Build/t/versions.t b/cpan/Module-Build/t/versions.t
index 7f511e58f6..5eafbac297 100644
--- a/cpan/Module-Build/t/versions.t
+++ b/cpan/Module-Build/t/versions.t
@@ -2,10 +2,9 @@
use strict;
use lib 't/lib';
-use MBTest tests => 4;
+use MBTest tests => 2;
-use_ok 'Module::Build';
-ensure_blib('Module::Build');
+blib_load('Module::Build');
my $tmp = MBTest->tmpdir;
@@ -20,7 +19,3 @@ my $file = File::Spec->catfile( $dist->dirname, 'lib', @mod ) . '.pm';
is( Module::Build->version_from_file( $file ), '0.01', 'version_from_file' );
ok( Module::Build->compare_versions( '1.01_01', '>', '1.01' ), 'compare: 1.0_01 > 1.0' );
-
-
-# cleanup
-$dist->remove;
diff --git a/cpan/Module-Build/t/write_default_maniskip.t b/cpan/Module-Build/t/write_default_maniskip.t
index 084d81ed3e..40389f20dc 100644
--- a/cpan/Module-Build/t/write_default_maniskip.t
+++ b/cpan/Module-Build/t/write_default_maniskip.t
@@ -8,14 +8,14 @@ use MBTest 'no_plan';
use DistGen;
use Cwd;
-use_ok 'Module::Build';
-ensure_blib 'Module::Build';
+blib_load('Module::Build');
{
my $cwd = Cwd::cwd;
chdir MBTest->tmpdir();
my $build = Module::Build->new(
+ module_name => "Foo::Bar",
dist_name => "Foo-Bar",
dist_version => '1.23',
);
diff --git a/cpan/Module-Build/t/xs.t b/cpan/Module-Build/t/xs.t
index e3f1ed7dd1..6d167c8539 100644
--- a/cpan/Module-Build/t/xs.t
+++ b/cpan/Module-Build/t/xs.t
@@ -3,11 +3,12 @@
use strict;
use lib 't/lib';
use MBTest;
-use Module::Build;
use Config;
my $tmp;
+blib_load('Module::Build');
+
{
my ($have_c_compiler, $C_support_feature, $tmp_exec) = check_compiler();
@@ -20,24 +21,20 @@ my $tmp;
} elsif ( !$Config{usedl} ) {
plan skip_all => 'Perl not compiled for dynamic loading'
} else {
- plan tests => 23;
+ plan tests => 20;
}
require Cwd;
$tmp = MBTest->tmpdir( $tmp_exec ? undef : Cwd::cwd );
}
-ensure_blib('Module::Build');
#########################
use DistGen;
-my $dist = DistGen->new( dir => $tmp, xs => 1 );
-$dist->regen;
-
-$dist->chdir_in;
-my $mb = Module::Build->new_from_context;
+my $dist = DistGen->new( dir => $tmp, xs => 1 )->chdir_in->regen;
+my $mb = $dist->new_from_context;
eval {$mb->dispatch('clean')};
is $@, '';
@@ -83,7 +80,7 @@ is $@, '';
# We can't be verbose in the sub-test, because Test::Harness will
# think that the output is for the top-level test.
-eval {$mb->dispatch('test')};
+stdout_stderr_of( sub { eval {$mb->dispatch('test')} });
is $@, '';
eval {$mb->dispatch('clean')};
@@ -106,42 +103,31 @@ is $@, '';
# Make sure blib/ is gone after 'realclean'
ok ! -e 'blib';
-
-# cleanup
-$dist->remove;
-
-
########################################
# Try a XS distro with a deep namespace
-$dist = DistGen->new( name => 'Simple::With::Deep::Name',
- dir => $tmp, xs => 1 );
-$dist->regen;
-$dist->chdir_in;
-$mb = Module::Build->new_from_context;
-is $@, '';
+$dist->reset( name => 'Simple::With::Deep::Name', dir => $tmp, xs => 1 );
+$dist->chdir_in->regen;
-$mb->dispatch('build');
-is $@, '';
+$mb = $dist->new_from_context;
-$mb->dispatch('test');
+eval { $mb->dispatch('build') };
is $@, '';
-$mb->dispatch('realclean');
+stdout_stderr_of( sub { eval { $mb->dispatch('test') } } );
is $@, '';
-# cleanup
-$dist->remove;
-
+eval { $mb->dispatch('realclean') };
+is $@, '';
########################################
# Try a XS distro using a flat directory structure
# and a 'dist_name' instead of a 'module_name'
-$dist = DistGen->new( name => 'Dist-Name', dir => $tmp, xs => 1 );
+$dist->reset( name => 'Dist-Name', dir => $tmp, xs => 1 )->chdir_in;
$dist->remove_file('lib/Dist-Name.pm');
$dist->remove_file('lib/Dist-Name.xs');
@@ -211,20 +197,15 @@ ok( Simple::okay() eq 'ok' );
---
$dist->regen;
-$dist->chdir_in;
-
-$mb = Module::Build->new_from_context;
-is $@, '';
+$mb = $dist->new_from_context;
-$mb->dispatch('build');
+eval { $mb->dispatch('build') };
is $@, '';
-$mb->dispatch('test');
+stdout_of( sub { eval { $mb->dispatch('test') } } );
is $@, '';
-$mb->dispatch('realclean');
+eval { $mb->dispatch('realclean') };
is $@, '';
-# cleanup
-$dist->remove;