### make sure we can find our conf.pl file
BEGIN {
use FindBin;
require "$FindBin::Bin/inc/conf.pl";
}
use strict;
use Test::More 'no_plan';
use CPANPLUS::Error;
use CPANPLUS::Backend;
my $Class = 'CPANPLUS';
my $ModName = TEST_CONF_MODULE;
my $Conf = gimme_conf();
my $CB = CPANPLUS::Backend->new( $Conf );
### so we get an object with *our* configuration
no warnings 'redefine';
local *CPANPLUS::Backend::new = sub { $CB };
use_ok( $Class );
### install / get / fetch tests
for my $meth ( qw[fetch get install] ) {
my $sub = $Class->can( $meth );
ok( $sub, "$Class->can( $meth )" );
my %map = (
0 => qr/failed/,
1 => qr/successful/,
);
ok( 1, "Trying '$meth' in different configurations" );
while( my($rv, $re) = each %map ) {
### don't actually install, just test logic
no warnings 'redefine';
local *CPANPLUS::Module::install = sub { $rv };
local *CPANPLUS::Module::fetch = sub { $rv };
CPANPLUS::Error->flush;
my $ok = $sub->( $ModName );
is( $ok, $rv, " Expected RV: $rv" );
like( CPANPLUS::Error->stack_as_string, $re,
" With expected diagnostic" );
}
### does not take objects / references
{ CPANPLUS::Error->flush;
my $ok = $sub->( [] );
ok( !$ok, "'$meth' with reference does not work" );
like( CPANPLUS::Error->stack_as_string, qr/object/,
" Error as expected");
}
### requires argument
{ CPANPLUS::Error->flush;
my $ok = $sub->( );
ok( !$ok, "'$meth' without argument does not work" );
like( CPANPLUS::Error->stack_as_string, qr/No module specified/,
" Error as expected");
}
}
### shell tests
{ my $meth = 'shell';
my $sub = $Class->can( $meth );
ok( $sub, "$Class->can( $meth )" );
{ ### test package for shell() method
package CPANPLUS::Shell::Test;
### ->shell() looks in %INC
use Module::Loaded qw[mark_as_loaded];
mark_as_loaded( __PACKAGE__ );
sub new { bless {}, __PACKAGE__ };
sub shell { $$ };
}
my $rv = $sub->( 'Test' );
ok( $rv, " Shell started" );
is( $rv, $$, " Proper shell called" );
}