File: 02core_dst.t

package info (click to toggle)
perl 5.42.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 128,392 kB
  • sloc: perl: 534,963; ansic: 240,563; sh: 72,042; pascal: 6,934; xml: 2,428; yacc: 1,360; makefile: 1,197; cpp: 208; lisp: 1
file content (144 lines) | stat: -rw-r--r-- 4,796 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
use Test::More;

# Skip if doing a regular install
# Avoids mystery DST bugs [rt 128240], [GH40]
plan skip_all => "DST tests not required for installation"
  unless ( $ENV{AUTOMATED_TESTING} );

my $is_win32 = ($^O =~ /Win32/);
my $is_qnx = ($^O eq 'qnx');
my $is_vos = ($^O eq 'vos');
my $is_linux = ($^O =~ /linux/);
my $is_bsd = ($^O =~ /bsd/);
my $is_mac = ($^O =~ /darwin/);

use Time::Piece;
use Time::Seconds;

#test using an epoch that can be DST
#because sometimes funny stuff can occur [cpan #93095]
#https://rt.cpan.org/Ticket/Display.html?id=93095#txn-1482590

my $t = gmtime(1373371631); # 2013-07-09T12:07:11

is($t->sec,               11);
is($t->second,            11);
is($t->min,               07);
is($t->minute,            07);
is($t->hour,              12);
is($t->mday,               9);
is($t->day_of_month,       9);
is($t->mon,                7);
is($t->_mon,               6);
is($t->year,            2013);
is($t->_year,            113);
is($t->yy,              '13');

cmp_ok($t->wday,        '==',         3);
cmp_ok($t->_wday,       '==',         2);
cmp_ok($t->day_of_week, '==',         2);
cmp_ok($t->yday,        '==',        189);
cmp_ok($t->day_of_year, '==',        189);

# In GMT there should be no daylight savings ever.
cmp_ok($t->isdst, '==', 0);
cmp_ok($t->epoch, '==',   1373371631);
cmp_ok($t->hms,   'eq',   '12:07:11');
cmp_ok($t->time,  'eq',   '12:07:11');
cmp_ok($t->ymd,   'eq', '2013-07-09');
cmp_ok($t->date,  'eq', '2013-07-09');
cmp_ok($t->mdy,   'eq', '07-09-2013');
cmp_ok($t->dmy,   'eq', '09-07-2013');
cmp_ok($t->cdate, 'eq', 'Tue Jul  9 12:07:11 2013');
cmp_ok("$t",      'eq', 'Tue Jul  9 12:07:11 2013');
cmp_ok($t->datetime, 'eq','2013-07-09T12:07:11');
cmp_ok($t->daylight_savings, '==', 0);


cmp_ok($t->week, '==', 28);

# strftime tests

# %a, %A, %b, %B, %c are locale-dependent

# %C is unportable: sometimes its like asctime(3) or date(1),
# sometimes it's the century (and whether for 2000 the century is
# 20 or 19, is fun, too..as far as I can read SUSv2 it should be 20.)
cmp_ok($t->strftime('%d'), '==', 9);

SKIP: {
  skip "can't strftime %D, %R, %T or %e on Win32", 1 if $is_win32;
  cmp_ok($t->strftime('%D'), 'eq', '07/09/13'); # Yech!
}
SKIP:{
  skip "can't strftime %D, %R, %T or %e on Win32", 1 if $is_win32;
  skip "can't strftime %e on QNX", 1 if $is_qnx;
  cmp_ok($t->strftime('%e'), 'eq', ' 9');       # should test with < 10
}

# %h is locale-dependent
cmp_ok($t->strftime('%H'), 'eq', '12'); # should test with < 10

cmp_ok($t->strftime('%I'), 'eq', '12'); # should test with < 10
cmp_ok($t->strftime('%j'), '==',  190 ); # why ->yday+1 ?
cmp_ok($t->strftime('%M'), 'eq', '07'); # should test with < 10

# %p, %P, and %r are not widely implemented,
# and are possibly unportable (am or AM or a.m., and so on)

SKIP: {
  skip "can't strftime %R on Win32 or QNX", 1 if $is_win32 or $is_qnx;
  cmp_ok($t->strftime('%R'), 'eq', '12:07');    # should test with > 12
}

ok($t->strftime('%S') eq '11'); # should test with < 10

SKIP: {
  skip "can't strftime %T on Win32", 1 if $is_win32;
  cmp_ok($t->strftime('%T'), 'eq', '12:07:11'); # < 12 and > 12
}

# There are bugs in the implementation of %u in many platforms.
# (e.g. Linux seems to think, despite the man page, that %u
# 1-based on Sunday...)

cmp_ok($t->strftime('%U'), 'eq', '27'); # Sun cmp Mon

SKIP: {
    skip "can't strftime %V on Win32 or QNX or VOS", 1 if $is_win32 or $is_qnx or $is_vos;
    # is this test really broken on Mac OS? -- rjbs, 2006-02-08
    cmp_ok($t->strftime('%V'), 'eq', '28'); # Sun cmp Mon
}

cmp_ok($t->strftime('%w'), '==', 2);
cmp_ok($t->strftime('%W'), 'eq', '27'); # Sun cmp Mon

# %x is locale and implementation dependent.

cmp_ok($t->strftime('%y'), '==', 13); # should test with 1999
cmp_ok($t->strftime('%Y'), 'eq', '2013');

ok(not $t->is_leap_year); # should test more with different dates

cmp_ok($t->month_last_day, '==', 31); # test more


SKIP: {
	skip "Extra tests for Linux, BSD only.", 8 unless $is_linux or $is_mac or $is_bsd;

    local $ENV{TZ} = "EST5EDT4,M3.2.0/2,M11.1.0/2";
    Time::Piece::_tzset();
    my $lt = localtime(1373371631); #2013-07-09T12:07:11
    cmp_ok(scalar($lt->tzoffset), 'eq', '-14400');
    cmp_ok($lt->strftime("%Y-%m-%d %H:%M:%S %Z"), 'eq', '2013-07-09 08:07:11 EDT');
    like  ($lt->strftime("%z"), qr/-0400|EDT/); #windows: %Z and %z are the same
    is    ($lt->strftime("%s"), 1373371631, 'Epoch output is the same with EDT');

    $lt = localtime(1357733231); #2013-01-09T12:07:11
    cmp_ok(scalar($lt->tzoffset), 'eq', '-18000');
    cmp_ok($lt->strftime("%Y-%m-%d %H:%M:%S %Z"), 'eq', '2013-01-09 07:07:11 EST');
    like  ($lt->strftime("%z"), qr/-0500|EST/);
    is    ($lt->strftime("%s"), 1357733231, 'Epoch output is the same with EST');
}

done_testing(56);