Commit | Line | Data |
c4fe165f |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
4ce56d04 |
6 | use Test::More; |
c4fe165f |
7 | |
8 | use Scalar::Util (); |
9 | |
4ce56d04 |
10 | use Moose::Util::TypeConstraints; |
c4fe165f |
11 | |
12 | enum Letter => 'a'..'z', 'A'..'Z'; |
13 | enum Language => 'Perl 5', 'Perl 6', 'PASM', 'PIR'; # any others? ;) |
bce5d4a5 |
14 | enum Metacharacter => ['*', '+', '?', '.', '|', '(', ')', '[', ']', '\\']; |
c4fe165f |
15 | |
16 | my @valid_letters = ('a'..'z', 'A'..'Z'); |
17 | |
18 | my @invalid_letters = qw/ab abc abcd/; |
19 | push @invalid_letters, qw/0 4 9 ~ @ $ %/; |
20 | push @invalid_letters, qw/l33t st3v4n 3num/; |
21 | |
22 | my @valid_languages = ('Perl 5', 'Perl 6', 'PASM', 'PIR'); |
4ce56d04 |
23 | my @invalid_languages = ('perl 5', 'Python', 'Ruby', 'Perl 666', 'PASM++'); |
24 | # note that "perl 5" is invalid because case now matters |
c4fe165f |
25 | |
26 | my @valid_metacharacters = (qw/* + ? . | ( ) [ ] /, '\\'); |
27 | my @invalid_metacharacters = qw/< > & % $ @ ! ~ `/; |
28 | push @invalid_metacharacters, qw/.* fish(sticks)? atreides/; |
29 | push @invalid_metacharacters, '^1?$|^(11+?)\1+$'; |
30 | |
31 | Moose::Util::TypeConstraints->export_type_constraints_as_functions(); |
32 | |
33 | ok(Letter($_), "'$_' is a letter") for @valid_letters; |
34 | ok(!Letter($_), "'$_' is not a letter") for @invalid_letters; |
35 | |
36 | ok(Language($_), "'$_' is a language") for @valid_languages; |
37 | ok(!Language($_), "'$_' is not a language") for @invalid_languages; |
38 | |
39 | ok(Metacharacter($_), "'$_' is a metacharacter") for @valid_metacharacters; |
40 | ok(!Metacharacter($_), "'$_' is not a metacharacter") |
41 | for @invalid_metacharacters; |
42 | |
9f4334a1 |
43 | # check anon enums |
44 | |
45 | my $anon_enum = enum \@valid_languages; |
46 | isa_ok($anon_enum, 'Moose::Meta::TypeConstraint'); |
47 | |
48 | is($anon_enum->name, '__ANON__', '... got the right name'); |
49 | is($anon_enum->parent->name, 'Str', '... got the right parent name'); |
50 | |
51 | ok($anon_enum->check($_), "'$_' is a language") for @valid_languages; |
52 | |
53 | |
dabed765 |
54 | ok( !$anon_enum->equals( enum [qw(foo bar)] ), "doesn't equal a diff enum" ); |
55 | ok( $anon_enum->equals( $anon_enum ), "equals itself" ); |
56 | ok( $anon_enum->equals( enum \@valid_languages ), "equals duplicate" ); |
4c015454 |
57 | |
58 | ok( !$anon_enum->is_subtype_of('Object'), 'enum not a subtype of Object'); |
59 | ok( !$anon_enum->is_a_type_of('Object'), 'enum not type of Object'); |
60 | |
61 | ok( !$anon_enum->is_subtype_of('ThisTypeDoesNotExist'), 'enum not a subtype of nonexistant type'); |
62 | ok( !$anon_enum->is_a_type_of('ThisTypeDoesNotExist'), 'enum not type of nonexistant type'); |
63 | |
a28e50e4 |
64 | done_testing; |