#!perl # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test; use strict; use Cwd; my $cwd = getcwd; BEGIN { plan tests => 44 }; use PPM::Make; use Config; use File::Path; use File::Find; ok(1); # If we made it this far, we're ok. ######################### # Insert your test code below, the Test module is use()ed here so read # its man page ( perldoc Test ) for help writing this test script. my $ppm = PPM::Make->new(upload => {ppd => "$cwd/t"}, no_cfg => 1); ok($ppm); my $name = 'PPM-Make'; my $ppd = $name . '.ppd'; my $tgz = $name . '.tar.gz'; $ppm->make_ppm(); for ($ppd, $tgz, "t/$ppd", "t/$tgz") { if (-e $_) { ok(1); } else { ok(qq{'$_' not created}, 1); } } my $author = q{Randy Kobes <r.kobes@uwinnipeg.ca>}; my $abstract = q{Make a ppm package from a CPAN distribution}; my $d = PPM::Make::parse_ppd($ppd); ok($d); ok($d->{SOFTPKG}->{NAME}, $name); ok($d->{TITLE}, $name); ok($d->{ABSTRACT}, $abstract); ok($d->{AUTHOR}, $author); ok($d->{OS}->{NAME}, $Config{osname}); my $arch = $Config{archname}; if ($] >= 5.008) { my $vstring = sprintf "%vd", $^V; $vstring =~ s/\.\d+$//; $arch .= "-$vstring"; } ok($d->{ARCHITECTURE}->{NAME}, $arch); ok($d->{CODEBASE}->{HREF}, $tgz); my $provides = $d->{PROVIDE}; ok($provides); ok(ref($provides) eq 'ARRAY'); my $has; foreach my $entry (@$provides) { $has->{$entry->{NAME}} = $entry->{VERSION}; } my @mods = qw(PPM::Make PPM::Make::Util PPM::Make::Install PPM::Make::RepositorySummary PPM::Make::Config PPM::Make::Meta PPM::Make::Bundle); foreach my $mod(@mods) { ok(defined $has->{$mod}); ok($has->{$mod} > 0); } my $is_Win32 = ($d->{OS}->{NAME} =~ /Win32/i); my @f; if ($is_Win32) { finddepth(sub { push @f, $File::Find::name unless $File::Find::name =~ m!blib/man\d!; print $File::Find::name,"\n"}, 'blib'); } else { finddepth(sub {push @f, $File::Find::name; print $File::Find::name,"\n"}, 'blib'); } my $tar = $ppm->{has}->{tar}; my $gzip = $ppm->{has}->{gzip}; my @files; if ($tar eq 'Archive::Tar' and $gzip eq 'Compress::Zlib') { require Archive::Tar; require Compress::Zlib; my $tar = Archive::Tar->new($tgz, 1); @files = $tar->list_files(); } else { open(TGZ, "$gzip -dc $tgz \| $tar tvf - |"); while () { chomp; s!.* (blib\S*)!$1!; push @files, $_; } close(TGZ) or die "$!\n";; } ok($#f, $#files); unlink ($ppd, $tgz, "t/$ppd", "t/$tgz"); $arch = 'c-wren'; my $url = 'http://www.disney.com/ppmpackages/'; my $script = 'README'; my $exec = 'notepad.exe'; my @args = ($ppm->{has}->{perl}, '-Mblib', 'bin/make_ppm', '-n', '-a', $arch, '-b', $url, '-s', $script, '-e', $exec, '--no_cfg'); system(@args) == 0 or die "system @args failed: $?"; for ($ppd, $tgz) { if (-e $_) { ok(1); } else { ok(qq{'$_' not created}, 1); } } $d = PPM::Make::parse_ppd($ppd); ok($d); ok($d->{SOFTPKG}->{NAME}, $name); ok($d->{TITLE}, $name); ok($d->{ABSTRACT}, $abstract); ok($d->{AUTHOR}, $author); ok($d->{OS}->{NAME}, $Config{osname}); ok($d->{ARCHITECTURE}->{NAME}, $arch); ok($d->{CODEBASE}->{HREF}, $url . $arch . '/' . $tgz); ok($d->{INSTALL}->{SCRIPT}, $script); ok($d->{INSTALL}->{EXEC}, $exec); @f = (); @files = (); if ($is_Win32) { finddepth(sub { push @f, $File::Find::name unless $File::Find::name =~ m!blib/man\d!; print $File::Find::name,"\n"}, 'blib'); } else { finddepth(sub {push @f, $File::Find::name; print $File::Find::name,"\n"}, 'blib'); } if ($tar eq 'Archive::Tar' and $gzip eq 'Compress::Zlib') { require Archive::Tar; require Compress::Zlib; my $tar = Archive::Tar->new($tgz, 1); @files = $tar->list_files(); } else { open(TGZ, "$gzip -dc $tgz \| $tar tvf - |"); while () { chomp; s!.* (blib\S*)!$1!; push @files, $_; } close(TGZ) or die "$!\n";; } ok($#f+1, $#files); unlink ($ppd, $tgz);