use Test::More 'no_plan';
use Test::NoWarnings;
use strict;
use Path::Class;
BEGIN { chdir 't' if -d 't' };
BEGIN { use lib qw[../lib inc] };
BEGIN { require 'conf.pl' }
BEGIN { require 'pkg.pl' }
use JIB::Installation;
use JIB::Config;
my $Conf = JIB::Config->new;
my $Class = 'JIB::Package';
my @Acc = sort qw[package file config meta];
my $Inst = JIB::Installation->new( dir => $INSTALLATION_DIR );
### XXX config
my $Pkg = $PKGS{'p5-Foo-Bar-1.2-cpan+KANE'};
my $File = $Pkg->file;
my @Parse = qw[prefix name version authority];
use_ok( $Class );
### XXX package->new now takes a jib file as argument
### need to fix tests for that
### create an object
my $Obj;
{ $Obj = $Class->new( file => $File );
ok( $Obj, "Object created" );
isa_ok( $Obj, $Class );
my @can = sort $Obj->ls_accessors;
ok( scalar(@can), " Object has accessors" );
is_deeply( \@can, \@Acc, " Object can do what it should" );
for my $method ( @can ) {
ok( $Obj->$method, " '$method' returns value" );
}
}
### test bogus assign to package
{ local $SIG{__WARN__} = sub {};
ok( !$Obj->package( [] ), "Bogus 'package' value not allowed" );
}
### test regexes
{ ### build a method => value map
my $i;
my %map = map { $Parse[$i++] => $_ } map { $Obj->$_ } @Parse;
for my $method ( keys %map ) {
can_ok( $Obj, $method );
my $rv = $Obj->$method;
ok( $rv, " Returns '$rv'" );
is( $rv, $map{$method}, " As expected" );
}
}
### installl the package
{ my $inst_pkg = $Obj->install( installation => $Inst );
ok( $inst_pkg, "Package installed" );
isa_ok( $inst_pkg, "JIB::Package::Installed" );
ok( $Inst->is_installed( package => $Obj ),
" Package installation registered" );
### XXX add more file tests
for my $file ( @{ $inst_pkg->files } ) {
ok( -e $file, " File '$file' exists" );
}
### check for module
### XXX get this from config/object
{ my $pm = file(
$Inst->dir,
$Obj->package,
qw[lib Foo Bar.pm]
);
ok( -e $pm, " Module '$pm' exists" );
}
### check for scripts
### XXX get this from config/object
{ my $script = 'script.pl';
my $conf = $Obj->config;
for my $dir ( $Inst->alternatives_dir, $conf->bin_dir,
$Inst->dir->subdir( $Obj->package )->subdir( 'bin' )
) {
my $path = $dir->file( $script );
ok( -d $dir, " Bin dir '$dir' exists" );
ok( -e $path, " Script '$script' installed there" );
}
}
### XXX check for manpages
{
1;
}
### install again
{
my $log = file('error_log');
my $fh = $log->openw;
local $Log::Message::Simple::ERROR_FH = $fh;
ok( $Obj->install( installation => $Inst ),
"Second install returns true" );
close $fh;
like( scalar $log->slurp, qr/is already installed/,
' Prior installation detected' );
$log->remove;
}
}
### Uninstall tests
{ my $inst_pkg = $Inst->is_installed( package => $Obj );
ok( $inst_pkg, "Retrieved installed package" );
isa_ok( $inst_pkg, "JIB::Package::Installed" );
ok( $inst_pkg->uninstall, " Package uninstalled" );
### XXX more file tests
for my $file ( @{ $inst_pkg->files } ) {
ok( !-e $file, " File '$file' no longer exists" );
}
}
# Local variables:
# c-indentation-style: bsd
# c-basic-offset: 4
# indent-tabs-mode: nil
# End:
# vim: expandtab shiftwidth=4: