@@ -30,35 +30,19 @@ def test_parse_time(self):
30
30
parse_time ('09:15:90' )
31
31
32
32
def test_parse_datetime (self ):
33
- # Valid inputs
34
- self .assertEqual (
35
- parse_datetime ('2012-04-23T09:15:00' ),
36
- datetime (2012 , 4 , 23 , 9 , 15 )
37
- )
38
- self .assertEqual (
39
- parse_datetime ('2012-4-9 4:8:16' ),
40
- datetime (2012 , 4 , 9 , 4 , 8 , 16 )
41
- )
42
- self .assertEqual (
43
- parse_datetime ('2012-04-23T09:15:00Z' ),
44
- datetime (2012 , 4 , 23 , 9 , 15 , 0 , 0 , get_fixed_timezone (0 ))
45
- )
46
- self .assertEqual (
47
- parse_datetime ('2012-4-9 4:8:16-0320' ),
48
- datetime (2012 , 4 , 9 , 4 , 8 , 16 , 0 , get_fixed_timezone (- 200 ))
49
- )
50
- self .assertEqual (
51
- parse_datetime ('2012-04-23T10:20:30.400+02:30' ),
52
- datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (150 ))
53
- )
54
- self .assertEqual (
55
- parse_datetime ('2012-04-23T10:20:30.400+02' ),
56
- datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (120 ))
57
- )
58
- self .assertEqual (
59
- parse_datetime ('2012-04-23T10:20:30.400-02' ),
60
- datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (- 120 ))
33
+ valid_inputs = (
34
+ ('2012-04-23T09:15:00' , datetime (2012 , 4 , 23 , 9 , 15 )),
35
+ ('2012-4-9 4:8:16' , datetime (2012 , 4 , 9 , 4 , 8 , 16 )),
36
+ ('2012-04-23T09:15:00Z' , datetime (2012 , 4 , 23 , 9 , 15 , 0 , 0 , get_fixed_timezone (0 ))),
37
+ ('2012-4-9 4:8:16-0320' , datetime (2012 , 4 , 9 , 4 , 8 , 16 , 0 , get_fixed_timezone (- 200 ))),
38
+ ('2012-04-23T10:20:30.400+02:30' , datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (150 ))),
39
+ ('2012-04-23T10:20:30.400+02' , datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (120 ))),
40
+ ('2012-04-23T10:20:30.400-02' , datetime (2012 , 4 , 23 , 10 , 20 , 30 , 400000 , get_fixed_timezone (- 120 ))),
61
41
)
42
+ for source , expected in valid_inputs :
43
+ with self .subTest (source = source ):
44
+ self .assertEqual (parse_datetime (source ), expected )
45
+
62
46
# Invalid inputs
63
47
self .assertIsNone (parse_datetime ('20120423091500' ))
64
48
with self .assertRaises (ValueError ):
@@ -78,7 +62,8 @@ def test_parse_python_format(self):
78
62
timedelta (seconds = 30 ), # seconds
79
63
]
80
64
for delta in timedeltas :
81
- self .assertEqual (parse_duration (format (delta )), delta )
65
+ with self .subTest (delta = delta ):
66
+ self .assertEqual (parse_duration (format (delta )), delta )
82
67
83
68
def test_seconds (self ):
84
69
self .assertEqual (parse_duration ('30' ), timedelta (seconds = 30 ))
@@ -97,27 +82,42 @@ def test_days(self):
97
82
self .assertEqual (parse_duration ('4 10:15:30' ), timedelta (days = 4 , hours = 10 , minutes = 15 , seconds = 30 ))
98
83
99
84
def test_fractions_of_seconds (self ):
100
- self .assertEqual (parse_duration ('15:30.1' ), timedelta (minutes = 15 , seconds = 30 , milliseconds = 100 ))
101
- self .assertEqual (parse_duration ('15:30.01' ), timedelta (minutes = 15 , seconds = 30 , milliseconds = 10 ))
102
- self .assertEqual (parse_duration ('15:30.001' ), timedelta (minutes = 15 , seconds = 30 , milliseconds = 1 ))
103
- self .assertEqual (parse_duration ('15:30.0001' ), timedelta (minutes = 15 , seconds = 30 , microseconds = 100 ))
104
- self .assertEqual (parse_duration ('15:30.00001' ), timedelta (minutes = 15 , seconds = 30 , microseconds = 10 ))
105
- self .assertEqual (parse_duration ('15:30.000001' ), timedelta (minutes = 15 , seconds = 30 , microseconds = 1 ))
85
+ test_values = (
86
+ ('15:30.1' , timedelta (minutes = 15 , seconds = 30 , milliseconds = 100 )),
87
+ ('15:30.01' , timedelta (minutes = 15 , seconds = 30 , milliseconds = 10 )),
88
+ ('15:30.001' , timedelta (minutes = 15 , seconds = 30 , milliseconds = 1 )),
89
+ ('15:30.0001' , timedelta (minutes = 15 , seconds = 30 , microseconds = 100 )),
90
+ ('15:30.00001' , timedelta (minutes = 15 , seconds = 30 , microseconds = 10 )),
91
+ ('15:30.000001' , timedelta (minutes = 15 , seconds = 30 , microseconds = 1 )),
92
+ )
93
+ for source , expected in test_values :
94
+ with self .subTest (source = source ):
95
+ self .assertEqual (parse_duration (source ), expected )
106
96
107
97
def test_negative (self ):
108
- self .assertEqual (parse_duration ('-4 15:30' ), timedelta (days = - 4 , minutes = 15 , seconds = 30 ))
109
- self .assertEqual (parse_duration ('-172800' ), timedelta (days = - 2 ))
110
- self .assertEqual (parse_duration ('-15:30' ), timedelta (minutes = - 15 , seconds = 30 ))
111
- self .assertEqual (parse_duration ('-1:15:30' ), timedelta (hours = - 1 , minutes = 15 , seconds = 30 ))
112
- self .assertEqual (parse_duration ('-30.1' ), timedelta (seconds = - 30 , milliseconds = - 100 ))
98
+ test_values = (
99
+ ('-4 15:30' , timedelta (days = - 4 , minutes = 15 , seconds = 30 )),
100
+ ('-172800' , timedelta (days = - 2 )),
101
+ ('-15:30' , timedelta (minutes = - 15 , seconds = 30 )),
102
+ ('-1:15:30' , timedelta (hours = - 1 , minutes = 15 , seconds = 30 )),
103
+ ('-30.1' , timedelta (seconds = - 30 , milliseconds = - 100 )),
104
+ )
105
+ for source , expected in test_values :
106
+ with self .subTest (source = source ):
107
+ self .assertEqual (parse_duration (source ), expected )
113
108
114
109
def test_iso_8601 (self ):
115
- self .assertIsNone (parse_duration ('P4Y' ))
116
- self .assertIsNone (parse_duration ('P4M' ))
117
- self .assertIsNone (parse_duration ('P4W' ))
118
- self .assertEqual (parse_duration ('P4D' ), timedelta (days = 4 ))
119
- self .assertEqual (parse_duration ('P0.5D' ), timedelta (hours = 12 ))
120
- self .assertEqual (parse_duration ('PT5H' ), timedelta (hours = 5 ))
121
- self .assertEqual (parse_duration ('PT5M' ), timedelta (minutes = 5 ))
122
- self .assertEqual (parse_duration ('PT5S' ), timedelta (seconds = 5 ))
123
- self .assertEqual (parse_duration ('PT0.000005S' ), timedelta (microseconds = 5 ))
110
+ test_values = (
111
+ ('P4Y' , None ),
112
+ ('P4M' , None ),
113
+ ('P4W' , None ),
114
+ ('P4D' , timedelta (days = 4 )),
115
+ ('P0.5D' , timedelta (hours = 12 )),
116
+ ('PT5H' , timedelta (hours = 5 )),
117
+ ('PT5M' , timedelta (minutes = 5 )),
118
+ ('PT5S' , timedelta (seconds = 5 )),
119
+ ('PT0.000005S' , timedelta (microseconds = 5 )),
120
+ )
121
+ for source , expected in test_values :
122
+ with self .subTest (source = source ):
123
+ self .assertEqual (parse_duration (source ), expected )
0 commit comments