simplification of code, fixes #45260 and makes behavior same as Moose attributes
[gitmo/MooseX-ClassAttribute.git] / t / 05-with-initializer.t
diff --git a/t/05-with-initializer.t b/t/05-with-initializer.t
new file mode 100644 (file)
index 0000000..a04b0f3
--- /dev/null
@@ -0,0 +1,59 @@
+use strict;
+use warnings;
+
+package ClassFoo;
+use Moose;
+use MooseX::ClassAttribute;
+
+class_has 'chas' => (
+    isa         => 'Int',
+    is          => 'ro',
+    default     => 1,
+    initializer => sub { $_[2]->($_[1] + 1) }
+);
+
+package ClassBar;
+use Moose;
+
+has 'chas' => (
+    isa         => 'Int',
+    is          => 'ro',
+    default     => 1,
+    initializer => sub { $_[2]->($_[1] + 1) }
+);
+
+package ClassBaz;
+use Moose;
+use MooseX::ClassAttribute;
+
+class_has 'chas' => (
+    isa     => 'Str',
+    is      => 'rw',
+    default => 'Foobar',
+    trigger => sub { die __PACKAGE__ }
+);
+
+package ClassQuz;
+use Moose;
+
+has 'chas' => (
+    isa     => 'Str',
+    is      => 'rw',
+    default => 'Foobar',
+    trigger => sub { die __PACKAGE__ }
+);
+
+
+
+package main;
+use Test::More tests => 4;
+
+is ( ClassFoo->chas, 2, "ClassFoo's class_has (ClassAttribute) initializer fires" );
+
+is ( ClassBar->new->chas, 2, "ClassBar's has (non-ClassAttribute) initializer fires" );
+
+eval { ClassBaz->new->chas('foobar') };
+like ( $@, qr/ClassBaz/, "ClassBaz's class_has (ClassAttribute) trigger fires" );
+
+eval { ClassQuz->new->chas('foobar') };
+like ( $@, qr/ClassQuz/, "ClassQuz's has (non-ClassAttribute) trigger fires" );
\ No newline at end of file