# t/32_make-defaults-alt.t # tests of options to make modulemaker selections default personal values # where the directory tree needed to store Personal::Defaults does not fully # exist use strict; use warnings; use Carp; use Cwd; use File::Spec; use File::Path 2.15 qw(remove_tree); use File::Temp qw(tempdir); use Test::More tests => 48; use_ok( 'ExtUtils::ModuleMaker' ); use_ok( 'ExtUtils::ModuleMaker::Auxiliary', qw( prepare_mockdirs prepare_mock_homedir compact_build_tests read_file_string check_MakefilePL ) ); =pod Objective in this file is to exercise the part of C starting at: if (! -d $full_dir) { Here, C<$full_dir()> would be FmockhomeE/.modulemaker/ExtUtils/ModuleMaker/Personal/>. The approach to testing used in this version of EUMM, centered in C auto-creates this directory. Hence, we have to remove part of this directory if we're to exercise this section of C. =cut my $cwd = cwd(); my ($home_dir) = prepare_mock_homedir(); local $ENV{HOME} = $home_dir; my $mmkr_dir = File::Spec->catdir($home_dir, '.modulemaker'); for my $d ($home_dir, $mmkr_dir) { ok(-d $d, "$d has been created"); } opendir my $DIRH, $mmkr_dir or croak "Unable to open dirhandle"; my @entries = grep { ! m/^\.{1,2}$/ } readdir $DIRH; closedir $DIRH or croak "Unable to close dirhandle"; cmp_ok(@entries, '==', 1, "$mmkr_dir starts out with one entry"); my $topdir = File::Spec->catdir($mmkr_dir, $entries[0]); ok(-d $topdir, "$topdir is underneath $mmkr_dir"); my $removed_count = remove_tree($topdir, { error => \my $err_list, safe => 1, }); is($removed_count, 3, "Removed 'ExtUtils/ModuleMaker/Personal'"); ok(! -d $topdir, "$topdir has been deleted"); ok(-d $mmkr_dir, "$mmkr_dir still exists"); { my ($module_name, @components, $dist_name, $path_str); my ($module_file, $test_file); my ($mkfl, $bigstr); my $tdir = tempdir( CLEANUP => 1); ok(chdir $tdir, 'changed to temp directory for testing'); @components = qw( Alpha Beta Gamma ); $module_name = join('::' => @components); $dist_name = join('-' => @components); $path_str = File::Spec->catdir(@components); my $abstract = "Test make_selections_defaults()"; my $author = 'Chango Ta Beni'; my $email = 'chango_ta_beni@example.com'; my $obj1 = ExtUtils::ModuleMaker->new( NAME => $module_name, ABSTRACT => $abstract, COMPACT => 1, AUTHOR => $author, EMAIL => $email, SAVE_AS_DEFAULTS => 1, ); isa_ok( $obj1, 'ExtUtils::ModuleMaker' ); ok( $obj1->complete_build(), 'call complete_build()' ); ($module_file, $test_file) = compact_build_tests(\@components); $mkfl = File::Spec->catfile( $dist_name, q{Makefile.PL} ); ok(-f $mkfl, "Located Makefile.PL"); $bigstr = read_file_string($mkfl); like($bigstr, qr/NAME\s+=>\s+'$module_name/s, "Got NAME as expected"); like($bigstr, qr/ABSTRACT\s+=>\s+'$abstract/s, "Got ABSTRACT as expected"); like($bigstr, qr/AUTHOR\s+=>\s+'$author\s+\($email\)'/s, "Got AUTHOR and EMAIL as expected"); # Create a new instance which we expect will have:: # (a) a compact top-level directory, # (b) author and email as in first instance, automatically populated, # (c) EUMM default abstract. my $obj2 = ExtUtils::ModuleMaker->new( NAME => q{Ackus::Frackus}, ); isa_ok( $obj2, 'ExtUtils::ModuleMaker' ); ok( $obj2->complete_build(), 'call complete_build()' ); $module_name = $obj2->{NAME}; @components = split(/::/, $module_name); $dist_name = join('-' => @components); $path_str = File::Spec->catdir(@components); $module_file = File::Spec->catfile( 'lib', @components[0 .. ($#components - 1)], "$components[-1].pm"); ($module_file, $test_file) = compact_build_tests(\@components); $mkfl = File::Spec->catfile( $dist_name, q{Makefile.PL} ); ok(-f $mkfl, "Located Makefile.PL"); $bigstr = read_file_string($mkfl); like($bigstr, qr/NAME\s+=>\s+'$module_name/s, "Got NAME as expected"); unlike($bigstr, qr/ABSTRACT\s+=>\s+'$abstract/s, "Got ABSTRACT different from first object"); like($bigstr, qr/AUTHOR\s+=>\s+'$author\s+\($email\)'/s, "Got AUTHOR and EMAIL as expected"); ok(chdir $cwd, 'back to where we stared'); }