6 use Scalar::Util qw( isweak );
7 use Test::More tests => 9;
11 package HasClassAttribute;
14 use MooseX::ClassAttribute;
17 ( metaclass => 'ClassAttribute',
23 has 'WeakAttribute' =>
24 ( metaclass => 'ClassAttribute',
40 $self->ObjectCount( $self->ObjectCount() + 1 );
46 local $Test::Builder::Level = $Test::Builder::Level + 1;
49 is( HasClassAttribute->ObjectCount(), 0,
50 'ObjectCount() is 0' );
52 my $hca1 = HasClassAttribute->new();
54 'size is 5 - object attribute works as expected' );
55 is( HasClassAttribute->ObjectCount(), 1,
56 'ObjectCount() is 1' );
58 my $hca2 = HasClassAttribute->new( size => 10 );
59 is( $hca2->size(), 10,
60 'size is 10 - object attribute can be set via constructor' );
61 is( HasClassAttribute->ObjectCount(), 2,
62 'ObjectCount() is 2' );
63 is( $hca2->ObjectCount(), 2,
64 'ObjectCount() is 2 - can call class attribute accessor on object' );
68 eval { HasClassAttribute->new( ObjectCount => 20 ) };
69 like( $@, qr/\QCannot set a class attribute via the constructor (ObjectCount)/,
70 'passing a class attribute to the constructor throws an error' );
71 is( HasClassAttribute->ObjectCount(), 2,
72 'class attributes are not affected by constructor params' );
76 my $object = bless {}, 'Thing';
78 HasClassAttribute->WeakAttribute($object);
82 ok( ! defined HasClassAttribute->WeakAttribute(),
83 'weak class attributes are weak' );