Move is_valid_class_name into XS
[gitmo/Mouse.git] / t / 001_mouse / 041-enum.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 19;
5 use Test::Exception;
6
7 do {
8     package Shirt;
9     use Mouse;
10     use Mouse::Util::TypeConstraints 'enum';
11
12     enum 'Size' => qw(small medium large);
13
14     has size => (
15         is  => 'rw',
16         isa => 'Size',
17     );
18
19     package Shirt::Anon;
20     use Mouse;
21     use Mouse::Util::TypeConstraints 'enum';
22
23     has size => (
24         is  => 'rw',
25         isa => enum ['small', 'medium', 'large'],
26     );
27 };
28
29 for my $class ('Shirt', 'Shirt::Anon') {
30     ok($class->new(size => 'small'));
31     ok($class->new(size => 'medium'));
32     ok($class->new(size => 'large'));
33
34     throws_ok { $class->new(size => 'extra small') } qr/^Attribute \(size\) does not pass the type constraint because: Validation failed for '\S+' failed with value extra small/;
35     throws_ok { $class->new(size => 'Small') } qr/^Attribute \(size\) does not pass the type constraint because: Validation failed for '\S+' failed with value Small/;
36     throws_ok { $class->new(size => '') } qr/^Attribute \(size\) does not pass the type constraint because: Validation failed for '\S+' failed with value /;
37     throws_ok { $class->new(size => 'small ') } qr/^Attribute \(size\) does not pass the type constraint because: Validation failed for '\S+' failed with value small /;
38     throws_ok { $class->new(size => ' small') } qr/^Attribute \(size\) does not pass the type constraint because: Validation failed for '\S+' failed with value  small/;
39 }
40
41 use Mouse::Util::TypeConstraints qw(enum);
42
43 my $t = enum 'Foo', [qw(foo bar)];
44
45 ok $t->check('foo'), 'enum $name, $array_ref';
46 ok $t->check('bar');
47 ok!$t->check('baz');
48