Redid conversion to Test::Fatal
[gitmo/Moose.git] / t / 020_attributes / 022_illegal_options_for_inheritance.t
CommitLineData
7782e1da 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use Test::More;
b10dde3a 6use Test::Fatal;
7782e1da 7
ec835085 8{
9 package Foo;
10 use Moose;
11
12 has foo => (
13 is => 'ro',
14 );
7782e1da 15
ec835085 16 has bar => (
17 clearer => 'clear_bar',
18 );
19}
7782e1da 20
21{
ec835085 22 package Foo::Sub;
7782e1da 23 use Moose;
24
ec835085 25 extends 'Foo';
7782e1da 26
b10dde3a 27 ::is( ::exception { has '+foo' => (is => 'rw') }, undef, "can override is" );
28 ::like( ::exception { has '+foo' => (reader => 'bar') }, qr/illegal/, "can't override reader" );
29 ::is( ::exception { has '+foo' => (clearer => 'baz') }, undef, "can override unspecified things" );
ec835085 30
b10dde3a 31 ::like( ::exception { has '+bar' => (clearer => 'quux') }, qr/illegal/, "can't override clearer" );
32 ::is( ::exception { has '+bar' => (predicate => 'has_bar') }, undef, "can override unspecified things" );
ec835085 33}
34
35{
36 package Bar::Meta::Attribute;
37 use Moose::Role;
38
39 has my_illegal_option => (is => 'ro');
7782e1da 40
41 around illegal_options_for_inheritance => sub {
ec835085 42 return (shift->(@_), 'my_illegal_option');
7782e1da 43 };
ec835085 44}
7782e1da 45
ec835085 46{
7782e1da 47 package Bar;
48 use Moose;
49
b10dde3a 50 ::is( ::exception {
ec835085 51 has bar => (
52 traits => ['Bar::Meta::Attribute'],
53 my_illegal_option => 'FOO',
54 is => 'bare',
55 );
b10dde3a 56 }, undef, "can use illegal options" );
ec835085 57
58 has baz => (
59 traits => ['Bar::Meta::Attribute'],
60 is => 'bare',
7782e1da 61 );
62}
63
ec835085 64{
65 package Bar::Sub;
66 use Moose;
67
68 extends 'Bar';
69
b10dde3a 70 ::like( ::exception { has '+bar' => (my_illegal_option => 'BAR') }, qr/illegal/, "can't override illegal attribute" );
71 ::is( ::exception { has '+baz' => (my_illegal_option => 'BAR') }, undef, "can add illegal option if superclass doesn't set it" );
ec835085 72}
73
7782e1da 74my $bar_attr = Bar->meta->get_attribute('bar');
ec835085 75ok((grep { $_ eq 'my_illegal_option' } $bar_attr->illegal_options_for_inheritance) > 0, '... added my_illegal_option as illegal option for inheritance');
7782e1da 76
77done_testing;