Tweaks and documenting Mouse::Exporter
[gitmo/Mouse.git] / t / 022-init-arg.t
index 0bfc783..9546e3d 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 use strict;
 use warnings;
-use Test::More tests => 9;
+use Test::More tests => 11;
 
 do {
     package Class;
@@ -9,6 +9,7 @@ do {
 
     has name => (
         is       => 'rw',
+        isa      => 'Str',
         init_arg => 'key',
         default  => 'default',
     );
@@ -16,15 +17,34 @@ do {
 
 my $object = Class->new;
 is($object->name, 'default', 'accessor uses attribute name');
-is($object->{name}, undef, 'nothing in object->{attribute name}!');
-is($object->{key}, 'default', 'value is in object->{init_arg}');
+is($object->{key}, undef, 'nothing in object->{init_arg}!');
+is($object->{name}, 'default', 'value is in object->{name}');
 
 my $object2 = Class->new(name => 'name', key => 'key');
-is($object2->name, 'key', 'attribute value is from init_arg');
-is($object2->{name}, undef, 'no value for the attribute name');
-is($object2->{key}, 'key', 'value is from init_arg parameter');
+is($object2->name, 'key', 'attribute value is from name');
+is($object2->{key}, undef, 'no value for the init_arg');
+is($object2->{name}, 'key', 'value is in key from name');
 
 my $attr = $object2->meta->get_attribute('name');
 ok($attr, 'got the attribute object by name (not init_arg)');
 is($attr->name, 'name', 'name is name');
 is($attr->init_arg, 'key', 'init_arg is key');
+
+do {
+    package Foo;
+    use Mouse;
+
+    has name => (
+        is       => 'rw',
+        init_arg => undef,
+        default  => 'default',
+    );
+};
+
+my $foo = Foo->new(name => 'joe');
+is($foo->name, 'default', 'init_arg => undef ignores attribute name in the constructor');
+
+Foo->meta->make_immutable;
+
+my $bar = Foo->new(name => 'joe');
+is($bar->name, 'default', 'init_arg => undef ignores attribute name in the inlined constructor');