7 plan skip_all => "DateTime::Format::DateManip required" unless eval { require DateTime::Format::DateManip };
14 use ok 'MooseX::Types::DateTimeX';
18 t/02_datetimex.t - Check that we can properly coerce a string.
22 Run some tests to make sure the the Duration and DateTime types continue to
23 work exactly as from the L<MooseX::Types::DateTime> class, as well as perform
24 the correct string to object coercions.
28 This module defines the following tests.
32 Create a L<Moose> class that is using the L<MooseX::Types::DateTimeX> types.
37 package MooseX::Types::DateTimeX::CoercionTest;
40 use MooseX::Types::DateTimeX qw(DateTime Duration);
42 has 'date' => (is=>'rw', isa=>DateTime, coerce=>1);
43 has 'duration' => (is=>'rw', isa=>Duration, coerce=>1);
46 ok my $class = MooseX::Types::DateTimeX::CoercionTest->new
47 => 'Created a good class';
50 =head2 ParseDateTime Capabilities
52 parse some dates and make sure the system can actually find something.
57 my ( $date, $canon ) = @_;
60 skip "DateTimeX::Easy couldn't parse '$date'", $canon ? 2 : 1 unless DateTimeX::Easy->new($date);
61 ok( $class->date($date), "coerced a DateTime from '$date'" );
62 is( $class->date, $canon, 'got correct date' ) if $canon;
66 coerce_ok ('2/13/1969 noon', '1969-02-13T12:00:00' );
69 coerce_ok( '2/13/1969', '1969-02-13T00:00:00' );
71 coerce_ok( '2/13/1969 America/New_York', '1969-02-13T00:00:00' );
74 skip "couldn't parse", 1 unless $class->date;
75 isa_ok $class->date->time_zone => 'DateTime::TimeZone::America::New_York'
76 => 'Got Correct America/New_York TimeZone';
79 coerce_ok( 'jan 1 2006', '2006-01-01T00:00:00' );
83 Stuff like "yesterday". We can make sure they returned something but we have
84 no way to make sure the values are really correct. Manual testing suggests
85 they work well enough, given the inherent ambiguity we are dealing with.
91 coerce_ok("yesterday");
93 coerce_ok("tomorrow");
95 coerce_ok("last week");
97 =head2 check inherited constraints
99 Just a few tests to make sure the object, hash, etc coercions and type checks
104 ok my $datetime = DateTime->now()
105 => 'Create a datetime object for testing';
107 ok my $anyobject = bless({}, 'Bogus::Does::Not::Exist')
108 => 'Created a random object for proving the object constraint';
110 ok $class->date($datetime)
111 => 'Passed Object type constraint test.';
113 isa_ok $class->date => 'DateTime'
114 => 'Got a good DateTime Object';
116 dies_ok { $class->date($anyobject) } 'Does not allow the bad object';
118 ok $class->date(1000)
119 => 'Passed Num coercion test.';
121 isa_ok $class->date => 'DateTime'
122 => 'Got a good DateTime Object';
124 is $class->date => '1970-01-01T00:16:40'
125 => 'Got correct DateTime';
127 ok $class->date({year=>2000,month=>1,day=>10})
128 => 'Passed HashRef coercion test.';
130 isa_ok $class->date => 'DateTime'
131 => 'Got a good DateTime Object';
133 is $class->date => '2000-01-10T00:00:00'
134 => 'Got correct DateTime';
136 =head2 check duration
138 make sure the Duration type constraint works as expected
142 ok $class->duration(100)
143 => 'got duration from integer';
145 is $class->duration->seconds, 100
146 => 'got correct duration from integer';
149 ok $class->duration('1 minute')
150 => 'got duration from string';
152 is $class->duration->seconds, 60
153 => 'got correct duration string';
158 John Napiorkowski E<lt>jjn1056 at yahoo.comE<gt>
162 Copyright (c) 2008 John Napiorkowski. All rights reserved
163 This program is free software; you can redistribute
164 it and/or modify it under the same terms as Perl itself.