summaryrefslogtreecommitdiff
path: root/t/cmop/attribute_introspection.t
diff options
context:
space:
mode:
Diffstat (limited to 't/cmop/attribute_introspection.t')
-rw-r--r--t/cmop/attribute_introspection.t131
1 files changed, 131 insertions, 0 deletions
diff --git a/t/cmop/attribute_introspection.t b/t/cmop/attribute_introspection.t
new file mode 100644
index 0000000..dc99492
--- /dev/null
+++ b/t/cmop/attribute_introspection.t
@@ -0,0 +1,131 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Class::MOP;
+
+{
+ my $attr = Class::MOP::Attribute->new('$test');
+ is( $attr->meta, Class::MOP::Attribute->meta,
+ '... instance and class both lead to the same meta' );
+}
+
+{
+ my $meta = Class::MOP::Attribute->meta();
+ isa_ok( $meta, 'Class::MOP::Class' );
+
+ my @methods = qw(
+ new
+ clone
+
+ initialize_instance_slot
+ _set_initial_slot_value
+ _make_initializer_writer_callback
+
+ name
+ has_accessor accessor
+ has_writer writer
+ has_write_method get_write_method get_write_method_ref
+ has_reader reader
+ has_read_method get_read_method get_read_method_ref
+ has_predicate predicate
+ has_clearer clearer
+ has_builder builder
+ has_init_arg init_arg
+ has_default default is_default_a_coderef
+ has_initializer initializer
+ has_insertion_order insertion_order _set_insertion_order
+
+ definition_context
+
+ slots
+ get_value
+ set_value
+ get_raw_value
+ set_raw_value
+ set_initial_value
+ has_value
+ clear_value
+
+ associated_class
+ attach_to_class
+ detach_from_class
+
+ accessor_metaclass
+
+ associated_methods
+ associate_method
+
+ _process_accessors
+ _accessor_description
+ install_accessors
+ remove_accessors
+
+ _inline_get_value
+ _inline_set_value
+ _inline_has_value
+ _inline_clear_value
+ _inline_instance_get
+ _inline_instance_set
+ _inline_instance_has
+ _inline_instance_clear
+
+ _new
+ );
+
+ is_deeply(
+ [
+ sort Class::MOP::Mixin::AttributeCore->meta->get_method_list,
+ $meta->get_method_list
+ ],
+ [ sort @methods ],
+ '... our method list matches'
+ );
+
+ foreach my $method_name (@methods) {
+ ok( $meta->find_method_by_name($method_name),
+ '... Class::MOP::Attribute->find_method_by_name(' . $method_name . ')' );
+ }
+
+ my @attributes = (
+ 'name',
+ 'accessor',
+ 'reader',
+ 'writer',
+ 'predicate',
+ 'clearer',
+ 'builder',
+ 'init_arg',
+ 'initializer',
+ 'definition_context',
+ 'default',
+ 'associated_class',
+ 'associated_methods',
+ 'insertion_order',
+ );
+
+ is_deeply(
+ [
+ sort Class::MOP::Mixin::AttributeCore->meta->get_attribute_list,
+ $meta->get_attribute_list
+ ],
+ [ sort @attributes ],
+ '... our attribute list matches'
+ );
+
+ foreach my $attribute_name (@attributes) {
+ ok( $meta->find_attribute_by_name($attribute_name),
+ '... Class::MOP::Attribute->find_attribute_by_name('
+ . $attribute_name
+ . ')' );
+ }
+
+ # We could add some tests here to make sure that
+ # the attribute have the appropriate
+ # accessor/reader/writer/predicate combinations,
+ # but that is getting a little excessive so I
+ # wont worry about it for now. Maybe if I get
+ # bored I will do it.
+}
+
+done_testing;