1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
use Test::More tests => 22;
use Test::Warn;
use File::Spec::Functions qw(catfile);
my $class = 'ConfigReader::Simple';
use_ok( $class );
can_ok( $class, qw( save ) );
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
my @Directives = qw( Test1 Test2 Test3 Test4 );
my @Files = map { catfile( "t" , "$_.config" ) } qw(save_test1 save_test2);
unlink @Files;
my $config = $class->new(
catfile( qw( t example.config) ),
\@Directives
);
isa_ok( $config, $class );
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test with no values
{
my $result;
warning_like { $result = $config->save() } qr/No arguments to method/,
'No arguments emits warning';
ok( ! defined $result, 'No arguments return undef' );
is( $@, '', 'There is nothing in $@ for a warning' );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test with one value
{
ok( ! -e $Files[0], 'File does not exist' );
my $result = $config->save( $Files[0] );
ok( $result, 'Single argument returns true value' );
ok( -e $Files[0], 'File exists' );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test with two values
foreach my $value ( undef, 'foo', {}, 0 )
{
my $result = eval { $config->save( $Files[0] => $value ) };
ok( ! defined $result, 'Bad arguments return undef' );
like( $@, qr/Argument is not an array reference/,
'Error string says the right thing' );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test with three values
{
my $result = eval { $config->save( $Files[0] => [], $Files[1] ) };
ok( ! defined $result, 'Three arguments return undef' );
like( $@, qr/Odd number of arguments/ );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test with four values
{
my $result = eval { $config->save(
$Files[0] => [ qw( Test1 Test2 ) ],
$Files[1] => [ qw( Zero Test3 ) ]
) };
ok( $result, 'Four arguments return true' );
}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# test when _save fails
{
no warnings 'redefine';
no warnings 'once';
no strict 'refs';
local *{ "${class}::_save" } = sub { $ConfigReader::Simple::ERROR = 'Oops'; 0 };
ok( ! $class->_save, "_save mock fails as it should" );
warning_like
{ $config->save( $Files[0] => [ qw( Test1 Test2 ) ] ) }
qr/Oops/;
}
unlink @Files;
|