summaryrefslogtreecommitdiff
path: root/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2009-09-26 10:22:25 +0100
committerNicholas Clark <nick@ccl4.org>2009-09-26 10:22:25 +0100
commit4234ebd9a0ef45b17e00dd4cc8b1cd74492ec3e9 (patch)
tree3d2542d725be84a7dddc4cd8868b3a5d785e3203 /cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
parent6df60a5f39f3b9b890df28f39ad92c2ffd598e40 (diff)
downloadperl-4234ebd9a0ef45b17e00dd4cc8b1cd74492ec3e9.tar.gz
Move CPANPLUS from ext/ to cpan/
Diffstat (limited to 'cpan/CPANPLUS/t/08_CPANPLUS-Backend.t')
-rw-r--r--cpan/CPANPLUS/t/08_CPANPLUS-Backend.t370
1 files changed, 370 insertions, 0 deletions
diff --git a/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t b/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
new file mode 100644
index 0000000000..73611e872b
--- /dev/null
+++ b/cpan/CPANPLUS/t/08_CPANPLUS-Backend.t
@@ -0,0 +1,370 @@
+### 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 File::Basename 'dirname';
+
+use Data::Dumper;
+use CPANPLUS::Error;
+use CPANPLUS::Internals::Constants;
+
+my $conf = gimme_conf();
+
+my $Class = 'CPANPLUS::Backend';
+### D::C has troubles with the 'use_ok' -- it finds the wrong paths.
+### for now, do a 'use' instead
+#use_ok( $Class ) or diag "$Class not found";
+use CPANPLUS::Backend;
+
+my $cb = $Class->new( $conf );
+isa_ok( $cb, $Class );
+
+my $mt = $cb->module_tree;
+my $at = $cb->author_tree;
+ok( scalar keys %$mt, "Module tree has entries" );
+ok( scalar keys %$at, "Author tree has entries" );
+
+### module_tree tests ###
+my $Name = TEST_CONF_MODULE;
+my $mod = $cb->module_tree($Name);
+
+### XXX SOURCEFILES FIX
+{ my @mods = $cb->module_tree($Name,$Name);
+ my $none = $cb->module_tree( TEST_CONF_INVALID_MODULE );
+
+ ok( IS_MODOBJ->(mod => $mod), "Module object found" );
+ is( scalar(@mods), 2, " Module list found" );
+ ok( IS_MODOBJ->(mod => $mods[0]), " ISA module object" );
+ ok( !IS_MODOBJ->(mod => $none), " Bogus module detected");
+}
+
+### author_tree tests ###
+{ my @auths = $cb->author_tree( $mod->author->cpanid,
+ $mod->author->cpanid );
+ my $none = $cb->author_tree( 'fnurk' );
+
+ ok( IS_AUTHOBJ->(auth => $mod->author), "Author object found" );
+ is( scalar(@auths), 2, " Author list found" );
+ ok( IS_AUTHOBJ->( author => $auths[0] )," ISA author object" );
+ is( $mod->author, $auths[0], " Objects are identical" );
+ ok( !IS_AUTHOBJ->( author => $none ), " Bogus author detected" );
+}
+
+my $conf_obj = $cb->configure_object;
+ok( IS_CONFOBJ->(conf => $conf_obj), "Configure object found" );
+
+
+### parse_module tests ###
+{ my @map = (
+ $Name => [
+ $mod->author->cpanid, # author
+ $mod->package_name, # package name
+ $mod->version, # version
+ ],
+ $mod => [
+ $mod->author->cpanid,
+ $mod->package_name,
+ $mod->version,
+ ],
+ 'Foo-Bar-EU-NOXS' => [
+ $mod->author->cpanid,
+ $mod->package_name,
+ $mod->version,
+ ],
+ 'Foo-Bar-EU-NOXS-0.01' => [
+ $mod->author->cpanid,
+ $mod->package_name,
+ '0.01',
+ ],
+ 'EUNOXS/Foo-Bar-EU-NOXS' => [
+ 'EUNOXS',
+ $mod->package_name,
+ $mod->version,
+ ],
+ 'EUNOXS/Foo-Bar-EU-NOXS-0.01' => [
+ 'EUNOXS',
+ $mod->package_name,
+ '0.01',
+ ],
+ ### existing module, no extension given
+ ### this used to create a modobj with no package extension
+ 'EUNOXS/Foo-Bar-0.02' => [
+ 'EUNOXS',
+ 'Foo-Bar',
+ '0.02',
+ ],
+ 'Foo-Bar-EU-NOXS-0.09' => [
+ $mod->author->cpanid,
+ $mod->package_name,
+ '0.09',
+ ],
+ 'MBXS/Foo-Bar-EU-NOXS-0.01' => [
+ 'MBXS',
+ $mod->package_name,
+ '0.01',
+ ],
+ 'EUNOXS/Foo-Bar-EU-NOXS-0.09' => [
+ 'EUNOXS',
+ $mod->package_name,
+ '0.09',
+ ],
+ 'EUNOXS/Foo-Bar-EU-NOXS-0.09.zip' => [
+ 'EUNOXS',
+ $mod->package_name,
+ '0.09',
+ ],
+ 'FROO/Flub-Flob-1.1.zip' => [
+ 'FROO',
+ 'Flub-Flob',
+ '1.1',
+ ],
+ 'G/GO/GOYALI/SMS_API_3_01.tar.gz' => [
+ 'GOYALI',
+ 'SMS_API',
+ '3_01',
+ ],
+ 'E/EY/EYCK/Net/Lite/Net-Lite-FTP-0.091' => [
+ 'EYCK',
+ 'Net-Lite-FTP',
+ '0.091',
+ ],
+ 'EYCK/Net/Lite/Net-Lite-FTP-0.091' => [
+ 'EYCK',
+ 'Net-Lite-FTP',
+ '0.091',
+ ],
+ 'M/MA/MAXDB/DBD-MaxDB-7.5.0.24a' => [
+ 'MAXDB',
+ 'DBD-MaxDB',
+ '7.5.0.24a',
+ ],
+ 'EUNOXS/perl5.005_03.tar.gz' => [
+ 'EUNOXS',
+ 'perl',
+ '5.005_03',
+ ],
+ 'FROO/Flub-Flub-v1.1.0.tbz' => [
+ 'FROO',
+ 'Flub-Flub',
+ 'v1.1.0',
+ ],
+ 'FROO/Flub-Flub-1.1_2.tbz' => [
+ 'FROO',
+ 'Flub-Flub',
+ '1.1_2',
+ ],
+ 'LDS/CGI.pm-3.27.tar.gz' => [
+ 'LDS',
+ 'CGI',
+ '3.27',
+ ],
+ 'FROO/Text-Tabs+Wrap-2006.1117.tar.gz' => [
+ 'FROO',
+ 'Text-Tabs+Wrap',
+ '2006.1117',
+ ],
+ 'JETTERO/Crypt-PBC-0.7.20.0-0.4.9' => [
+ 'JETTERO',
+ 'Crypt-PBC',
+ '0.7.20.0-0.4.9' ,
+ ],
+ 'GRICHTER/HTML-Embperl-1.2.1.tar.gz' => [
+ 'GRICHTER',
+ 'HTML-Embperl',
+ '1.2.1',
+ ],
+ 'KANE/File-Fetch-0.15_03' => [
+ 'KANE',
+ 'File-Fetch',
+ '0.15_03',
+ ],
+ 'AUSCHUTZ/IO-Stty-.02.tar.gz' => [
+ 'AUSCHUTZ',
+ 'IO-Stty',
+ '.02',
+ ],
+ '.' => [
+ 'CPANPLUS',
+ 't',
+ '',
+ ],
+ );
+
+ while ( my($guess, $attr) = splice @map, 0, 2 ) {
+ my( $author, $pkg_name, $version ) = @$attr;
+
+ ok( $guess, "Attempting to parse $guess" );
+
+ my $obj = $cb->parse_module( module => $guess );
+
+ ok( $obj, " Result returned" );
+ ok( IS_MODOBJ->( mod => $obj ),
+ " parse_module success by '$guess'" );
+
+ is( $obj->version, $version,
+ " Proper version found: $version" );
+ is( $obj->package_version, $version,
+ " Found in package_version as well" );
+
+ ### VMS doesn't preserve case, so match them after normalizing case
+ is( uc($obj->package_name), uc($pkg_name),
+ " Proper package_name found: $pkg_name" );
+ unlike( $obj->package_name, qr/\d/,
+ " No digits in package name" );
+ { my $ext = $obj->package_extension;
+ ok( $ext, " Has extension as well: $ext" );
+ }
+
+ like( $obj->author->cpanid, "/$author/i",
+ " Proper author found: $author");
+ like( $obj->path, "/$author/i",
+ " Proper path found: " . $obj->path );
+ }
+
+
+ ### test for things that look like real modules, but aren't ###
+ { my @map = (
+ [ $Name . $$ => [
+ [qr/does not contain an author/,"Missing author part detected"],
+ [qr/Cannot find .+? in the module tree/,"Unable to find module"]
+ ] ],
+ [ {}, => [
+ [ qr/module string from reference/,"Unable to parse ref"]
+ ] ],
+ );
+
+ for my $entry ( @map ) {
+ my($mod,$aref) = @$entry;
+
+ my $none = $cb->parse_module( module => $mod );
+ ok( !IS_MODOBJ->(mod => $none),
+ "Non-existant module detected" );
+ ok( !IS_FAKE_MODOBJ->(mod => $none),
+ "Non-existant fake module detected" );
+
+ my $str = CPANPLUS::Error->stack_as_string;
+ for my $pair (@$aref) {
+ my($re,$diag) = @$pair;
+ like( $str, $re," $diag" );
+ }
+ }
+ }
+
+ ### test parsing of arbitrary URI
+ for my $guess ( qw[ http://foo/bar.gz
+ http://a/b/c/d/e/f/g/h/i/j
+ flub://floo ]
+ ) {
+ my $obj = $cb->parse_module( module => $guess );
+ ok( IS_FAKE_MODOBJ->(mod => $obj),
+ "parse_module success by '$guess'" );
+ is( $obj->status->_fetch_from, $guess,
+ " Fetch from set ok" );
+ }
+}
+
+### RV tests ###
+{ my $method = 'readme';
+ my %args = ( modules => [$Name] );
+
+ my $rv = $cb->$method( %args );
+ ok( IS_RVOBJ->( $rv ), "Got an RV object" );
+ ok( $rv->ok, " Overall OK" );
+ cmp_ok( $rv, '==', 1, " Overload OK" );
+ is( $rv->function, $method, " Function stored OK" );
+ is_deeply( $rv->args, \%args, " Arguments stored OK" );
+ is( $rv->rv->{$Name}, $mod->readme, " RV as expected" );
+}
+
+### reload_indices tests ###
+{
+ my $file = File::Spec->catfile( $conf->get_conf('base'),
+ $conf->_get_source('mod'),
+ );
+
+ ok( $cb->reload_indices( update_source => 0 ), "Rebuilding trees" );
+ my $age = -M $file;
+
+ ### make sure we are 'newer' on faster machines with a sleep..
+ ### apparently Win32's FAT isn't granual enough on intervals
+ ### < 2 seconds, so it may give the same answer before and after
+ ### the sleep, causing the test to fail. so sleep atleast 2 seconds.
+ sleep 2;
+ ok( $cb->reload_indices( update_source => 1 ),
+ "Rebuilding and refetching trees" );
+ cmp_ok( $age, '>', -M $file, " Source file '$file' updated" );
+}
+
+### flush tests ###
+{
+ for my $cache( qw[methods hosts modules lib all] ) {
+ ok( $cb->flush($cache), "Cache $cache flushed ok" );
+ }
+}
+
+### installed tests ###
+{ ok( scalar($cb->installed), "Found list of installed modules" );
+}
+
+### autobudle tests ###
+{
+ my $where = $cb->autobundle;
+ ok( $where, "Autobundle written" );
+ ok( -s $where, " File has size" );
+}
+
+### local_mirror tests ###
+{ ### turn off md5 checks for the 'fake' packages we have
+ my $old_md5 = $conf->get_conf('md5');
+ $conf->set_conf( md5 => 0 );
+
+ ### otherwise 'status->fetch' might be undef! ###
+ my $rv = $cb->local_mirror( path => 'dummy-localmirror' );
+ ok( $rv, "Local mirror created" );
+
+ for my $mod ( values %{ $cb->module_tree } ) {
+ my $name = $mod->module;
+
+ my $cksum = File::Spec->catfile(
+ dirname($mod->status->fetch),
+ CHECKSUMS );
+ ok( -e $mod->status->fetch, " Module '$name' fetched" );
+ ok( -s _, " Module '$name' has size" );
+ ok( -e $cksum, " Checksum fetched for '$name'" );
+ ok( -s _, " Checksum for '$name' has size" );
+ }
+
+ $conf->set_conf( md5 => $old_md5 );
+}
+
+### check ENV variable
+{ ### process id
+ { my $name = 'PERL5_CPANPLUS_IS_RUNNING';
+ ok( $ENV{$name}, "Env var '$name' set" );
+ is( $ENV{$name}, $$, " Set to current process id" );
+ }
+
+ ### Version
+ { my $name = 'PERL5_CPANPLUS_IS_VERSION';
+ ok( $ENV{$name}, "Env var '$name' set" );
+
+ ### version.pm formats ->VERSION output... *sigh*
+ is( $ENV{$name}, $Class->VERSION,
+ " Set to current process version" );
+ }
+
+}
+
+__END__
+
+# Local variables:
+# c-indentation-style: bsd
+# c-basic-offset: 4
+# indent-tabs-mode: nil
+# End:
+# vim: expandtab shiftwidth=4:
+