Add failing test for initializer with class attr
Dave Rolsky [Fri, 18 Nov 2011 19:36:07 +0000 (13:36 -0600)]
t/12-with-initializer.t [new file with mode: 0644]

diff --git a/t/12-with-initializer.t b/t/12-with-initializer.t
new file mode 100644 (file)
index 0000000..61545c8
--- /dev/null
@@ -0,0 +1,80 @@
+use strict;
+use warnings;
+use Test::More;
+
+{
+    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__ }
+    );
+}
+
+{
+    local $TODO
+        = 'Class attributes with an initializer are not initialized properly';
+
+    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" );
+
+done_testing();