summaryrefslogtreecommitdiff
path: root/lib/CPANPLUS/t/25_CPANPLUS.t
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CPANPLUS/t/25_CPANPLUS.t')
-rw-r--r--lib/CPANPLUS/t/25_CPANPLUS.t90
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/CPANPLUS/t/25_CPANPLUS.t b/lib/CPANPLUS/t/25_CPANPLUS.t
new file mode 100644
index 0000000000..9cbd15c7e3
--- /dev/null
+++ b/lib/CPANPLUS/t/25_CPANPLUS.t
@@ -0,0 +1,90 @@
+### 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" );
+}
+