13 use Moose::Util::TypeConstraints;
18 => where { defined($_) && !ref($_) && Scalar::Util::looks_like_number($_) };
21 => where { defined($_) && !ref($_) && !Scalar::Util::looks_like_number($_) };
23 has vUndef => ( is => 'rw', isa => 'Undef' );
24 has vDefined => ( is => 'rw', isa => 'Defined' );
25 has vInt => ( is => 'rw', isa => 'Int' );
26 has vNumber => ( is => 'rw', isa => 'Number' );
27 has vStr => ( is => 'rw', isa => 'Str' );
28 has vString => ( is => 'rw', isa => 'String' );
30 has v_lazy_Undef => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'Undef' );
31 has v_lazy_Defined => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'Defined' );
32 has v_lazy_Int => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'Int' );
33 has v_lazy_Number => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'Number' );
34 has v_lazy_Str => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'Str' );
35 has v_lazy_String => ( is => 'rw', lazy => 1, default => sub { undef }, isa => 'String' );
38 # EXPORT TYPE CONSTRAINTS
40 Moose::Util::TypeConstraints->export_type_constraints_as_functions;
42 ok( Undef(undef), '... undef is a Undef');
43 ok(!Defined(undef), '... undef is NOT a Defined');
44 ok(!Int(undef), '... undef is NOT an Int');
45 ok(!Number(undef), '... undef is NOT a Number');
46 ok(!Str(undef), '... undef is NOT a Str');
47 ok(!String(undef), '... undef is NOT a String');
49 ok(!Undef(5), '... 5 is a NOT a Undef');
50 ok(Defined(5), '... 5 is a Defined');
51 ok(Int(5), '... 5 is an Int');
52 ok(Number(5), '... 5 is a Number');
53 ok(Str(5), '... 5 is a Str');
54 ok(!String(5), '... 5 is NOT a String');
56 ok(!Undef(0.5), '... 0.5 is a NOT a Undef');
57 ok(Defined(0.5), '... 0.5 is a Defined');
58 ok(!Int(0.5), '... 0.5 is NOT an Int');
59 ok(Number(0.5), '... 0.5 is a Number');
60 ok(Str(0.5), '... 0.5 is a Str');
61 ok(!String(0.5), '... 0.5 is NOT a String');
63 ok(!Undef('Foo'), '... "Foo" is NOT a Undef');
64 ok(Defined('Foo'), '... "Foo" is a Defined');
65 ok(!Int('Foo'), '... "Foo" is NOT an Int');
66 ok(!Number('Foo'), '... "Foo" is NOT a Number');
67 ok(Str('Foo'), '... "Foo" is a Str');
68 ok(String('Foo'), '... "Foo" is a String');
73 ok ! exception { $foo->vUndef(undef) }, '... undef is a Foo->Undef';
74 ok exception { $foo->vDefined(undef) }, '... undef is NOT a Foo->Defined';
75 ok exception { $foo->vInt(undef) }, '... undef is NOT a Foo->Int';
76 ok exception { $foo->vNumber(undef) }, '... undef is NOT a Foo->Number';
77 ok exception { $foo->vStr(undef) }, '... undef is NOT a Foo->Str';
78 ok exception { $foo->vString(undef) }, '... undef is NOT a Foo->String';
80 ok exception { $foo->vUndef(5) }, '... 5 is NOT a Foo->Undef';
81 ok ! exception { $foo->vDefined(5) }, '... 5 is a Foo->Defined';
82 ok ! exception { $foo->vInt(5) }, '... 5 is a Foo->Int';
83 ok ! exception { $foo->vNumber(5) }, '... 5 is a Foo->Number';
84 ok ! exception { $foo->vStr(5) }, '... 5 is a Foo->Str';
85 ok exception { $foo->vString(5) }, '... 5 is NOT a Foo->String';
87 ok exception { $foo->vUndef(0.5) }, '... 0.5 is NOT a Foo->Undef';
88 ok ! exception { $foo->vDefined(0.5) }, '... 0.5 is a Foo->Defined';
89 ok exception { $foo->vInt(0.5) }, '... 0.5 is NOT a Foo->Int';
90 ok ! exception { $foo->vNumber(0.5) }, '... 0.5 is a Foo->Number';
91 ok ! exception { $foo->vStr(0.5) }, '... 0.5 is a Foo->Str';
92 ok exception { $foo->vString(0.5) }, '... 0.5 is NOT a Foo->String';
94 ok exception { $foo->vUndef('Foo') }, '... "Foo" is NOT a Foo->Undef';
95 ok ! exception { $foo->vDefined('Foo') }, '... "Foo" is a Foo->Defined';
96 ok exception { $foo->vInt('Foo') }, '... "Foo" is NOT a Foo->Int';
97 ok exception { $foo->vNumber('Foo') }, '... "Foo" is NOT a Foo->Number';
98 ok ! exception { $foo->vStr('Foo') }, '... "Foo" is a Foo->Str';
99 ok ! exception { $foo->vString('Foo') }, '... "Foo" is a Foo->String';
103 ok ! exception { $foo->v_lazy_Undef() }, '... undef is a Foo->Undef';
104 ok exception { $foo->v_lazy_Defined() }, '... undef is NOT a Foo->Defined';
105 ok exception { $foo->v_lazy_Int() }, '... undef is NOT a Foo->Int';
106 ok exception { $foo->v_lazy_Number() }, '... undef is NOT a Foo->Number';
107 ok exception { $foo->v_lazy_Str() }, '... undef is NOT a Foo->Str';
108 ok exception { $foo->v_lazy_String() }, '... undef is NOT a Foo->String';