File: 05offset.t

package info (click to toggle)
libdatetime-timezone-perl 1%3A2.47-1%2B2023d
  • links: PTS, VCS
  • area: main
  • in suites: bullseye-updates
  • size: 97,508 kB
  • sloc: perl: 2,688; sh: 36; makefile: 10
file content (166 lines) | stat: -rw-r--r-- 4,047 bytes parent folder | download | duplicates (4)
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();