📄 19_cpanplus-dist.t
字号:
### make sure we can find our conf.pl fileBEGIN { use FindBin; require "$FindBin::Bin/inc/conf.pl";}### dummy class for testing dist api ###BEGIN { package CPANPLUS::Dist::_Test; use strict; use vars qw[$Available $Create $Install $Init $Prepare @ISA]; @ISA = qw[CPANPLUS::Dist]; $Available = 1; $Create = 1; $Install = 1; $Init = 1; $Prepare = 1; require CPANPLUS::Dist; CPANPLUS::Dist->_add_dist_types( __PACKAGE__ ); sub init { $_[0]->status->mk_accessors( qw[prepared created installed _prepare_args _install_args _create_args]); return $Init }; sub format_available { return $Available } sub prepare { return shift->status->prepared( $Prepare ) } sub create { return shift->status->created( $Create ) } sub install { return shift->status->installed( $Install ) }}use strict;use CPANPLUS::Configure;use CPANPLUS::Backend;use CPANPLUS::Internals::Constants;use Test::More 'no_plan';use Cwd;use Data::Dumper;use File::Basename ();use File::Spec ();use Module::Load::Conditional qw[check_install];my $conf = gimme_conf();my $cb = CPANPLUS::Backend->new( $conf );### obsolete#my $Format = '_test';my $Module = 'CPANPLUS::Dist::_Test';my $ModName = TEST_CONF_MODULE; my $ModPrereq = TEST_CONF_INST_MODULE;### XXX this version doesn't exist, but we don't check for it either ###my $Prereq = { $ModPrereq => '1000' };### since it's in this file, not in it's own module file,### make M::L::C think it already was loaded$Module::Load::Conditional::CACHE->{$Module}->{usable} = 1;use_ok('CPANPLUS::Dist');### start with fresh sources ###ok( $cb->reload_indices( update_source => 0 ), "Rebuilding trees" );my $Mod = $cb->module_tree( $ModName );ok( $Mod, "Got module object" );### straight forward dist build - prepare, create, install{ my $dist = CPANPLUS::Dist->new( format => $Module, module => $Mod ); ok( $dist, "New dist object created" ); isa_ok( $dist, 'CPANPLUS::Dist' ); isa_ok( $dist, $Module ); my $status = $dist->status; ok( $status, "Status object found" ); isa_ok( $status, "Object::Accessor" ); ok( $dist->prepare, "Prepare call" ); ok( $dist->status->prepared," Status registered OK" ); ok( $dist->create, "Create call" ); ok( $dist->status->created, " Status registered OK" ); ok( $dist->install, "Install call" ); ok( $dist->status->installed, " Status registered OK" );}### check 'sanity check' option ###{ local $CPANPLUS::Dist::_Test::Available = 0; ok( !$Module->format_available, "Format availabillity turned off" ); { $conf->_set_build('sanity_check' => 0); my $dist = CPANPLUS::Dist->new( format => $Module, module => $Mod ); ok( $dist, "Dist created with sanity check off" ); isa_ok( $dist, $Module ); } { $conf->_set_build('sanity_check' => 1); my $dist = CPANPLUS::Dist->new( format => $Module, module => $Mod ); ok( !$dist, "Dist not created with sanity check on" ); like( CPANPLUS::Error->stack_as_string, qr/Format '$Module' is not available/, " Error recorded as expected" ); }}### undef the status hash, make sure it complains ###{ local $CPANPLUS::Dist::_Test::Init = 0; my $dist = CPANPLUS::Dist->new( format => $Module, module => $Mod ); ok( !$dist, "No dist created by failed init" ); like( CPANPLUS::Error->stack_as_string, qr/Dist initialization of '$Module' failed for/s, " Error recorded as expected" );}### test _resolve prereqs, in a somewhat simulated set of circumstances{ my $old_prereq = $conf->get_conf('prereqs'); my $map = { 0 => { 'Previous install failed' => [ sub { $cb->module_tree($ModPrereq)->status->installed(0); 'install' }, sub { like( CPANPLUS::Error->stack_as_string, qr/failed to install before in this session/s, " Previous install failed recorded ok" ) }, ], "Set $Module->prepare to false" => [ sub { $CPANPLUS::Dist::_Test::Prepare = 0; 'install' }, sub { like( CPANPLUS::Error->stack_as_string, qr/Unable to create a new distribution object/s, " Dist creation failed recorded ok" ) }, sub { like( CPANPLUS::Error->stack_as_string, qr/Failed to install '$ModPrereq' as prerequisite/s, " Dist creation failed recorded ok" ) }, ], "Set $Module->create to false" => [ sub { $CPANPLUS::Dist::_Test::Create = 0; 'install' }, sub { like( CPANPLUS::Error->stack_as_string, qr/Unable to create a new distribution object/s, " Dist creation failed recorded ok" ) }, sub { like( CPANPLUS::Error->stack_as_string, qr/Failed to install '$ModPrereq' as prerequisite/s, " Dist creation failed recorded ok" ) }, ], "Set $Module->install to false" => [ sub { $CPANPLUS::Dist::_Test::Install = 0; 'install' }, sub { like( CPANPLUS::Error->stack_as_string, qr/Failed to install '$ModPrereq' as/s, " Dist installation failed recorded ok" ) }, ], "Set dependency to be perl-core" => [ sub { $cb->module_tree( $ModPrereq )->package( 'perl-5.8.1.tar.gz' ); 'install' }, sub { like( CPANPLUS::Error->stack_as_string, qr/Prerequisite '$ModPrereq' is perl-core/s, " Dist installation failed recorded ok" ) }, ], 'Simple ignore' => [ sub { 'ignore' }, sub { ok( !$_[0]->status->prepared, " Module status says not prepared" ) }, sub { ok( !$_[0]->status->created, " Module status says not created" ) }, sub { ok( !$_[0]->status->installed, " Module status says not installed" ) }, ], 'Ignore from conf' => [ sub { $conf->set_conf(prereqs => PREREQ_IGNORE); '' }, sub { ok( !$_[0]->status->prepared, " Module status says not prepared" ) }, sub { ok( !$_[0]->status->created, " Module status says not created" ) }, sub { ok( !$_[0]->status->installed, " Module status says not installed" ) }, ### set the conf back ###
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -