#!/usr/bin/perl use strict; use warnings; use Test::More 'no_plan'; use Test::Exception; use ok 'MooseX::Types::DateTime'; use Moose::Util::TypeConstraints; isa_ok( find_type_constraint($_), "Moose::Meta::TypeConstraint" ) for qw(DateTime DateTime::TimeZone DateTime::Locale); { { package Foo; use Moose; has date => ( isa => "DateTime", is => "rw", coerce => 1, ); } my $epoch = time; my $coerced = Foo->new( date => $epoch )->date; isa_ok( $coerced, "DateTime", "coerced epoch into datetime" ); is( $coerced->epoch, $epoch, "epoch is correct" ); isa_ok( Foo->new( date => { year => 2000, month => 1, day => 1 } )->date, "DateTime" ); isa_ok( Foo->new( date => 'now' )->date, "DateTime" ); throws_ok { Foo->new( date => "junk1!!" ) } qr/DateTime/, "constraint"; } { { package Quxx; use Moose; has duration => ( isa => "DateTime::Duration", is => "rw", coerce => 1, ); } my $coerced = Quxx->new( duration => 10 )->duration; isa_ok( $coerced, "DateTime::Duration", "coerced from seconds" ); my $time = time; my $now = DateTime->from_epoch( epoch => $time ); my $future = $now + $coerced; is( $future->epoch, ( $time + 10 ), "coerced value" ); isa_ok( Quxx->new( duration => { minutes => 2 } )->duration, "DateTime::Duration", "coerced from hash" ); throws_ok { Quxx->new( duration => "ahdstkljhat" ) } qr/DateTime/, "constraint"; } { { package Bar; use Moose; has time_zone => ( isa => "DateTime::TimeZone", is => "rw", coerce => 1, ); } my $tz = Bar->new( time_zone => "Africa/Timbuktu" )->time_zone; isa_ok( $tz, "DateTime::TimeZone", "coerced string into time zone object" ); like( $tz->name, qr/^Africa/, "correct time zone" ); dies_ok { Bar->new( time_zone => "Space/TheMoon" ) } "bad time zone"; } { { package Gorch; use Moose; has loc => ( isa => "DateTime::Locale", is => "rw", coerce => 1, ); } my $loc = Gorch->new( loc => "he_IL" )->loc; isa_ok( $loc, "DateTime::Locale::he", "coerced from string" ); dies_ok { Gorch->new( loc => "not_a_place_or_a_locale" ) } "bad locale name"; SKIP: { skip "No Locale::Maketext", 2 unless eval { require Locale::Maketext }; { package Some::L10N; our @ISA = qw(Locale::Maketext); package Some::L10N::ja; our @ISA = qw(Some::L10N); our %Lexicon = ( goodbye => "sayonara", ); } my $handle = Some::L10N->get_handle("ja"); isa_ok( $handle, "Some::L10N", "maketext handle" ); isa_ok( Gorch->new( loc => $handle )->loc, "DateTime::Locale::ja", "coerced from maketext" );; } } { { package Gondor; use Moose; use MooseX::Types::DateTime qw(DateTime Duration); has 'date' => (is=>'rw', isa=>DateTime, coerce=>1); has 'duration' => (is=>'rw', isa=>Duration, coerce=>1); } my $epoch = time; ok my $gondor = Gondor->new(date=>$epoch, duration=>10) => 'Instantiated object using export types'; }