Class::MOP - getting there
[gitmo/Class-MOP.git] / t / 010_self_introspection.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More no_plan => 1;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Class::MOP::Class');        
11 }
12
13 my $meta = Class::MOP::Class->meta();
14 isa_ok($meta, 'Class::MOP::Class');
15
16 foreach my $method_name (qw(
17     meta
18     
19     initialize create
20     
21     name version
22     
23     superclasses class_precedence_list
24     
25     has_method get_method add_method remove_method 
26     get_method_list compute_all_applicable_methods find_all_methods_by_name
27     
28     has_attribute get_attribute add_attribute remove_attribute
29     get_attribute_list compute_all_applicable_attributes
30     )) {
31     ok($meta->has_method($method_name), '... Class::MOP::Class->has_method(' . $method_name . ')');
32     {
33         no strict 'refs';
34         is($meta->get_method($method_name), 
35            \&{'Class::MOP::Class::' . $method_name},
36            '... Class::MOP::Class->get_method(' . $method_name . ') == &Class::MOP::Class::' . $method_name);        
37     }
38 }
39
40 foreach my $non_method_name (qw(
41     confess
42     blessed reftype
43     subname
44     svref_2object
45     )) {
46     ok(!$meta->has_method($non_method_name), '... NOT Class::MOP::Class->has_method(' . $non_method_name . ')');        
47 }
48
49 is($meta->name, 'Class::MOP::Class', '... Class::MOP::Class->name');
50 is($meta->version, $Class::MOP::Class::VERSION, '... Class::MOP::Class->version');
51
52 is_deeply(
53     [ $meta->superclasses ], 
54     [], 
55     '... Class::MOP::Class->superclasses == []');
56     
57 is_deeply(
58     [ $meta->class_precedence_list ], 
59     [ 'Class::MOP::Class' ], 
60     '... Class::MOP::Class->class_precedence_list == []');
61