correct captures assignment in quote_sub
[gitmo/Moo.git] / xt / moose-accessor-isa.t
1 use strictures 1;
2 use Test::More;
3 use Test::Fatal;
4
5 {
6    package FrewWithIsa;
7    use Moo::Role;
8    use Sub::Quote;
9
10    has frooh => (
11       is => 'rw',
12       isa => sub { die 'not int' unless $_[0] =~ /^\d$/ },
13    );
14
15    has frew => (
16       is => 'rw',
17       isa => quote_sub(q{ die 'not int' unless $_[0] =~ /^\d$/ }),
18    );
19
20    package Bar;
21    use Moose;
22    with 'FrewWithIsa';
23
24    package OffByOne;
25    use Moo::Role;
26
27    has off_by_one => (is => 'rw', coerce => sub { $_[0] + 1 });
28
29    package Baz;
30    use Moo;
31
32    with 'OffByOne';
33
34    package Quux;
35    use Moose;
36
37    with 'OffByOne';
38
39    __PACKAGE__->meta->make_immutable;
40 }
41
42 is(exception {
43    Bar->new(frooh => 1, frew => 1);
44 }, undef, 'creation of valid Bar');
45
46 ok exception {
47    Bar->new(frooh => 'silly', frew => 1);
48 }, 'creation of invalid Bar validated by coderef';
49
50 ok exception {
51    Bar->new(frooh => 1, frew => 'goose');
52 }, 'creation of invalid Bar validated by quoted sub';
53
54 sub test_off_by_one {
55   my ($class, $type) = @_;
56
57   my $obo = $class->new(off_by_one => 1);
58
59   is($obo->off_by_one, 2, "Off by one (new) ($type)");
60
61   $obo->off_by_one(41);
62
63   is($obo->off_by_one, 42, "Off by one (set) ($type)");
64 }
65
66 test_off_by_one('Baz', 'Moo');
67 test_off_by_one('Quux', 'Moose');
68
69 done_testing;