-#!/usr/bin/perl
-
use strict;
use warnings;
-use Test::More tests => 29;
+use Test::More;
use Test::Exception;
-BEGIN {
- use_ok('Class::MOP');
- use_ok('Class::MOP::Attribute');
-}
+use Class::MOP;
+use Class::MOP::Attribute;
# most values are static
));
} '... no default AND builder';
+ my $undef_attr;
+ lives_ok {
+ $undef_attr = Class::MOP::Attribute->new('$test' => (
+ default => undef,
+ predicate => 'has_test',
+ ));
+ } '... undef as a default is okay';
+ ok($undef_attr->has_default, '... and it counts as an actual default');
+ ok(!Class::MOP::Attribute->new('$test')->has_default,
+ '... but attributes with no default have no default');
+
+ Class::MOP::Class->create(
+ 'Foo',
+ attributes => [$undef_attr],
+ );
+ {
+ my $obj = Foo->meta->new_object;
+ ok($obj->has_test, '... and the default is populated');
+ is($obj->meta->get_attribute('$test')->get_value($obj), undef, '... with the right value');
+ }
+ lives_ok { Foo->meta->make_immutable }
+ '... and it can be inlined';
+ {
+ my $obj = Foo->new;
+ ok($obj->has_test, '... and the default is populated');
+ is($obj->meta->get_attribute('$test')->get_value($obj), undef, '... with the right value');
+ }
+
}
Class::MOP::Attribute->new();
} '... no name argument';
- dies_ok {
+ # These are no longer errors
+ lives_ok {
Class::MOP::Attribute->new('');
} '... bad name argument';
- dies_ok {
+ lives_ok {
Class::MOP::Attribute->new(0);
} '... bad name argument';
}
my $attr = Class::MOP::Attribute->new('$test');
dies_ok {
- $attr->process_accessors('fail', 'my_failing_sub');
+ $attr->_process_accessors('fail', 'my_failing_sub');
} '... cannot find "fail" type generator';
}
));
} '... can create accessors with reader/writers';
}
+
+done_testing;