use warnings;
use strict;
-use RT::Test tests => 175;
+use RT::Test tests => undef;
use RT::User;
use Test::Warn;
is($date->Timezone('user'),
'Europe/Moscow',
"in user context still returns user's timezone");
-
+
$current_user->UserObj->__Set( Field => 'Timezone', Value => '');
is_empty($current_user->UserObj->Timezone,
"successfuly changed user's timezone");
{
my $date = RT::Date->new(RT->SystemUser);
+ is($date->IsSet,0, "new date isn't set");
is($date->Unix, 0, "new date returns 0 in Unix format");
is($date->Get, '1970-01-01 00:00:00', "default is ISO format");
warning_like {
$current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
my $date = RT::Date->new( $current_user );
$date->Set( Format => 'ISO', Timezone => 'utc', Value => '2005-01-01 15:10:00' );
+ is($date->IsSet,1,"Date has been set");
is($date->ISO( Timezone => 'user' ), '2005-01-01 18:10:00', "ISO");
is($date->W3CDTF( Timezone => 'user' ), '2005-01-01T18:10:00+03:00', "W3C DTF");
is($date->RFC2822( Timezone => 'user' ), 'Sat, 01 Jan 2005 18:10:00 +0300', "RFC2822");
{ # bad format
my $date = RT::Date->new(RT->SystemUser);
$date->Set( Format => 'bad' );
- is($date->Unix, 0, "bad format");
+ ok(!$date->IsSet, "bad format");
} qr{Unknown Date format: bad};
$date->Unix(1);
is($date->ISO, '1970-01-01 00:00:01', "correct value");
- foreach (undef, 0, ''){
+ foreach (undef, 0, '', -5){
$date->Unix(1);
is($date->ISO, '1970-01-01 00:00:01', "correct value");
+ is($date->IsSet,1,"Date has been set to a value");
$date->Set(Format => 'unix', Value => $_);
is($date->ISO, '1970-01-01 00:00:00', "Set a date to midnight 1/1/1970 GMT due to wrong call");
is($date->Unix, 0, "unix is 0 => unset");
+ is($date->IsSet,0,"Date has been unset");
+ }
+
+ foreach (undef, 0, '', -5){
+ $date->Unix(1);
+ is($date->ISO, '1970-01-01 00:00:01', "correct value");
+ is($date->IsSet,1,"Date has been set to a value");
+
+ $date->Unix($_);
+ is($date->ISO, '1970-01-01 00:00:00', "Set a date to midnight 1/1/1970 GMT due to wrong call");
+ is($date->Unix, 0, "unix is 0 => unset");
+ is($date->IsSet,0,"Date has been unset");
}
}
warning_like {
$date->Set(Format => 'ISO', Value => 'weird date');
} qr/Couldn't parse date 'weird date' as a ISO format/;
- is($date->Unix, 0, "date was wrong => unix == 0");
+ ok(!$date->IsSet, "date was wrong => unix == 0");
# XXX: ISO format has more feature than we suport
# http://www.cl.cam.ac.uk/~mgk25/iso-time.html
$date->Set(Format => 'ISO', Value => '112815:10:00');
is($date->ISO, $year .'-11-28 15:10:00', "DDMMhh:mm:ss");
- $date->Set(Format => 'ISO', Value => '2005-13-28 15:10:00');
- is($date->Unix, 0, "wrong month value");
+ warning_like {
+ $date->Set(Format => 'ISO', Value => '2005-13-28 15:10:00');
+ } qr/Invalid date/;
+ ok(!$date->IsSet, "wrong month value");
- $date->Set(Format => 'ISO', Value => '2005-00-28 15:10:00');
- is($date->Unix, 0, "wrong month value");
+ warning_like {
+ $date->Set(Format => 'ISO', Value => '2005-00-28 15:10:00');
+ } qr/Invalid date/;
+ ok(!$date->IsSet, "wrong month value");
$date->Set(Format => 'ISO', Value => '1960-01-28 15:10:00');
- is($date->Unix, 0, "too old, we don't support");
+ ok(!$date->IsSet, "too old, we don't support");
}
{ # set+datemanip format(Time::ParseDate)
warnings_like {
$date->Set(Format => 'unknown', Value => 'weird date');
} qr{Couldn't parse date 'weird date' by Time::ParseDate};
- is($date->Unix, 0, "date was wrong");
+ ok(!$date->IsSet, "date was wrong");
RT->Config->Set( Timezone => 'Europe/Moscow' );
$date->Set(Format => 'unknown', Value => '2005-11-28 15:10:00');
is($date->ISO, '2005-11-28 15:10:00', "YYYY-DD-MM hh:mm:ss");
}
+{ # 'tomorrow 10am' with TZ
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'Europe/Moscow');
+
+ set_fixed_time("2012-06-14T15:10:00Z"); # 14th in UTC and Moscow
+ my $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'unknown', Value => 'tomorrow 10am');
+ is($date->ISO, '2012-06-15 06:00:00', "YYYY-DD-MM hh:mm:ss");
+
+ set_fixed_time("2012-06-13T23:10:00Z"); # 13th in UTC and 14th in Moscow
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'unknown', Value => 'tomorrow 10am');
+ is($date->ISO, '2012-06-15 06:00:00', "YYYY-DD-MM hh:mm:ss");
+
+ $current_user->UserObj->__Set( Field => 'Timezone', Value => 'US/Hawaii');
+
+ set_fixed_time("2012-06-14T20:10:00Z"); # 14th in UTC and Hawaii
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'unknown', Value => 'tomorrow 10am');
+ is($date->ISO, '2012-06-15 20:00:00', "YYYY-DD-MM hh:mm:ss");
+
+ set_fixed_time("2012-06-15T05:10:00Z"); # 15th in UTC and 14th in Hawaii
+ $date = RT::Date->new( $current_user );
+ $date->Set(Format => 'unknown', Value => 'tomorrow 10am');
+ is($date->ISO, '2012-06-15 20:00:00', "YYYY-DD-MM hh:mm:ss");
+
+ restore_time();
+}
+
{ # SetToMidnight
my $date = RT::Date->new(RT->SystemUser);
{ # DurationAsString
my $date = RT::Date->new(RT->SystemUser);
- is($date->DurationAsString(1), '1 sec', '1 sec');
- is($date->DurationAsString(59), '59 sec', '59 sec');
- is($date->DurationAsString(60), '1 min', '1 min');
- is($date->DurationAsString(60*119), '119 min', '119 min');
- is($date->DurationAsString(60*60*2-1), '120 min', '120 min');
+ is($date->DurationAsString(1), '1 second', '1 sec');
+ is($date->DurationAsString(59), '59 seconds', '59 sec');
+ is($date->DurationAsString(60), '1 minute', '1 min');
+ is($date->DurationAsString(60*119), '119 minutes', '119 min');
+ is($date->DurationAsString(60*60*2-1), '120 minutes', '120 min');
is($date->DurationAsString(60*60*2), '2 hours', '2 hours');
is($date->DurationAsString(60*60*48-1), '48 hours', '48 hours');
is($date->DurationAsString(60*60*48), '2 days', '2 days');
is($date->DurationAsString(60*60*24*7*8-1), '8 weeks', '8 weeks');
is($date->DurationAsString(60*60*24*61), '2 months', '2 months');
is($date->DurationAsString(60*60*24*365-1), '12 months', '12 months');
- is($date->DurationAsString(60*60*24*366), '1 years', '1 years');
+ is($date->DurationAsString(60*60*24*366), '1 year', '1 year');
- is($date->DurationAsString(-1), '1 sec ago', '1 sec ago');
+ is($date->DurationAsString(-1), '1 second ago', '1 sec ago');
}
{ # DiffAsString
$date->Unix(2);
is($date->DiffAsString(-1), '', 'no diff, wrong input');
- is($date->DiffAsString(3), '1 sec ago', 'diff: 1 sec ago');
- is($date->DiffAsString(1), '1 sec', 'diff: 1 sec');
+ is($date->DiffAsString(3), '1 second ago', 'diff: 1 sec ago');
+ is($date->DiffAsString(1), '1 second', 'diff: 1 sec');
my $ndate = RT::Date->new(RT->SystemUser);
is($date->DiffAsString($ndate), '', 'no diff, wrong input');
$ndate->Unix(3);
- is($date->DiffAsString($ndate), '1 sec ago', 'diff: 1 sec ago');
+ is($date->DiffAsString($ndate), '1 second ago', 'diff: 1 sec ago');
}
{ # Diff
my $date = RT::Date->new(RT->SystemUser);
$date->SetToNow;
my $diff = $date->AgeAsString;
- like($diff, qr/^(0 sec|[1-5] sec ago)$/, 'close enought');
+ like($diff, qr/^(0 seconds|(1 second|[2-5] seconds) ago)$/, 'close enought');
}
{ # GetWeekday
# set unknown format: edge cases
my $date = RT::Date->new(RT->SystemUser);
$date->Set( Value => 0, Format => 'unknown' );
- is( $date->Unix(), 0, "unix is 0 with Value => 0, Format => 'unknown'" );
+ ok( !$date->IsSet, "unix is 0 with Value => 0, Format => 'unknown'" );
$date->Set( Value => '', Format => 'unknown' );
- is( $date->Unix(), 0, "unix is 0 with Value => '', Format => 'unknown'" );
+ ok( !$date->IsSet, "unix is 0 with Value => '', Format => 'unknown'" );
$date->Set( Value => ' ', Format => 'unknown' );
- is( $date->Unix(), 0, "unix is 0 with Value => ' ', Format => 'unknown'" );
+ ok( !$date->IsSet, "unix is 0 with Value => ' ', Format => 'unknown'" );
}
#TODO: AsString
#TODO: RFC2822, W3CDTF with Timezones
+done_testing;