added default {} keyword
[gitmo/Moose.git] / t / 201_example.t
CommitLineData
bdabd620 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
06b30515 6use Test::More tests => 1;
bdabd620 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose');
11}
12
13## Roles
14
06b30515 15=begin nonsense
16
bdabd620 17{
446e850f 18 package Constraint;
bdabd620 19 use Moose::Role;
446e850f 20
81dc201f 21 has 'value' => (isa => 'Num', is => 'ro');
446e850f 22
23 around 'validate' => sub {
24 my $c = shift;
25 my ($self, $field) = @_;
26 return undef if $c->($self, $self->validation_value($field));
27 return $self->error_message;
28 };
bdabd620 29
446e850f 30 sub validation_value {
31 my ($self, $field) = @_;
32 return $field;
bdabd620 33 }
34
446e850f 35 sub error_message { confess "Abstract method!" }
36
37 package Constraint::OnLength;
bdabd620 38 use Moose::Role;
446e850f 39
40 has 'units' => (isa => 'Str', is => 'ro');
41
42 override 'validation_value' => sub {
43 return length(super());
44 };
45
46 override 'error_message' => sub {
47 my $self = shift;
48 return super() . ' ' . $self->units;
49 };
50
bdabd620 51}
52
446e850f 53## Classes
bdabd620 54
55{
446e850f 56 package Constraint::AtLeast;
bdabd620 57 use Moose;
bdabd620 58
446e850f 59 with 'Constraint';
bdabd620 60
446e850f 61 sub validate {
62 my ($self, $field) = @_;
63 ($field >= $self->value);
64 }
bdabd620 65
446e850f 66 sub error_message { 'must be at least ' . (shift)->value; }
bdabd620 67
446e850f 68 package Constraint::NoMoreThan;
446e850f 69 use Moose;
70
71 with 'Constraint';
bdabd620 72
446e850f 73 sub validate {
74 my ($self, $field) = @_;
75 ($field <= $self->value);
76 }
bdabd620 77
446e850f 78 sub error_message { 'must be no more than ' . (shift)->value; }
bdabd620 79
446e850f 80 package Constraint::LengthNoMoreThan;
446e850f 81 use Moose;
bdabd620 82
446e850f 83 extends 'Constraint::NoMoreThan';
84 with 'Constraint::OnLength';
85
86 package Constraint::LengthAtLeast;
446e850f 87 use Moose;
88
89 extends 'Constraint::AtLeast';
90 with 'Constraint::OnLength';
91}
bdabd620 92
446e850f 93my $no_more_than_10 = Constraint::NoMoreThan->new(value => 10);
94isa_ok($no_more_than_10, 'Constraint::NoMoreThan');
bdabd620 95
446e850f 96ok($no_more_than_10->does('Constraint'), '... Constraint::NoMoreThan does Constraint');
bdabd620 97
446e850f 98ok(!defined($no_more_than_10->validate(1)), '... validated correctly');
99is($no_more_than_10->validate(11), 'must be no more than 10', '... validation failed correctly');
bdabd620 100
446e850f 101my $at_least_10 = Constraint::AtLeast->new(value => 10);
102isa_ok($at_least_10, 'Constraint::AtLeast');
bdabd620 103
446e850f 104ok($at_least_10->does('Constraint'), '... Constraint::AtLeast does Constraint');
bdabd620 105
446e850f 106ok(!defined($at_least_10->validate(11)), '... validated correctly');
107is($at_least_10->validate(1), 'must be at least 10', '... validation failed correctly');
bdabd620 108
446e850f 109# onlength
bdabd620 110
446e850f 111my $no_more_than_10_chars = Constraint::LengthNoMoreThan->new(value => 10, units => 'chars');
112isa_ok($no_more_than_10_chars, 'Constraint::LengthNoMoreThan');
113isa_ok($no_more_than_10_chars, 'Constraint::NoMoreThan');
bdabd620 114
446e850f 115ok($no_more_than_10_chars->does('Constraint'), '... Constraint::LengthNoMoreThan does Constraint');
116ok($no_more_than_10_chars->does('Constraint::OnLength'), '... Constraint::LengthNoMoreThan does Constraint::OnLength');
bdabd620 117
446e850f 118ok(!defined($no_more_than_10_chars->validate('foo')), '... validated correctly');
119is($no_more_than_10_chars->validate('foooooooooo'),
120 'must be no more than 10 chars',
121 '... validation failed correctly');
1331430a 122
446e850f 123my $at_least_10_chars = Constraint::LengthAtLeast->new(value => 10, units => 'chars');
124isa_ok($at_least_10_chars, 'Constraint::LengthAtLeast');
125isa_ok($at_least_10_chars, 'Constraint::AtLeast');
bdabd620 126
446e850f 127ok($at_least_10_chars->does('Constraint'), '... Constraint::LengthAtLeast does Constraint');
128ok($at_least_10_chars->does('Constraint::OnLength'), '... Constraint::LengthAtLeast does Constraint::OnLength');
bdabd620 129
446e850f 130ok(!defined($at_least_10_chars->validate('barrrrrrrrr')), '... validated correctly');
131is($at_least_10_chars->validate('bar'), 'must be at least 10 chars', '... validation failed correctly');
bdabd620 132
06b30515 133=cut