-
Notifications
You must be signed in to change notification settings - Fork 215
/
datetime.t
96 lines (86 loc) · 2.75 KB
/
datetime.t
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
#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use Test::More tests => 33;
#use Test::More 'no_plan';
use Locale::TextDomain qw(App-Sqitch);
use Test::NoWarnings;
use Test::Exception;
use Encode;
use lib 't/lib';
use LC;
use TestConfig;
my $CLASS = 'App::Sqitch::DateTime';
require_ok $CLASS;
local $ENV{TZ} = 'America/Vancouver';
ok my $dt = $CLASS->now, 'Construct a datetime object';
is_deeply [$dt->as_string_formats], [qw(
raw
iso
iso8601
rfc
rfc2822
full
long
medium
short
)], 'as_string_formats should be correct';
my $rfc = do {
my $clone = $dt->clone;
$clone->set_time_zone('local');
$clone->set_locale('en_US');
( my $rv = $clone->strftime('%a, %d %b %Y %H:%M:%S %z') ) =~ s/\+0000$/-0000/;
$rv;
};
my $iso = do {
my $clone = $dt->clone;
$clone->set_time_zone('local');
join ' ', $clone->ymd('-'), $clone->hms(':'), $clone->strftime('%z')
};
my $ldt = do {
my $clone = $dt->clone;
$clone->set_time_zone('local');
$clone->set_locale($LC::TIME);
$clone;
};
my $raw = do {
my $clone = $dt->clone;
$clone->set_time_zone('UTC');
$clone->iso8601 . 'Z';
};
for my $spec (
[ full => $ldt->format_cldr( $ldt->locale->datetime_format_full )],
[ long => $ldt->format_cldr( $ldt->locale->datetime_format_long )],
[ medium => $ldt->format_cldr( $ldt->locale->datetime_format_medium )],
[ short => $ldt->format_cldr( $ldt->locale->datetime_format_short )],
[ raw => $raw ],
[ '' => $raw ],
[ iso => $iso ],
[ iso8601 => $iso ],
[ rfc => $rfc ],
[ rfc2822 => $rfc ],
[ q{cldr:HH'h' mm'm'} => $ldt->format_cldr( q{HH'h' mm'm'} ) ],
[ 'strftime:%a at %H:%M:%S' => $ldt->strftime('%a at %H:%M:%S') ],
) {
my $clone = $dt->clone;
$clone->set_time_zone('UTC');
is $dt->as_string( format => $spec->[0] ), $spec->[1],
sprintf 'Date format "%s" should yield "%s"', $spec->[0], encode_utf8 $spec->[1];
ok $dt->validate_as_string_format($spec->[0]),
qq{Format "$spec->[0]" should be valid} if $spec->[0];
}
throws_ok { $dt->validate_as_string_format('nonesuch') } 'App::Sqitch::X',
'Should get error for invalid date format';
is $@->ident, 'datetime', 'Invalid date format error ident should be "datetime"';
is $@->message, __x(
'Unknown date format "{format}"',
format => 'nonesuch',
), 'Invalid date format error message should be correct';
throws_ok { $dt->as_string( format => 'nonesuch' ) } 'App::Sqitch::X',
'Should get error for invalid as_string format param';
is $@->ident, 'datetime', 'Invalid date format error ident should be "datetime"';
is $@->message, __x(
'Unknown date format "{format}"',
format => 'nonesuch',
), 'Invalid date format error message should be correct';