Some small test improvements.
[gitmo/MooseX-ClassAttribute.git] / t / lib / SharedTests.pm
CommitLineData
0f24a39d 1package SharedTests;
2
3use strict;
4use warnings;
5
6use Scalar::Util qw( isweak );
7use 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 {
6b059c78 38 my $self = shift;
0f24a39d 39
6b059c78 40 $self->ObjectCount( $self->ObjectCount() + 1 );
0f24a39d 41 }
42}
43
44sub 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 {
6b059c78 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,
0f24a39d 72 'class attributes are not affected by constructor params' );
73 }
74
75 {
76 my $object = bless {}, 'Thing';
77
78 HasClassAttribute->WeakAttribute($object);
79
6b059c78 80 undef $object;
81
82 ok( ! defined HasClassAttribute->WeakAttribute(),
0f24a39d 83 'weak class attributes are weak' );
84 }
85}
86
87
881;