File: array.t

package info (click to toggle)
libreadonlyx-perl 1.04-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 192 kB
  • sloc: perl: 577; makefile: 2
file content (90 lines) | stat: -rw-r--r-- 2,225 bytes parent folder | download | duplicates (2)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!perl -I../../lib
# Readonly array tests
use strict;
use warnings;
use Test::More;
use ReadonlyX;

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 @ma1;

# creation (3 tests)
eval 'Readonly::Array @a1;';
is $@ => '', 'Create empty global array';
eval 'Readonly::Array @ma1 => ();';
is $@ => '', 'Create empty lexical array';
eval 'Readonly::Array @a2 => (1,2,3,4,5);';
is $@ => '', 'Create global array';

# fetching (3 tests)
ok !defined($a1[0]), 'Fetch global';
is $a2[0]  => 1, 'Fetch global';
is $a2[-1] => 5, 'Fetch global';

# fetch size (3 tests)
is scalar(@a1)  => 0, 'Global size (zero)';
is scalar(@ma1) => 0, 'Lexical size (zero)';
is $#a2         => 4, 'Global last element (nonzero)';

# store (2 tests)
TODO: {
    local $TODO
        = 'perl *could* mess with some readonly vars before 5.12 stable';
    eval { $ma1[0] = 5; };
    is $@ => expected(__LINE__- 1), 'Lexical store';
}
eval { $a2[3] = 4; };
is $@ => expected(__LINE__- 1), 'Global store';

# storesize (1 test)
eval { $#a1 = 15; };
is $@ => expected(__LINE__- 1), 'Change size';

# extend (1 test)
eval { $a1[77] = 88; };
is $@ => expected(__LINE__- 1), 'Extend';

# exists (2 tests)
SKIP: {
    skip "Can't do exists on array until Perl 5.6", 2 if $] < 5.006;
    eval 'ok(exists $a2[4], "Global exists")';
    eval 'ok(!exists $ma1[4], "Lexical exists")';
}

# clear (1 test)
eval { @a1 = (); };
is $@ => expected(__LINE__- 1), 'clear';
TODO: {
    local $TODO
        = 'perl *could* mess with some readonly vars before 5.12 stable';

    # push (1 test)
    eval { push @ma1, -1; };
    is $@ => expected(__LINE__- 1), 'push';
}

# unshift (1 test)
eval { unshift @a2, -1; };
is $@ => expected(__LINE__- 1), 'unshift';

# pop (1 test)
eval { pop(@a2); };
is $@ => expected(__LINE__- 1), 'pop';

# shift (1 test)
eval { shift(@a2); };
is $@ => expected(__LINE__- 1), 'shift';
TODO: {
    local $TODO = "Can't test splice on readonly array; bug in perl";

    # splice (1 test)
    eval { splice @a2, 0, 1; };
    is $@ => expected(__LINE__- 1), 'splice';
}
done_testing;