summaryrefslogtreecommitdiff
path: root/t/zz.exceptions.t
diff options
context:
space:
mode:
Diffstat (limited to 't/zz.exceptions.t')
-rw-r--r--t/zz.exceptions.t172
1 files changed, 172 insertions, 0 deletions
diff --git a/t/zz.exceptions.t b/t/zz.exceptions.t
new file mode 100644
index 0000000..f90c9de
--- /dev/null
+++ b/t/zz.exceptions.t
@@ -0,0 +1,172 @@
+use Test::More;
+
+BEGIN {
+ eval "use Test::Exception";
+
+ plan skip_all => "Test Exceptions required to test croaks" if $@;
+ plan tests => 12;
+}
+
+use CPAN::Mini::Inject;
+use File::Path;
+use Env;
+use lib 't/lib';
+
+sub chkcfg {
+ return 1 if ( -r '/usr/local/etc/mcpani' );
+ return 1 if ( -r '/etc/mcpani' );
+}
+
+my $prevhome;
+if ( defined( $ENV{HOME} ) ) {
+ $prevhome = $ENV{HOME};
+ delete $ENV{HOME};
+}
+
+my $mcpanienv;
+if ( defined( $ENV{MCPANI_CONFIG} ) ) {
+ $mcpanienv = $ENV{MCPANI_CONFIG};
+ delete $ENV{MCPANI_CONFIG};
+}
+
+# loadcfg()
+SKIP: {
+ skip 'Config file exists', 1 if chkcfg();
+ my $mcpi = CPAN::Mini::Inject->new;
+ dies_ok { $mcpi->loadcfg } 'No config file';
+}
+
+{
+ # parsecfg()
+ my $mcpi = CPAN::Mini::Inject->new;
+ dies_ok { $mcpi->parsecfg( 't/.mcpani/config_bad' ); }
+ 'Missing config option';
+}
+
+# readlist()
+SKIP: {
+ skip 'User is superuser and can always read', 1 if $< == 0;
+ skip 'User is generally superuser under cygwin and can read', 1 if $^O eq 'cygwin';
+
+ my $mcpi = CPAN::Mini::Inject->new;
+
+ rmtree( ['t/local/MYCPAN/modulelist'], 0, 1 );
+ mkdir 't/local/MYCPAN';
+ $mcpi->parsecfg( 't/.mcpani/config_noread' );
+ dies_ok { $mcpi->readlist } 'unreadable file';
+ rmtree( ['t/local/MYCPAN/modulelist'], 0, 1 );
+}
+
+{
+ my $mcpi = CPAN::Mini::Inject->new;
+ $mcpi->parsecfg( 't/.mcpani/config' );
+
+ # add()
+ dies_ok {
+ $mcpi->add(
+ module => 'CPAN::Mini::Inject',
+ authorid => 'SSORICHE',
+ version => '0.01'
+ );
+ }
+ 'Missing add param';
+
+ dies_ok {
+ $mcpi->add(
+ module => 'CPAN::Mini::Inject',
+ authorid => 'SSORICHE',
+ version => '0.01',
+ file => 'blahblah'
+ );
+ }
+ 'Module file not readable';
+
+ lives_ok {
+ $mcpi->add(
+ authorid => 'RWSTAUNER',
+ file => 't/local/mymodules/Dist-Metadata-Test-MetaFile-Only.tar.gz'
+ );
+ }
+ 'Ok without module/version when discoverable';
+
+ lives_ok {
+ $mcpi->add(
+ module => 'Who::Cares',
+ version => '1',
+ authorid => 'RWSTAUNER',
+ file => 't/local/mymodules/not-discoverable.tar.gz'
+ );
+ }
+ 'Ok without module/version when specified';
+
+ dies_ok {
+ $mcpi->add(
+ authorid => 'RWSTAUNER',
+ file => 't/local/mymodules/not-discoverable.tar.gz'
+ );
+ }
+ 'Dies without module/version when not discoverable';
+}
+
+{
+ my $mcpi = CPAN::Mini::Inject->new;
+ $mcpi->parsecfg( 't/.mcpani/config_norepo' );
+
+ dies_ok {
+ $mcpi->add(
+ module => 'CPAN::Mini::Inject',
+ authorid => 'SSORICHE',
+ version => '0.01',
+ file => 'test-0.01.tar.gz'
+ );
+ }
+ 'Missing config repository';
+
+}
+
+SKIP: {
+ skip "We don't have a r/o repo", 2;
+ my $mcpi = CPAN::Mini::Inject->new;
+ $mcpi->parsecfg( 't/.mcpani/config_read' );
+
+ dies_ok {
+ $mcpi->add(
+ module => 'CPAN::Mini::Inject',
+ authorid => 'SSORICHE',
+ version => '0.01',
+ file => 'test-0.01.tar.gz'
+ );
+ }
+ 'read-only repository';
+
+ $mcpi->{config}{remote} = "ftp://blahblah http://blah blah";
+ dies_ok { $mcpi->testremote } 'No reachable site';
+
+}
+
+# writelist()
+SKIP: {
+ skip 'User is superuser and can always write', 1 if $< == 0;
+ skip 'User is generally superuser under cygwin and can write', 1 if $^O eq 'cygwin';
+
+ my $mcpi = CPAN::Mini::Inject->new;
+ rmtree( ['t/local/MYCPAN/modulelist'], 0, 1 );
+ mkdir 't/local/MYCPAN';
+ $mcpi->parsecfg( 't/.mcpani/config_nowrite' );
+ dies_ok { $mcpi->writelist } 'fail write file';
+ rmtree( ['t/local/MYCPAN/modulelist'], 0, 1 );
+}
+
+# Setup routines
+sub genmodlist {
+ open( MODLIST, '>t/local/MYCPAN/modulelist' )
+ or die "Can not create t/local/MYCPAN/modulelist: $!";
+ print MODLIST << "EOF"
+CPAN::Checksums 1.016 A/AN/ANDK/CPAN-Checksums-1.016.tar.gz
+CPAN::Mini 0.18 R/RJ/RJBS/CPAN-Mini-0.18.tar.gz
+CPANPLUS 0.0499 A/AU/AUTRIJUS/CPANPLUS-0.0499.tar.gz
+EOF
+ ;
+ close( MODLIST );
+}
+