File: 66mop-role.t

package info (click to toggle)
libobject-pad-perl 0.821-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 936 kB
  • sloc: ansic: 3,361; perl: 3,328; pascal: 28; makefile: 3
file content (56 lines) | stat: -rw-r--r-- 1,271 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
#!/usr/bin/perl

use v5.18;
use warnings;

use Test2::V0;

use Object::Pad 0.800 ':experimental(mop)';

role Example {
   no warnings 'deprecated';

   method a_method;
   requires b_method;
}

my $meta = Object::Pad::MOP::Class->for_class( "Example" );

is( $meta->name, "Example", '$meta->name' );
ok(  $meta->is_role, '$meta->is_role true' );
ok( !$meta->is_class, '$meta->is_class false' );

ok( $meta->is_abstract, '$meta->is_abstract true' );

is( [ $meta->required_method_names ], [qw( a_method b_method )],
   '$meta->required_method_names' );

class Implementor {
   apply Example;

   method a_method {}
   method b_method {}
}

is( [ Object::Pad::MOP::Class->for_class( "Implementor" )->direct_roles ],
   [ $meta ],
   '$meta->direct_roles on implementing class' );

is( [ Object::Pad::MOP::Class->for_class( "Implementor" )->all_roles ],
   [ $meta ],
   '$meta->all_roles on implementing class' );

class Inheritor { inherit Implementor; }

# Roles via subclass
{
   is( [ Object::Pad::MOP::Class->for_class( "Inheritor" )->direct_roles ],
      [],
      '$meta->direct_roles on inheriting class' );

   is( [ Object::Pad::MOP::Class->for_class( "Inheritor" )->all_roles ],
      [ $meta ],
      '$meta->all_roles on inheriting class' );
}

done_testing;