Move t/*/t into t/001_mouse
[gitmo/Mouse.git] / t / 001_mouse / 022-init-arg.t
CommitLineData
c3398f5b 1#!/usr/bin/env perl
2use strict;
3use warnings;
66e667af 4use Test::More tests => 20;
c3398f5b 5
6do {
7 package Class;
8 use Mouse;
9
10 has name => (
11 is => 'rw',
b4160dbe 12 isa => 'Str',
c3398f5b 13 init_arg => 'key',
14 default => 'default',
15 );
1f679986 16
66e667af 17 has no_init_arg => (
1f679986 18 is => 'rw',
66e667af 19 isa => 'Str',
1f679986 20 init_arg => undef,
21 default => 'default',
22 );
66e667af 23
1f679986 24};
25
66e667af 26for('mutable', 'immutable'){
27 my $object = Class->new;
28 is($object->name, 'default', "accessor uses attribute name ($_)");
29 is($object->{key}, undef, 'nothing in object->{init_arg}!');
30 is($object->{name}, 'default', 'value is in object->{name}');
31
32 my $object2 = Class->new(name => 'name', key => 'key');
33 is($object2->name, 'key', 'attribute value is from name');
34 is($object2->{key}, undef, 'no value for the init_arg');
35 is($object2->{name}, 'key', 'value is in key from name');
36
37 my $attr = $object2->meta->get_attribute('name');
38 ok($attr, 'got the attribute object by name (not init_arg)');
39 is($attr->name, 'name', 'name is name');
40 is($attr->init_arg, 'key', 'init_arg is key');
1f679986 41
66e667af 42 my $object3 = Class->new(no_init_arg => 'joe');
43 is($object3->no_init_arg, 'default', 'init_arg => undef ignores attribute name in the constructor');
6d46df7a 44
66e667af 45 Class->meta->make_immutable;
46}