4 use Test::More tests => 28;
9 use ok 'MooseX::Types::DateTime::MoreCoercions';
13 t/02_datetimex.t - Check that we can properly coerce a string.
17 Run some tests to make sure the the Duration and DateTime types continue to
18 work exactly as from the L<MooseX::Types::DateTime> class, as well as perform
19 the correct string to object coercions.
23 This module defines the following tests.
27 Create a L<Moose> class that is using the L<MooseX::Types::DateTime::MoreCoercions> types.
32 package MooseX::Types::DateTime::MoreCoercions::CoercionTest;
35 use MooseX::Types::DateTime::MoreCoercions qw(DateTime Duration);
37 has 'date' => (is=>'rw', isa=>DateTime, coerce=>1);
38 has 'duration' => (is=>'rw', isa=>Duration, coerce=>1);
41 ok my $class = MooseX::Types::DateTime::MoreCoercions::CoercionTest->new
42 => 'Created a good class';
45 =head2 ParseDateTime Capabilities
47 parse some dates and make sure the system can actually find something.
52 my ( $date, $canon ) = @_;
53 local $Test::Builder::Level = $Test::Builder::Level + 1;
56 skip "DateTimeX::Easy couldn't parse '$date'", $canon ? 2 : 1 unless DateTimeX::Easy->new($date);
57 ok( $class->date($date), "coerced a DateTime from '$date'" );
58 is( $class->date, $canon, 'got correct date' ) if $canon;
62 ## Skip this test until I can figure out better timezone handling
63 #coerce_ok ('2/13/1969 noon', '1969-02-13T11:00:00' );
66 coerce_ok( '2/13/1969', '1969-02-13T00:00:00' );
68 coerce_ok( '2/13/1969 America/New_York', '1969-02-13T00:00:00' );
71 skip "couldn't parse", 1 unless $class->date;
72 isa_ok $class->date->time_zone => 'DateTime::TimeZone::America::New_York'
73 => 'Got Correct America/New_York TimeZone';
76 coerce_ok( 'jan 1 2006', '2006-01-01T00:00:00' );
80 Stuff like "yesterday". We can make sure they returned something but we have
81 no way to make sure the values are really correct. Manual testing suggests
82 they work well enough, given the inherent ambiguity we are dealing with.
88 coerce_ok("yesterday");
90 coerce_ok("tomorrow");
92 coerce_ok("last week");
94 =head2 check inherited constraints
96 Just a few tests to make sure the object, hash, etc coercions and type checks
101 ok my $datetime = DateTime->now()
102 => 'Create a datetime object for testing';
104 ok my $anyobject = bless({}, 'Bogus::Does::Not::Exist')
105 => 'Created a random object for proving the object constraint';
107 ok $class->date($datetime)
108 => 'Passed Object type constraint test.';
110 isa_ok $class->date => 'DateTime'
111 => 'Got a good DateTime Object';
113 dies_ok { $class->date($anyobject) } 'Does not allow the bad object';
115 ok $class->date(1000)
116 => 'Passed Num coercion test.';
118 isa_ok $class->date => 'DateTime'
119 => 'Got a good DateTime Object';
121 is $class->date => '1970-01-01T00:16:40'
122 => 'Got correct DateTime';
124 ok $class->date({year=>2000,month=>1,day=>10})
125 => 'Passed HashRef coercion test.';
127 isa_ok $class->date => 'DateTime'
128 => 'Got a good DateTime Object';
130 is $class->date => '2000-01-10T00:00:00'
131 => 'Got correct DateTime';
133 =head2 check duration
135 make sure the Duration type constraint works as expected
139 ok $class->duration(100)
140 => 'got duration from integer';
142 is $class->duration->seconds, 100
143 => 'got correct duration from integer';
146 ok $class->duration('1 minute')
147 => 'got duration from string';
149 is $class->duration->seconds, 60
150 => 'got correct duration string';
155 John Napiorkowski E<lt>jjn1056 at yahoo.comE<gt>
159 Copyright (c) 2008 John Napiorkowski. All rights reserved
160 This program is free software; you can redistribute
161 it and/or modify it under the same terms as Perl itself.