added check for an even number of options to 'has'
michaelr [Wed, 13 May 2009 19:23:45 +0000 (14:23 -0500)]
lib/Moose.pm
t/020_attributes/012_misc_attribute_tests.t

index e5880c2..40fc9e2 100644 (file)
@@ -67,7 +67,7 @@ sub has {
     my $name  = shift;
 
     Moose->throw_error('Usage: has \'name\' => ( key => value, ... )')
-        if @_ == 1;
+        if @_ % 2 == 1;
 
     my %options = ( definition_context => _caller_info(), @_ );
     my $attrs = ( ref($name) eq 'ARRAY' ) ? $name : [ ($name) ];
index ac3372b..ad66b63 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 47;
+use Test::More tests => 48;
 use Test::Exception;
 
 
@@ -262,3 +262,15 @@ lives_ok { OutOfClassTest->can('has')->('bar'); } 'create attr via can';
 
 ok(OutOfClassTest->meta->get_attribute('foo'), 'attr created from sub call');
 ok(OutOfClassTest->meta->get_attribute('bar'), 'attr created from can');
+
+
+{
+    {
+        package Foo;
+        use Moose;
+
+        ::throws_ok { has 'foo' => ( 'ro', isa => 'Str' ) }
+            qr/^Usage/, 'has throws error with odd number of attribute options';
+    }
+
+}