Some errors for auto_deref
Shawn M Moore [Tue, 10 Jun 2008 05:29:52 +0000 (05:29 +0000)]
lib/Mouse/Meta/Attribute.pm
t/026-auto-deref.t

index 64d3d6e..0d25298 100644 (file)
@@ -162,6 +162,14 @@ sub create {
         if ref($args{default})
         && ref($args{default}) ne 'CODE';
 
+    confess "You cannot auto-dereference without specifying a type constraint on attribute $name"
+        if $args{auto_deref} && !exists($args{isa});
+
+    confess "You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute $name"
+        if $args{auto_deref}
+        && $args{isa} ne 'ArrayRef'
+        && $args{isa} ne 'HashRef';
+
     $args{type_constraint} = delete $args{isa}
         if exists $args{isa};
 
index 0edffed..b9a4971 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 use strict;
 use warnings;
-use Test::More tests => 13;
+use Test::More tests => 15;
 use Test::Exception;
 
 do {
@@ -19,6 +19,21 @@ do {
         isa        => 'HashRef',
         auto_deref => 1,
     );
+
+    ::throws_ok {
+        has any => (
+            is         => 'rw',
+            auto_deref => 1,
+        );
+    } qr/You cannot auto-dereference without specifying a type constraint on attribute any/;
+
+    ::throws_ok {
+        has scalar => (
+            is         => 'rw',
+            isa        => 'Value',
+            auto_deref => 1,
+        );
+    } qr/You cannot auto-dereference anything other than a ArrayRef or HashRef on attribute scalar/;
 };
 
 my $obj;