Commit | Line | Data |
8b978dd5 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
1a7ebbb3 |
6 | use Test::More tests => 19; |
0882828e |
7 | use Test::Exception; |
8b978dd5 |
8 | |
9 | BEGIN { |
10 | use_ok('Class::MOP'); |
11 | use_ok('Class::MOP::Class'); |
12 | } |
13 | |
14 | { |
15 | package Foo; |
aa448b16 |
16 | use metaclass; |
8b978dd5 |
17 | our $VERSION = '0.01'; |
18 | |
19 | package Bar; |
20 | our @ISA = ('Foo'); |
21 | } |
22 | |
aa448b16 |
23 | my $Foo = Foo->meta; |
8b978dd5 |
24 | isa_ok($Foo, 'Class::MOP::Class'); |
25 | |
aa448b16 |
26 | my $Bar = Bar->meta; |
8b978dd5 |
27 | isa_ok($Bar, 'Class::MOP::Class'); |
28 | |
29 | is($Foo->name, 'Foo', '... Foo->name == Foo'); |
30 | is($Bar->name, 'Bar', '... Bar->name == Bar'); |
31 | |
32 | is($Foo->version, '0.01', '... Foo->version == 0.01'); |
33 | is($Bar->version, undef, '... Bar->version == undef'); |
34 | |
35 | is_deeply([$Foo->superclasses], [], '... Foo has no superclasses'); |
36 | is_deeply([$Bar->superclasses], ['Foo'], '... Bar->superclasses == (Foo)'); |
37 | |
38 | $Foo->superclasses('UNIVERSAL'); |
39 | |
40 | is_deeply([$Foo->superclasses], ['UNIVERSAL'], '... Foo->superclasses == (UNIVERSAL) now'); |
41 | |
42 | is_deeply( |
43 | [ $Foo->class_precedence_list ], |
44 | [ 'Foo', 'UNIVERSAL' ], |
45 | '... Foo->class_precedence_list == (Foo, UNIVERSAL)'); |
46 | |
47 | is_deeply( |
48 | [ $Bar->class_precedence_list ], |
49 | [ 'Bar', 'Foo', 'UNIVERSAL' ], |
50 | '... Bar->class_precedence_list == (Bar, Foo, UNIVERSAL)'); |
51 | |
52 | # create a class using Class::MOP::Class ... |
53 | |
54 | my $Baz = Class::MOP::Class->create( |
55 | 'Baz' => '0.10' => ( |
56 | superclasses => [ 'Bar' ] |
57 | )); |
58 | isa_ok($Baz, 'Class::MOP::Class'); |
aa448b16 |
59 | is(Baz->meta, $Baz, '... our metaclasses are singletons'); |
8b978dd5 |
60 | |
61 | is($Baz->name, 'Baz', '... Baz->name == Baz'); |
62 | is($Baz->version, '0.10', '... Baz->version == 0.10'); |
63 | |
64 | is_deeply([$Baz->superclasses], ['Bar'], '... Baz->superclasses == (Bar)'); |
65 | |
66 | is_deeply( |
67 | [ $Baz->class_precedence_list ], |
68 | [ 'Baz', 'Bar', 'Foo', 'UNIVERSAL' ], |
69 | '... Baz->class_precedence_list == (Baz, Bar, Foo, UNIVERSAL)'); |