diff options
Diffstat (limited to 't/struct.t')
-rw-r--r-- | t/struct.t | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/t/struct.t b/t/struct.t new file mode 100644 index 0000000..7eb265c --- /dev/null +++ b/t/struct.t @@ -0,0 +1,69 @@ +use strict; +use warnings; +use Test::More 0.96; +use Test::Fatal; +use Test::MockObject 1.09 (); +use Path::Class 0.24 qw(file dir); + +my $mod = 'Dist::Metadata::Struct'; +eval "require $mod" or die $@; + +# required_attribute +{ + my $att = 'files'; + is( $mod->required_attribute, $att, "'$att' attribute required" ); + my $ex = exception { $mod->new() }; + like( $ex, qr/'$att' parameter required/, "new dies without '$att'" ); +} + +# don't create a dependency on IO::String or IO::Scalar for this simple test. +my $io = Test::MockObject->new({}); +$io->mock(getline => sub { 'read me' }); + +# file_content +# find_files +foreach my $test ( + [ string => 'read me' ], + [ scalar_ref => \'read me' ], + [ io => $io ], +) { + my ( $type, $content ) = @$test; + my $dist = new_ok( $mod, [ files => { README => $content } ] ); + is( $dist->file_content('README'), 'read me', "content returned for $type" ); + is_deeply( [ $dist->find_files ], ['README'], 'all files listed' ); +} + +{ + my $dist = new_ok( $mod, [ files => { 'root/README' => 'please', 'root/SECRET' => 'shhhh' } ] ); + { + my $dir = $dist->physical_directory('README'); + ok( -d $dir, 'phyiscal directory exists' ); + } + my @dir_and_files = $dist->physical_directory('README'); + is(scalar @dir_and_files, 2, 'list returned'); + is($dir_and_files[1], file($dir_and_files[0], 'README'), 'full path to file'); + ok(-e $dir_and_files[1], 'extracted file exists'); +} + +# default_file_spec +# file_spec +# find_files +# determine_packages +{ + my $defspec = 'Unix'; + my $spec = 'Win32'; + my $dist = new_ok($mod, [file_spec => $spec, files => { + README => 'nevermind', + 'lib\\Mod\\Name.pm' => "package Mod::Name;\nour \$VERSION = 0.11;" + }]); + is( $dist->default_file_spec, $defspec, "struct defaults to $defspec" ); + is( $dist->file_spec, $spec, "struct has custom spec: $spec" ); + + # TODO: should paths always come out in unix format? perhaps not if you specify an alternate... + is_deeply( [sort $dist->find_files], ['README', 'lib\\Mod\\Name.pm'], 'all files listed' ); + + is_deeply( $dist->determine_packages, {'Mod::Name' => {file => 'lib/Mod/Name.pm', version => '0.11'}}, + 'determined package with translated path' ); +} + +done_testing; |