use Test::More;
-use Variable::Magic qw/cast MGf_COPY/;
+use lib 't/lib';
+use VPIT::TestHelpers;
-if (MGf_COPY) {
- plan tests => 2 + (2 * 5 + 3) + (2 * 9 + 6) + 1;
-} else {
- plan skip_all => 'No copy magic for this perl';
-}
+use Variable::Magic qw<cast dispell>;
+
+plan tests => 2 + ((2 * 5 + 3) + (2 * 2 + 1)) + (2 * 9 + 6) + 1;
use lib 't/lib';
use Variable::Magic::TestWatcher;
+use Variable::Magic::TestValue;
my $wiz = init_watcher 'copy', 'copy';
SKIP: {
- eval "use Tie::Array";
- skip 'Tie::Array required to test copy magic on arrays', 2 * 5 + 3 if $@;
- diag "Using Tie::Array $Tie::Array::VERSION" if defined $Tie::Array::VERSION;
+ load_or_skip('Tie::Array', undef, undef, (2 * 5 + 3) + (2 * 2 + 1));
tie my @a, 'Tie::StdArray';
@a = (1 .. 10);
ok $s, 'copy: tied array exists correctly';
watch { undef @a } { }, 'tied array undef';
+
+ {
+ tie my @val, 'Tie::StdArray';
+ @val = (4 .. 6);
+
+ my $wv = init_value @val, 'copy', 'copy';
+
+ value { $val[3] = 8 } [ 4 .. 6 ];
+
+ dispell @val, $wv;
+ is_deeply \@val, [ 4 .. 6, 8 ], 'copy: value after';
+ }
}
SKIP: {
- eval "use Tie::Hash";
- skip 'Tie::Hash required to test copy magic on hashes' => 2 * 9 + 6 if $@;
- diag "Using Tie::Hash $Tie::Hash::VERSION" if defined $Tie::Hash::VERSION;
+ load_or_skip('Tie::Hash', undef, undef, 2 * 9 + 6);
tie my %h, 'Tie::StdHash';
%h = (a => 1, b => 2, c => 3);
watch { my ($k, $v) = each %h } { copy => 1 }, 'tied hash each';
my @k = watch { keys %h } { }, 'tied hash keys';
- is_deeply [ sort @k ], [ qw/a c/ ], 'copy: tied hash keys correctly';
+ is_deeply [ sort @k ], [ qw<a c> ], 'copy: tied hash keys correctly';
my @v = watch { values %h } { copy => 2 }, 'tied hash values';
is_deeply [ sort { $a <=> $b } @v ], [ 1, 3 ], 'copy: tied hash values correctly';