12 use MooseX::Params::Validate;
18 my ( $self, %params ) = validated_hash(
20 bar => { isa => 'Str', default => 'Moose' },
22 return "Horray for $params{bar}!";
27 use Moose::Util::TypeConstraints;
28 use MooseX::Params::Validate;
38 { isa => 'ArrayRef | HashRef', optional => 1 },
39 { isa => 'ArrayRef[Int]', optional => 1 },
49 isa => subtype( 'Object' => where { $_->isa('Foo') } ),
52 { does => 'Roles::Blah', optional => 1 },
54 does => role_type('Roles::Blah'),
63 isa_ok( $foo, 'Foo' );
65 is( $foo->baz($foo)->[0], $foo, '... first param must be a Foo instance' );
68 exception { $foo->baz(10) }, qr/\QParameter #1 ("10")/,
69 '... the first param in &baz must be a Foo instance'
72 exception { $foo->baz('foo') }, qr/\QParameter #1 ("foo")/,
73 '... the first param in &baz must be a Foo instance'
76 exception { $foo->baz( [] ) }, qr/\QParameter #1/,
77 '... the first param in &baz must be a Foo instance'
81 $foo->baz( $foo, $foo )->[1], $foo,
82 '... second param must do Roles::Blah'
86 exception { $foo->baz( $foo, 10 ) }, qr/\QParameter #2 ("10")/,
87 '... the second param in &baz must be do Roles::Blah'
90 exception { $foo->baz( $foo, 'foo' ) }, qr/\QParameter #2 ("foo")/,
91 '... the second param in &baz must be do Roles::Blah'
94 exception { $foo->baz( $foo, [] ) }, qr/\QParameter #2/,
95 '... the second param in &baz must be do Roles::Blah'
99 $foo->baz( $foo, $foo, $foo )->[2], $foo,
100 '... third param must do Roles::Blah'
104 exception { $foo->baz( $foo, $foo, 10 ) }, qr/\QParameter #3 ("10")/,
105 '... the third param in &baz must be do Roles::Blah'
108 exception { $foo->baz( $foo, $foo, "foo" ) },
109 qr/\QParameter #3 ("foo")/,
110 '... the third param in &baz must be do Roles::Blah'
113 exception { $foo->baz( $foo, $foo, [] ) }, qr/\QParameter #3/,
114 '... the third param in &baz must be do Roles::Blah'
118 exception { $foo->bar }, qr/\Q0 parameters were passed/,
119 '... bar has a required params'
122 exception { $foo->bar(10) }, qr/\QParameter #1 ("10")/,
123 '... the first param in &bar must be a Foo instance'
126 exception { $foo->bar('foo') }, qr/\QParameter #1 ("foo")/,
127 '... the first param in &bar must be a Foo instance'
130 exception { $foo->bar( [] ) }, qr/\QParameter #1/,
131 '... the first param in &bar must be a Foo instance'
134 exception { $foo->bar() }, qr/\Q0 parameters were passed/,
135 '... bar has a required first param'
141 '... the first param in &bar got a Foo instance'
145 $foo->bar( $foo, [] ),
147 '... the first and second param in &bar got correct args'
151 $foo->bar( $foo, {} ),
153 '... the first param and baz param in &bar got correct args'
157 exception { $foo->bar( $foo, undef ) }, qr/\QParameter #2 (undef)/,
158 '... second param requires a ArrayRef | HashRef'
161 exception { $foo->bar( $foo, 10 ) }, qr/\QParameter #2 ("10")/,
162 '... second param requires a ArrayRef | HashRef'
165 exception { $foo->bar( $foo, 'Foo' ) }, qr/\QParameter #2 ("Foo")/,
166 '... second param requires a ArrayRef | HashRef'
169 exception { $foo->bar( $foo, \( my $var ) ) }, qr/\QParameter #2/,
170 '... second param requires a ArrayRef | HashRef'
174 $foo->bar( $foo, {}, [ 1, 2, 3 ] ),
175 [ $foo, {}, [ 1, 2, 3 ] ],
176 '... the first param in &bar got a Foo instance'
180 exception { $foo->bar( $foo, {}, undef ) }, qr/\QParameter #3 (undef)/,
181 '... third param a ArrayRef[Int]'
184 exception { $foo->bar( $foo, {}, 10 ) }, qr/\QParameter #3 ("10")/,
185 '... third param a ArrayRef[Int]'
188 exception { $foo->bar( $foo, {}, 'Foo' ) }, qr/\QParameter #3 ("Foo")/,
189 '... third param a ArrayRef[Int]'
192 exception { $foo->bar( $foo, {}, \( my $var ) ) }, qr/\QParameter #3/,
193 '... third param a ArrayRef[Int]'
196 exception { $foo->bar( $foo, {}, [qw/one two three/] ) },
197 qr/\QParameter #3/, '... third param a ArrayRef[Int]'