whitespace
[gitmo/MooseX-Types-DateTime.git] / t / 02_datetimex.t
CommitLineData
a3f4ab71 1use strict;
2use warnings;
3
4BEGIN {
5
6903978c 6 use Test::More tests => 30;
a3f4ab71 7 use Test::Exception;
8 use DateTime;
9
10 use_ok 'MooseX::Types::DateTimeX';
11}
12
13=head1 NAME
14
6903978c 15t/02_datetimex.t - Check that we can properly coerce a string.
a3f4ab71 16
17=head1 DESCRIPTION
18
6903978c 19Run some tests to make sure the the Duration and DateTime types continue to
20work exactly as from the L<MooseX::Types::DateTime> class, as well as perform
21the correct string to object coercions.
a3f4ab71 22
23=head1 TESTS
24
25This module defines the following tests.
26
27=head2 Test Class
28
29Create a L<Moose> class that is using the L<MooseX::Types::DateTimeX> types.
30
31=cut
32
33{
34 package MooseX::Types::DateTimeX::CoercionTest;
35
36 use Moose;
6903978c 37 use MooseX::Types::DateTimeX qw(DateTime Duration);
a3f4ab71 38
39 has 'date' => (is=>'rw', isa=>DateTime, coerce=>1);
6903978c 40 has 'duration' => (is=>'rw', isa=>Duration, coerce=>1);
a3f4ab71 41}
42
43ok my $class = MooseX::Types::DateTimeX::CoercionTest->new
44=> 'Created a good class';
45
46
47=head2 ParseDateTime Capabilities
48
49parse some dates and make sure the system can actually find something.
50
51=cut
52
53ok $class->date('2/13/1969 noon')
54=> "coerced a DateTime from '2/13/1969 noon'";
55
cc870b60 56is $class->date, '1969-02-13T12:00:00'
57=> 'got correct date';
a3f4ab71 58
59ok $class->date('2/13/1969')
60=> "coerced a DateTime from '2/13/1969'";
61
62 is $class->date, '1969-02-13T00:00:00'
63 => 'got correct date';
64
65ok $class->date('2/13/1969 America/New_York')
66=> "coerced a DateTime from '2/13/1969 America/New_York'";
67
68 isa_ok $class->date->time_zone => 'DateTime::TimeZone::America::New_York'
69 => 'Got Correct America/New_York TimeZone';
70
71 is $class->date, '1969-02-13T00:00:00'
72 => 'got correct date';
73
74ok $class->date('jan 1 2006')
75=>"coerced a DateTime from 'jan 1 2006'";
76
77 is $class->date, '2006-01-01T00:00:00'
78 => 'got correct date';
79
80
81=head2 relative dates
82
83Stuff like "yesterday". We can make sure they returned something but we have
84no way to make sure the values are really correct. Manual testing suggests
85they work well enough, given the inherent ambiguity we are dealing with.
86
87=cut
88
89ok $class->date('now')
90=> "coerced a DateTime from 'now'";
91
92ok $class->date('yesterday')
93=> "coerced a DateTime from 'yesterday'";
94
95
96ok $class->date('tomorrow')
97=> "coerced a DateTime from 'tomorrow'";
98
99
100ok $class->date('last week')
101=> "coerced a DateTime from 'last week'";
102
103
104=head2 check inherited constraints
105
106Just a few tests to make sure the object, hash, etc coercions and type checks
107still work.
108
109=cut
110
111ok my $datetime = DateTime->now()
112=> 'Create a datetime object for testing';
113
114ok my $anyobject = bless({}, 'Bogus::Does::Not::Exist')
115=> 'Created a random object for proving the object constraint';
116
117ok $class->date($datetime)
118=> 'Passed Object type constraint test.';
119
120 isa_ok $class->date => 'DateTime'
121 => 'Got a good DateTime Object';
122
123dies_ok { $class->date($anyobject) } 'Does not allow the bad object';
124
125ok $class->date(1000)
126=> 'Passed Num coercion test.';
127
128 isa_ok $class->date => 'DateTime'
129 => 'Got a good DateTime Object';
130
131 is $class->date => '1970-01-01T00:16:40'
132 => 'Got correct DateTime';
133
134ok $class->date({year=>2000,month=>1,day=>10})
135=> 'Passed HashRef coercion test.';
136
137 isa_ok $class->date => 'DateTime'
138 => 'Got a good DateTime Object';
139
140 is $class->date => '2000-01-10T00:00:00'
141 => 'Got correct DateTime';
142
6903978c 143=head2 check duration
144
145make sure the Duration type constraint works as expected
146
147=cut
148
149ok $class->duration(100)
150=> 'got duration from integer';
151
152 is $class->duration->seconds, 100
153 => 'got correct duration from integer';
154
155
156ok $class->duration('1 minute')
157=> 'got duration from string';
158
159 is $class->duration->seconds, 60
160 => 'got correct duration string';
161
a3f4ab71 162
163=head1 AUTHOR
164
165John Napiorkowski E<lt>jjn1056 at yahoo.comE<gt>
166
167=head1 COPYRIGHT
168
169 Copyright (c) 2008 John Napiorkowski. All rights reserved
170 This program is free software; you can redistribute
171 it and/or modify it under the same terms as Perl itself.
172
173=cut
174
1751;
176