simplification of code, fixes #45260 and makes behavior same as Moose attributes
[gitmo/MooseX-ClassAttribute.git] / t / 05-with-initializer.t
1 use strict;
2 use warnings;
3
4 package ClassFoo;
5 use Moose;
6 use MooseX::ClassAttribute;
7
8 class_has 'chas' => (
9     isa         => 'Int',
10     is          => 'ro',
11     default     => 1,
12     initializer => sub { $_[2]->($_[1] + 1) }
13 );
14
15 package ClassBar;
16 use Moose;
17
18 has 'chas' => (
19     isa         => 'Int',
20     is          => 'ro',
21     default     => 1,
22     initializer => sub { $_[2]->($_[1] + 1) }
23 );
24
25 package ClassBaz;
26 use Moose;
27 use MooseX::ClassAttribute;
28
29 class_has 'chas' => (
30     isa     => 'Str',
31     is      => 'rw',
32     default => 'Foobar',
33     trigger => sub { die __PACKAGE__ }
34 );
35
36 package ClassQuz;
37 use Moose;
38
39 has 'chas' => (
40     isa     => 'Str',
41     is      => 'rw',
42     default => 'Foobar',
43     trigger => sub { die __PACKAGE__ }
44 );
45
46
47
48 package main;
49 use Test::More tests => 4;
50
51 is ( ClassFoo->chas, 2, "ClassFoo's class_has (ClassAttribute) initializer fires" );
52
53 is ( ClassBar->new->chas, 2, "ClassBar's has (non-ClassAttribute) initializer fires" );
54
55 eval { ClassBaz->new->chas('foobar') };
56 like ( $@, qr/ClassBaz/, "ClassBaz's class_has (ClassAttribute) trigger fires" );
57
58 eval { ClassQuz->new->chas('foobar') };
59 like ( $@, qr/ClassQuz/, "ClassQuz's has (non-ClassAttribute) trigger fires" );