File: access.t

package info (click to toggle)
libclass-std-perl 0.011-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 352 kB
  • ctags: 122
  • sloc: perl: 871; makefile: 2
file content (58 lines) | stat: -rw-r--r-- 2,071 bytes parent folder | download | duplicates (4)
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
use Test::More 'no_plan';

package MyBase;
use Class::Std;
{
    sub everyone             { return 'everyone' }
    sub family   :RESTRICTED { return 'family'   }
    sub personal :PRIVATE    { return 'personal' }

    sub try_all {
        $self = shift;
        for my $method (qw(everyone family personal)) {
            ::is $self->$method(), $method => "Called $method";
        }
    }
}

package MyDer;
use Class::Std;
use base qw( MyBase );
{
    sub everyone             { my $self = shift; $self->SUPER::everyone(); }
    sub family   :RESTRICTED { my $self = shift; $self->SUPER::family(); }
    sub personal :PRIVATE    { my $self = shift; $self->SUPER::personal(); }
}

package main;

my $base_obj = MyBase->new();
my $der_obj  = MyDer->new();

$base_obj->try_all();

ok !eval { $der_obj->try_all(); 1 }   => 'Derived call failed';
like $@, qr/Can't call private method MyDer::personal\(\) from class MyBase/
                                      => '...with correct error message';


is $base_obj->everyone, 'everyone' => 'External everyone succeeded';
ok !eval { $base_obj->family }     => 'External family failed as expected';
like $@, qr/Can't call restricted method MyBase::family\(\) from class main/
                                      => '...with correct error message';

ok !eval { $base_obj->personal }   => 'External personal failed as expected';

like $@, qr/Can't call private method MyBase::personal\(\) from class main/
                                      => '...with correct error message';

is $der_obj->everyone, 'everyone' => 'External derived everyone succeeded';
ok !eval { $der_obj->family }     => 'External derived family failed as expected';
like $@, qr/Can't call restricted method MyDer::family\(\) from class main/
                                      => '...with correct error message';

ok !eval { $der_obj->personal }   => 'External derived personal failed as expected';

like $@, qr/Can't call private method MyDer::personal\(\) from class main/
                                      => '...with correct error message';