File: base-datetime.t

package info (click to toggle)
libdatetime-format-iso8601-perl 0.17-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 400 kB
  • sloc: perl: 1,092; sh: 23; makefile: 2
file content (124 lines) | stat: -rw-r--r-- 2,649 bytes parent folder | download | duplicates (3)
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
# Copyright (C) 2005  Joshua Hoblitt
use strict;
use warnings;

use Test2::V0;

use DateTime;
use DateTime::Format::ISO8601;

my @good_bases = (
    { year => 0 },
    { year => 1 },
    { year => 2500 },
    { year => 5000 },
    { year => 7500 },
    { year => 9998 },
    {
        year       => 9999,
        month      => 12,
        day        => 12,
        hour       => 23,
        minute     => 59,
        second     => 59,
        nanosecond => 999_999_999,
    },
);

my @test_bases = (
    [ '1945-09-02T09:04', '1945-W35' ],
    [ '1987-12-18T02:03', '1987-W51' ],
    [ '1988-05-05T04:05', '1988-W18' ],
    [ '1989-10-18T06:07', '1989-W42' ],
    [ '1991-03-21T08:09', '1991-W12' ],
);

my @bad_bases = (
    { year => -2 },
    { year => -1 },
    {
        year       => -1,
        month      => 12,
        day        => 31,
        hour       => 23,
        minute     => 59,
        second     => 59,
        nanosecond => 999_999_999
    },
    { year => 10_000 },
    { year => 10_001 },
    { year => 10_002 },
);

for my $params (@good_bases) {
    my $dt = DateTime->new(%$params);

    {
        my $iso_parser = DateTime::Format::ISO8601->new(
            base_datetime => $dt,
        );
        isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
    }

    {
        my $iso_parser = DateTime::Format::ISO8601->new->set_base_datetime(
            object => $dt,
        );
        isa_ok( $iso_parser, 'DateTime::Format::ISO8601' );
    }
}

for (@test_bases) {
    my $iso_parser = DateTime::Format::ISO8601->new(
        base_datetime => DateTime::Format::ISO8601->parse_datetime( $_->[0] ),
    );

    {
        #tests...
        #_add_minute
        #_add_hour
        #_add_day
        #_add_month
        #_add_year

        #--ss,s --50,5
        my $dt = $iso_parser->parse_datetime('--50,5');
        is( $dt->strftime('%Y-%m-%dT%H:%M'), $_->[0] );
    }

    {
        #tests...
        #_add_week
        #_add_year

        #-W-D -W-5
        my $dt = $iso_parser->parse_datetime('-W-5');
        is( $dt->strftime('%Y-W%V'), $_->[1] );
    }
}

for my $params (@bad_bases) {
    my $dt = DateTime->new(%$params);

    like(
        dies {
            DateTime::Format::ISO8601->new(
                base_datetime => $dt,
            );
        },
        qr/base_datetime must be (greater|less) then/,
        'invalid base_datetime',
    );

    like(
        dies {
            DateTime::Format::ISO8601->new->set_base_datetime(
                object => $dt,
            );
        },
        qr/base_datetime must be (greater|less) then/,
        'invalid base_datetime',
    );
}

done_testing();