1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
use strict;
use warnings;
use DateTime::TimeZone;
use Test::More;
subtest 'no separator', sub {
is(
DateTime::TimeZone::offset_as_string(0), '+0000',
'offset_as_string does the right thing on 0'
);
is(
DateTime::TimeZone::offset_as_string(3600), '+0100',
'offset_as_string works on positive whole hours'
);
is(
DateTime::TimeZone::offset_as_string(-3600), '-0100',
'offset_as_string works on negative whole hours'
);
is(
DateTime::TimeZone::offset_as_string(5400), '+0130',
'offset_as_string works on positive half hours'
);
is(
DateTime::TimeZone::offset_as_string(-5400), '-0130',
'offset_as_string works on negative half hours'
);
is(
DateTime::TimeZone::offset_as_string(20700), '+0545',
'offset_as_string works on positive 15min zones'
);
is(
DateTime::TimeZone::offset_as_string(-20700), '-0545',
'offset_as_string works on negative 15min zones'
);
is(
DateTime::TimeZone::offset_as_string(359999), '+995959',
'offset_as_string max value'
);
is(
DateTime::TimeZone::offset_as_string(-359999), '-995959',
'offset_as_string min value'
);
is(
DateTime::TimeZone::offset_as_string(360000), undef,
'offset_as_string exceeded max value'
);
is(
DateTime::TimeZone::offset_as_string(-360000), undef,
'offset_as_string exceeded min value'
);
};
subtest 'with separator', sub {
is(
DateTime::TimeZone::offset_as_string( 0, q{:} ), '+00:00',
'offset_as_string does the right thing on 0'
);
is(
DateTime::TimeZone::offset_as_string( 3600, q{:} ), '+01:00',
'offset_as_string works on positive whole hours'
);
is(
DateTime::TimeZone::offset_as_string( -3600, q{:} ), '-01:00',
'offset_as_string works on negative whole hours'
);
is(
DateTime::TimeZone::offset_as_string( 5400, q{:} ), '+01:30',
'offset_as_string works on positive half hours'
);
is(
DateTime::TimeZone::offset_as_string( -5400, q{:} ), '-01:30',
'offset_as_string works on negative half hours'
);
is(
DateTime::TimeZone::offset_as_string( 20700, q{:} ), '+05:45',
'offset_as_string works on positive 15min zones'
);
is(
DateTime::TimeZone::offset_as_string( -20700, q{:} ), '-05:45',
'offset_as_string works on negative 15min zones'
);
is(
DateTime::TimeZone::offset_as_string( 359999, q{:} ), '+99:59:59',
'offset_as_string max value'
);
is(
DateTime::TimeZone::offset_as_string( -359999, q{:} ), '-99:59:59',
'offset_as_string min value'
);
};
my @offset_seconds = qw(
0
3600
-3600
5400
-5400
20700
-20700
359999
-359999
);
my @offset_strings = qw(
+0100
-0100
+0130
-0130
+0545
-0545
+995959
-995959
);
foreach (@offset_seconds) {
is(
DateTime::TimeZone::offset_as_seconds(
DateTime::TimeZone::offset_as_string($_)
),
$_,
'n -> offset_as_string -> offset_as_seconds = n'
);
}
foreach (@offset_strings) {
is(
DateTime::TimeZone::offset_as_string(
DateTime::TimeZone::offset_as_seconds($_)
),
$_,
'n -> offset_as_seconds -> offset_as_string = n'
);
}
# just checking that calling these as class methods works
is(
DateTime::TimeZone->offset_as_string(3600), '+0100',
'offset_as_string as class method'
);
is(
DateTime::TimeZone->offset_as_seconds('+0100'), 3600,
'offset_as_seconds as class method'
);
{
DateTime::TimeZone::offset_as_string(3600);
is(
$@, q{},
'calling offset_as_string does not leave $@ set'
);
}
{
DateTime::TimeZone::offset_as_seconds('+0100');
is(
$@, q{},
'calling offset_as_string does not leave $@ set'
);
}
done_testing();
|