Commit | Line | Data |
0f24a39d |
1 | package SharedTests; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Scalar::Util qw( isweak ); |
7 | use Test::More tests => 9; |
8 | |
9 | |
10 | { |
11 | package HasClassAttribute; |
12 | |
13 | use Moose; |
14 | use MooseX::ClassAttribute; |
15 | |
16 | has 'ObjectCount' => |
17 | ( metaclass => 'ClassAttribute', |
18 | is => 'rw', |
19 | isa => 'Int', |
20 | default => 0, |
21 | ); |
22 | |
23 | has 'WeakAttribute' => |
24 | ( metaclass => 'ClassAttribute', |
25 | is => 'rw', |
26 | isa => 'Object', |
27 | weak_ref => 1, |
28 | ); |
29 | |
30 | has 'size' => |
31 | ( is => 'rw', |
32 | isa => 'Int', |
33 | default => 5, |
34 | ); |
35 | |
36 | sub BUILD |
37 | { |
38 | my $class = shift; |
39 | |
40 | $class->ObjectCount( $class->ObjectCount() + 1 ); |
41 | } |
42 | } |
43 | |
44 | sub run_tests |
45 | { |
46 | local $Test::Builder::Level = $Test::Builder::Level + 1; |
47 | |
48 | { |
49 | is( HasClassAttribute->ObjectCount(), 0, |
50 | 'ObjectCount() is 0' ); |
51 | |
52 | my $hca1 = HasClassAttribute->new(); |
53 | is( $hca1->size(), 5, |
54 | 'size is 5 - object attribute works as expected' ); |
55 | is( HasClassAttribute->ObjectCount(), 1, |
56 | 'ObjectCount() is 1' ); |
57 | |
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' ); |
65 | } |
66 | |
67 | { |
68 | my $hca3 = HasClassAttribute->new( ObjectCount => 20 ); |
69 | is( $hca3->ObjectCount(), 3, |
70 | 'class attributes are not affected by constructor params' ); |
71 | is( HasClassAttribute->ObjectCount(), 3, |
72 | 'class attributes are not affected by constructor params' ); |
73 | } |
74 | |
75 | { |
76 | my $object = bless {}, 'Thing'; |
77 | |
78 | HasClassAttribute->WeakAttribute($object); |
79 | |
80 | ok( isweak( $HasClassAttribute::__ClassAttribute{WeakAttribute} ), |
81 | 'weak class attributes are weak' ); |
82 | } |
83 | } |
84 | |
85 | |
86 | 1; |