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
|
#!perl -I..
# Test Array vs Array1 functionality
use strict;
use Test::More tests => 13;
# Find the module (1 test)
BEGIN {use_ok('Readonly'); }
sub expected
{
my $line = shift;
$@ =~ s/\.$//; # difference between croak and die
return "Modification of a read-only value attempted at " . __FILE__ . " line $line\n";
}
use vars qw/@a1 @a2/;
my $m1 = 17;
# Create (2 tests)
eval {Readonly::Array @a1 => (\$m1, {x => 5, z => [1, 2, 3]})};
is $@ => '', 'Create a deep reference array';
eval {Readonly::Array1 @a2 => (\$m1, {x => 5, z => [1, 2, 3]})};
is $@ => '', 'Create a shallow reference array';
# Modify (10 tests)
eval {$a1[0] = 7;};
is $@ => expected(__LINE__-1), 'Modify a1';
eval {$a2[0] = 7;};
is $@ => expected(__LINE__-1), 'Modify a2';
eval {${$a1[0]} = "the";};
is $@ => expected(__LINE__-1), 'Deep-modify a1';
is $m1 => 17, 'a1 unchanged';
eval {${$a2[0]} = "the";};
is $@ => '', 'Deep-modify a2';
is $m1 => 'the', 'a2 modification successful';
eval {$a1[1]{z}[1] = 42;};
is $@ => expected(__LINE__-1), 'Deep-deep modify a1';
is $a1[1]{z}[1] => 2, 'a1 unchanged';
eval {$a2[1]{z}[2] = 42;};
is $@ => '', 'Deep-deep modify a2';
is $a2[1]{z}[2], 42, 'a2 mod successful';
|