Asset-Pack
view release on metacpan or search on metacpan
t/internals/pack_metadata.t view on Meta::CPAN
}
our $nfails;
sub my_subtest($$) {
note "(fake)Subtest: $_[0]";
local $nfails = 0;
$_[1]->();
note "End (fake)subtest: $_[0]";
return is( $nfails, 0, "No failures in (fake)subtest $_[0]" );
}
my_subtest "empty args" => sub {
my $ref = mk_pack( pack_metadata() );
is_deeply( [ sort keys %{$ref} ], ['meta'], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
} or diag $last_pack;
my_subtest "empty hash args" => sub {
my $ref = mk_pack( pack_metadata( {} ) );
is_deeply( [ sort keys %{$ref} ], ['meta'], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
} or diag $last_pack;
my_subtest "version args" => sub {
my $ref = mk_pack( pack_metadata( { VERSION => '1.0' } ) );
is_deeply( [ sort keys %{$ref} ], [ 'VERSION', 'meta' ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{VERSION}, '1.0', 'VERSION is expected' ) || $nfails++;
ok( !exists $ref->{meta}->{VERSION}, 'VERSION not in METADATA' ) || $nfails++;
} or diag $last_pack;
my_subtest "simple metadata + version" => sub {
my $ref = mk_pack( pack_metadata( { VERSION => '1.0', 'candies' => '5' } ) );
is_deeply( [ sort keys %{$ref} ], [ 'VERSION', 'meta' ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{VERSION}, '1.0', 'VERSION is expected' ) || $nfails++;
is( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
} or diag $last_pack;
my_subtest "simple metadata w/o version" => sub {
my $ref = mk_pack( pack_metadata( { 'candies' => '5' } ) );
is_deeply( [ sort keys %{$ref} ], ['meta'], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
} or diag $last_pack;
my_subtest "simple metadata w/ cycle" => sub {
my $struct = { VERSION => '1.0', 'candies' => '5', hard => [] };
$struct->{'lemons'} = $struct->{'hard'};
my $ref = mk_pack( pack_metadata($struct) );
is_deeply( [ sort keys %{$ref} ], [ 'VERSION', 'meta' ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{hard}, [], 'hard is an empty array' ) || $nfails++;
is_deeply( $ref->{meta}->{lemons}, [], 'lemons is an empty array' ) || $nfails++;
is( $ref->{meta}->{hard}, $ref->{meta}->{lemons}, 'hard and lemons share stringified forms( same ref )' ) || $nfails++;
} or diag $last_pack;
use Test::Differences qw( eq_or_diff );
my_subtest "simple metadata + variables w/ cycle" => sub {
my $struct = { VERSION => '1.0', 'candies' => '5', hard => [] };
$struct->{'lemons'} = $struct->{'hard'};
my $ref = mk_pack( pack_metadata( $struct, [qw( $candies $hard $lemons )] ) );
my @expected = ( 'VERSION', 'meta', 'candies', 'hard', 'lemons' );
eq_or_diff( [ sort keys %{$ref} ], [ sort @expected ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{hard}, [], 'hard is an empty array' ) || $nfails++;
is_deeply( $ref->{meta}->{lemons}, [], 'lemons is an empty array' ) || $nfails++;
is( $ref->{meta}->{hard}, $ref->{meta}->{lemons}, 'hard and lemons share stringified forms( same ref )' ) || $nfails++;
is( $ref->{candies}, '5', 'candies is expected' ) || $nfails++;
is_deeply( $ref->{hard}, [], 'hard is an empty array' ) || $nfails++;
is_deeply( $ref->{lemons}, [], 'lemons is an empty array' ) || $nfails++;
is( $ref->{hard}, $ref->{lemons}, 'hard and lemons share stringified forms( same ref )' ) || $nfails++;
} or diag $last_pack;
my_subtest "simple metadata + mixed variables w/ cycle" => sub {
my $struct = { VERSION => '1.0', 'candies' => '5', hard => [ { happy => 1 } ] };
$struct->{'lemons'} = $struct->{'hard'};
my $ref = mk_pack( pack_metadata( $struct, [qw( @hard @lemons )] ) );
note explain $ref;
my (@expected) = ( 'VERSION', 'meta', '@hard', '@lemons' );
eq_or_diff( [ sort keys %{$ref} ], [ sort @expected ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{hard}, [ { happy => 1 } ], 'hard is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{lemons}, [ { happy => 1 } ], 'lemons is expected' ) || $nfails++;
is( $ref->{meta}->{hard}, $ref->{meta}->{lemons}, 'hard and lemons share stringified forms( same ref )' ) || $nfails++;
eq_or_diff( $ref->{'@hard'}, [ { happy => 1 } ], 'hard has the expected structure' ) || $nfails++;
eq_or_diff( $ref->{'@lemons'}, [ { happy => 1 } ], 'lemons has the expected structure' ) || $nfails++;
isnt( $ref->{'@hard'}, $ref->{'@lemons'}, 'hard and lemons dont share a ref' ) || $nfails++;
is( $ref->{'@hard'}->[0], $ref->{'@lemons'}->[0], 'hard and lemons share a child' ) || $nfails++;
} or diag $last_pack;
my_subtest "simple metadata + self-mixed variables w/ cycle" => sub {
my $struct = { VERSION => '1.0', 'candies' => '5', hard => [ { happy => 1 } ] };
$struct->{'lemons'} = $struct->{'hard'};
my $ref = mk_pack( pack_metadata( $struct, [qw( $lemons @lemons )] ) );
note explain $ref;
my (@expected) = ( 'VERSION', 'meta', 'lemons', '@lemons' );
eq_or_diff( [ sort keys %{$ref} ], [ sort @expected ], 'Only expected vars' ) || $nfails++;
is_deeply( $ref->{meta}->{PACKER}, $packer_struct, 'PACKER is expected' ) || $nfails++;
is( $ref->{meta}->{candies}, '5', 'candies is expected' ) || $nfails++;
is_deeply( $ref->{meta}->{hard}, [ { happy => 1 } ], 'hard expected' ) || $nfails++;
is_deeply( $ref->{meta}->{lemons}, [ { happy => 1 } ], 'lemons is expected' ) || $nfails++;
is( $ref->{meta}->{hard}, $ref->{meta}->{lemons}, 'hard and lemons share stringified forms( same ref )' ) || $nfails++;
eq_or_diff( $ref->{'lemons'}, [ { happy => 1 } ], '$lemons has the expected structure' ) || $nfails++;
eq_or_diff( $ref->{'@lemons'}, [ { happy => 1 } ], '@lemons has the expected structure' ) || $nfails++;
isnt( $ref->{'lemons'}, $ref->{'@lemons'}, '$lemons and @lemons dont share a ref' ) || $nfails++;
( run in 1.337 second using v1.01-cache-2.11-cpan-5837b0d9d2c )