# -*- perl -*-
# t/050-ref-valued-scalars.t - tests of $=>[] and $=>{}
use strict;
use warnings;
use lib::relative '.';
use Kit;
use vars::i; # Fatal if we can't load
# Sanity checks
test_plain_scalar();
test_plain_arrayref();
test_plain_array();
# Tests of ref-valued scalars
test_arrayref_in_scalar();
test_hashref();
done_testing();
# --- Sanity checks ------------------------------------------------------
# Compare these to the tests below.
sub test_plain_scalar {
eval_lives_ok q[{
package MY::TestPlainScalar;
use vars::i '$answer' => 42;
}], '$=>scalar';
eval_is_var '$MY::TestPlainScalar::answer', '42';
} #test_plain_scalar
sub test_plain_arrayref {
eval_lives_ok q[{
package MY::TestPlainArrayRef;
use vars::i '@one' => [1,2,3];
}], '@=>arrayref';
my $val =
eval q[use strict; no warnings 'all'; scalar @MY::TestPlainArrayRef::one];
is $@, '', '@one access';
cmp_ok $val, '==', 3, 'scalar @one';
foreach(0..2) {
my $val = eval qq[use strict; no warnings 'all';
\$MY::TestPlainArrayRef::one[$_]
];
is $@, '', "...one[$_] access";
cmp_ok $val, '==', $_+1, "MY::TestPlainArrayRef::one[$_]";
}
} #test_plain_arrayref
sub test_plain_array {
eval_lives_ok q[{
package MY::TestPlainArray;
use vars::i '@one' => 4, 5, 6; # No arrayref
}], '@=>array';
my $val =
eval q[use strict; no warnings 'all'; scalar @MY::TestPlainArray::one];
is $@, '', '@one access';
cmp_ok $val, '==', 3, 'scalar @one';
foreach(0..2) {
my $val = eval qq[use strict; no warnings 'all';
\$MY::TestPlainArray::one[$_]
];
is $@, '', "...one[$_] access";
cmp_ok $val, '==', $_+4, "MY::TestPlainArray::one[$_]";
}
} #test_plain_array
# --- The tests ----------------------------------------------------------
sub test_arrayref_in_scalar {
eval_lives_ok q[{
package MY::TestARInScalar;
use vars::i '$one' => [7,8,9];
}], '$=>arrayref';
my $val =
eval q[use strict; no warnings 'all'; scalar @$MY::TestARInScalar::one];
is $@, '', '@$one access';
cmp_ok $val, '==', 3, 'scalar @one';
foreach(0..2) {
my $val = eval qq[use strict; no warnings 'all';
\$MY::TestARInScalar::one->[$_]
];
is $@, '', "...one->[$_] access";
cmp_ok $val, '==', $_+7, "\$MY::TestARInScalar::one->[$_]";
}
} #test_arrayref_in_scalar
sub test_hashref {
eval_lives_ok line_mark_string(
q[{
package MY::TestHashRef;
use vars::i '$one' => {a=>1, b=>2};
}]), '$=>hashref';
my $val = eval line_mark_string(
q[use strict; no warnings 'all';
scalar keys %{$MY::TestHashRef::one}]);
is $@, '', '%one access';
cmp_ok $val, '==', 2, 'scalar keys %one';
my %expect = (a=>1, b=>2);
while(my ($k, $v) = each %expect) {
my $val = eval line_mark_string(
qq[use strict; no warnings 'all';
\$MY::TestHashRef::one->{'$k'}
]);
is $@, '', "...one->{$k} access";
cmp_ok $val, '==', $v, "MY::TestHashRef::one->{$k}";
}
} #test_hashref