#!perl
use warnings;
use strict;
use Test::More tests => 18;
use File::Basename;
my $class = 'CPAN::Mini';
use_ok($class);
can_ok($class, 'config_file');
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# command line option case
{
my $filename = 'Changes';
ok(-e $filename, "file name [$filename] exists");
local $ENV{CPAN_MINI_CONFIG} = 'Buster';
my $options = { config_file => $filename, };
is($class->config_file($options),
$filename, 'selects config file name from command line');
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# environment variable case
{
my $filename = $0;
ok(-e $filename, "file name [$filename] exists");
local $ENV{CPAN_MINI_CONFIG} = $filename;
is($class->config_file, $filename,
'selects config file name from environment with no args');
is($class->config_file({}),
$filename, 'selects config file name from environment with empty hash ref');
is($class->config_file('trash'),
$filename, 'selects config file name from environment with non-ref arg');
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# default case
# this is the case where there is a ~/.minicpanrc
{
my $filename = 'Changes';
ok(-e $filename, "file name [$filename] exists");
{
no strict 'refs';
no warnings 'redefine';
*{"${class}::__homedir_configfile"} = sub { $filename };
is($class->__homedir_configfile,
$filename, "__homedir_configfile returns mocked name");
}
local $ENV{CPAN_MINI_CONFIG} = undef;
is($class->config_file, $filename, 'selects default config file name');
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# last ditch case
# this is the case wehre there is no ~/.minicpanrc
{
local $ENV{CPAN_MINI_CONFIG} = undef;
my $is_there_filename = 'Changes';
ok(-e $is_there_filename, "file name [$is_there_filename] does exist");
{
no strict 'refs';
no warnings 'redefine';
*{"${class}::__homedir_configfile"} = sub { undef };
is($class->__homedir_configfile,
undef, "__homedir_configfile returns mocked name");
*{"${class}::__default_configfile"} = sub { $is_there_filename };
is($class->__default_configfile,
$is_there_filename, "__default_configfile returns mocked name");
}
is($class->config_file, $is_there_filename,
'selects default config file name');
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# everything failed case
{
local $ENV{CPAN_MINI_CONFIG} = undef;
{
no strict 'refs';
no warnings 'redefine';
*{"${class}::__homedir_configfile"} = sub { undef };
is($class->__homedir_configfile,
undef, "__homedir_configfile returns mocked name");
*{"${class}::__default_configfile"} = sub { undef };
is($class->__default_configfile,
undef, "__default_configfile returns mocked name");
}
is($class->config_file, undef, 'returns undef when no config file is found');
}