Add failing tests
[gitmo/Mouse.git] / t / 001_mouse / 007-attributes.t
CommitLineData
c3398f5b 1#!/usr/bin/env perl
2use strict;
3use warnings;
8ab2c6ab 4use Test::More;
eab81545 5use Test::Exception;
73e9153a 6use Test::Mouse;
c3398f5b 7
8447b3b1 8use lib 't/lib';
73e9153a 9use MooseCompat;
8447b3b1 10
c3398f5b 11do {
12 package Class;
13 use Mouse;
14
74be9f76 15 has 'x' => (
16 is => 'bare',
17 );
c3398f5b 18
19 has 'y' => (
20 is => 'ro',
21 );
22
23 has 'z' => (
24 is => 'rw',
25 );
a2096df6 26
27 has 'attr' => (
28 accessor => 'rw_attr',
29 reader => 'read_attr',
30 writer => 'write_attr',
31 );
c3398f5b 32};
cfdb93c6 33with_immutable {
34 ok(!Class->can('x'), "No accessor is injected if 'is' has no value");
35 can_ok('Class', 'y', 'z');
36
37 has_attribute_ok 'Class', 'x';
38 has_attribute_ok 'Class', 'y';
39 has_attribute_ok 'Class', 'z';
40
41 my $object = Class->new;
42
43 ok(!$object->can('x'), "No accessor is injected if 'is' has no value");
44 can_ok($object, 'y', 'z');
45
46 is($object->y, undef);
47
48 throws_ok {
49 $object->y(10);
50 } qr/Cannot assign a value to a read-only accessor/;
51
52 is($object->y, undef);
53
54 is($object->z, undef);
55 is($object->z(10), 10);
56 is($object->z, 10);
57
58 can_ok($object, qw(rw_attr read_attr write_attr));
59 $object->write_attr(42);
60 is $object->rw_attr, 42;
61 is $object->read_attr, 42;
62 $object->rw_attr(100);
63 is $object->rw_attr, 100;
64 is $object->read_attr, 100;
65
66 is $object->write_attr("piyo"), "piyo";
67 is $object->rw_attr("yopi"), "yopi";
68
69 dies_ok {
70 Class->rw_attr();
71 };
72 dies_ok {
73 Class->read_attr();
74 };
75 dies_ok {
76 Class->write_attr(42);
77 };
78
79 my @attrs = map { $_->name }
80 sort { $a->insertion_order <=> $b->insertion_order } $object->meta->get_all_attributes;
81 is join(' ', @attrs), 'x y z attr', 'insertion_order';
82} qw(Class);
8ab2c6ab 83done_testing;