1
- import rustapi_module .datetime as rdt
2
-
3
- import sys
4
1
import datetime as pdt
2
+ import sys
5
3
6
- import pytest
4
+ import pytest
5
+ import rustapi_module .datetime as rdt
7
6
from hypothesis import given
8
7
from hypothesis import strategies as st
9
8
from hypothesis .strategies import dates , datetimes
10
9
10
+
11
11
# Constants
12
12
def _get_utc ():
13
- timezone = getattr (pdt , ' timezone' , None )
13
+ timezone = getattr (pdt , " timezone" , None )
14
14
if timezone :
15
15
return timezone .utc
16
16
else :
17
+
17
18
class UTC (pdt .tzinfo ):
18
19
def utcoffset (self , dt ):
19
20
return pdt .timedelta (0 )
@@ -26,6 +27,7 @@ def tzname(self, dt):
26
27
27
28
return UTC ()
28
29
30
+
29
31
UTC = _get_utc ()
30
32
31
33
MAX_SECONDS = int (pdt .timedelta .max .total_seconds ())
@@ -42,19 +44,22 @@ def tzname(self, dt):
42
44
MAX_MICROSECONDS = int (pdt .timedelta .max .total_seconds () * 1e6 )
43
45
MIN_MICROSECONDS = int (pdt .timedelta .min .total_seconds () * 1e6 )
44
46
45
- HAS_FOLD = getattr (pdt .datetime , 'fold' , False )
46
-
47
+ HAS_FOLD = getattr (pdt .datetime , "fold" , False )
47
48
48
49
# Helper functions
49
- get_timestamp = getattr (pdt .datetime , ' timestamp' , None )
50
+ get_timestamp = getattr (pdt .datetime , " timestamp" , None )
50
51
if get_timestamp is None :
52
+
51
53
def get_timestamp (dt ):
52
54
# Python 2 compatibility
53
55
return (dt - pdt .datetime (1970 , 1 , 1 )).total_seconds ()
54
56
55
57
56
- xfail_date_bounds = pytest .mark .xfail (sys .version_info < (3 , 6 ),
57
- reason = "Date bounds were not checked in the C constructor prior to version 3.6" )
58
+ xfail_date_bounds = pytest .mark .xfail (
59
+ sys .version_info < (3 , 6 ),
60
+ reason = "Date bounds were not checked in the C constructor prior to version 3.6" ,
61
+ )
62
+
58
63
59
64
# Tests
60
65
def test_date ():
@@ -81,11 +86,14 @@ def test_date_from_timestamp(d):
81
86
assert rdt .date_from_timestamp (int (ts )) == pdt .date .fromtimestamp (ts )
82
87
83
88
84
- @pytest .mark .parametrize ('args, kwargs' , [
85
- ((0 , 0 , 0 , 0 , None ), {}),
86
- ((1 , 12 , 14 , 124731 ), {}),
87
- ((1 , 12 , 14 , 124731 ), {'tzinfo' : UTC }),
88
- ])
89
+ @pytest .mark .parametrize (
90
+ "args, kwargs" ,
91
+ [
92
+ ((0 , 0 , 0 , 0 , None ), {}),
93
+ ((1 , 12 , 14 , 124731 ), {}),
94
+ ((1 , 12 , 14 , 124731 ), {"tzinfo" : UTC }),
95
+ ],
96
+ )
89
97
def test_time (args , kwargs ):
90
98
act = rdt .make_time (* args , ** kwargs )
91
99
exp = pdt .time (* args , ** kwargs )
@@ -116,55 +124,58 @@ def test_time_fold(t):
116
124
117
125
118
126
@pytest .mark .skipif (not HAS_FOLD , reason = "Feature not available before 3.6" )
119
- @pytest .mark .parametrize (' fold' , [False , True ])
127
+ @pytest .mark .parametrize (" fold" , [False , True ])
120
128
def test_time_fold (fold ):
121
129
t = rdt .time_with_fold (0 , 0 , 0 , 0 , None , fold )
122
130
assert t .fold == fold
123
131
124
132
125
133
@pytest .mark .xfail
126
- @pytest .mark .parametrize ('args' , [
127
- (- 1 , 0 , 0 , 0 ),
128
- (0 , - 1 , 0 , 0 ),
129
- (0 , 0 , - 1 , 0 ),
130
- (0 , 0 , 0 , - 1 ),
131
- ])
134
+ @pytest .mark .parametrize (
135
+ "args" , [(- 1 , 0 , 0 , 0 ), (0 , - 1 , 0 , 0 ), (0 , 0 , - 1 , 0 ), (0 , 0 , 0 , - 1 )]
136
+ )
132
137
def test_invalid_time_fails_xfail (args ):
133
138
with pytest .raises (ValueError ):
134
139
rdt .make_time (* args )
135
140
136
141
137
142
@xfail_date_bounds
138
- @pytest .mark .parametrize ('args' , [
139
- (24 , 0 , 0 , 0 ),
140
- (25 , 0 , 0 , 0 ),
141
- (0 , 60 , 0 , 0 ),
142
- (0 , 61 , 0 , 0 ),
143
- (0 , 0 , 60 , 0 ),
144
- (0 , 0 , 61 , 0 ),
145
- (0 , 0 , 0 , 1000000 )
146
- ])
143
+ @pytest .mark .parametrize (
144
+ "args" ,
145
+ [
146
+ (24 , 0 , 0 , 0 ),
147
+ (25 , 0 , 0 , 0 ),
148
+ (0 , 60 , 0 , 0 ),
149
+ (0 , 61 , 0 , 0 ),
150
+ (0 , 0 , 60 , 0 ),
151
+ (0 , 0 , 61 , 0 ),
152
+ (0 , 0 , 0 , 1000000 ),
153
+ ],
154
+ )
147
155
def test_invalid_time_fails (args ):
148
156
with pytest .raises (ValueError ):
149
157
rdt .make_time (* args )
150
158
151
159
152
- @pytest .mark .parametrize ('args' , [
153
- ('0' , 0 , 0 , 0 ),
154
- (0 , '0' , 0 , 0 ),
155
- (0 , 0 , '0' , 0 ),
156
- (0 , 0 , 0 , '0' ),
157
- (0 , 0 , 0 , 0 , 'UTC' )
158
- ])
160
+ @pytest .mark .parametrize (
161
+ "args" ,
162
+ [
163
+ ("0" , 0 , 0 , 0 ),
164
+ (0 , "0" , 0 , 0 ),
165
+ (0 , 0 , "0" , 0 ),
166
+ (0 , 0 , 0 , "0" ),
167
+ (0 , 0 , 0 , 0 , "UTC" ),
168
+ ],
169
+ )
159
170
def test_time_typeerror (args ):
160
171
with pytest .raises (TypeError ):
161
172
rdt .make_time (* args )
162
173
163
174
164
- @pytest .mark .parametrize ('args, kwargs' , [
165
- (( 2017 , 9 , 1 , 12 , 45 , 30 , 0 ), {}) ,
166
- ((2017 , 9 , 1 , 12 , 45 , 30 , 0 ), {' tzinfo' : UTC }),
167
- ] )
175
+ @pytest .mark .parametrize (
176
+ "args, kwargs" ,
177
+ [ ((2017 , 9 , 1 , 12 , 45 , 30 , 0 ), {}), (( 2017 , 9 , 1 , 12 , 45 , 30 , 0 ), { " tzinfo" : UTC })] ,
178
+ )
168
179
def test_datetime (args , kwargs ):
169
180
act = rdt .make_datetime (* args , ** kwargs )
170
181
exp = pdt .datetime (* args , ** kwargs )
@@ -176,7 +187,7 @@ def test_datetime(args, kwargs):
176
187
@given (dt = st .datetimes ())
177
188
def test_datetime_tuple (dt ):
178
189
act = rdt .get_datetime_tuple (dt )
179
- exp = dt .timetuple ()[0 :6 ] + (dt .microsecond , )
190
+ exp = dt .timetuple ()[0 :6 ] + (dt .microsecond ,)
180
191
181
192
assert act == exp
182
193
@@ -202,7 +213,7 @@ def test_invalid_datetime_fails():
202
213
203
214
def test_datetime_typeerror ():
204
215
with pytest .raises (TypeError ):
205
- rdt .make_datetime (' 2011' , 1 , 1 , 0 , 0 , 0 , 0 )
216
+ rdt .make_datetime (" 2011" , 1 , 1 , 0 , 0 , 0 , 0 )
206
217
207
218
208
219
@given (dt = datetimes ())
@@ -219,17 +230,20 @@ def test_datetime_from_timestamp_tzinfo():
219
230
assert d1 .tzinfo is d2 .tzinfo
220
231
221
232
222
- @pytest .mark .parametrize ('args' , [
223
- (0 , 0 , 0 ),
224
- (1 , 0 , 0 ),
225
- (- 1 , 0 , 0 ),
226
- (0 , 1 , 0 ),
227
- (0 , - 1 , 0 ),
228
- (1 , - 1 , 0 ),
229
- (- 1 , 1 , 0 ),
230
- (0 , 0 , 123456 ),
231
- (0 , 0 , - 123456 ),
232
- ])
233
+ @pytest .mark .parametrize (
234
+ "args" ,
235
+ [
236
+ (0 , 0 , 0 ),
237
+ (1 , 0 , 0 ),
238
+ (- 1 , 0 , 0 ),
239
+ (0 , 1 , 0 ),
240
+ (0 , - 1 , 0 ),
241
+ (1 , - 1 , 0 ),
242
+ (- 1 , 1 , 0 ),
243
+ (0 , 0 , 123456 ),
244
+ (0 , 0 , - 123456 ),
245
+ ],
246
+ )
233
247
def test_delta (args ):
234
248
act = pdt .timedelta (* args )
235
249
exp = rdt .make_delta (* args )
@@ -245,24 +259,29 @@ def test_delta_accessors(td):
245
259
assert act == exp
246
260
247
261
248
- @pytest .mark .parametrize ('args,err_type' , [
249
- ((MAX_DAYS + 1 , 0 , 0 ), OverflowError ),
250
- ((MIN_DAYS - 1 , 0 , 0 ), OverflowError ),
251
- ((0 , MAX_SECONDS + 1 , 0 ), OverflowError ),
252
- ((0 , MIN_SECONDS - 1 , 0 ), OverflowError ),
253
- ((0 , 0 , MAX_MICROSECONDS + 1 ), OverflowError ),
254
- ((0 , 0 , MIN_MICROSECONDS - 1 ), OverflowError ),
255
- (('0' , 0 , 0 ), TypeError ),
256
- ((0 , '0' , 0 ), TypeError ),
257
- ((0 , 0 , '0' ), TypeError ),
258
- ])
262
+ @pytest .mark .parametrize (
263
+ "args,err_type" ,
264
+ [
265
+ ((MAX_DAYS + 1 , 0 , 0 ), OverflowError ),
266
+ ((MIN_DAYS - 1 , 0 , 0 ), OverflowError ),
267
+ ((0 , MAX_SECONDS + 1 , 0 ), OverflowError ),
268
+ ((0 , MIN_SECONDS - 1 , 0 ), OverflowError ),
269
+ ((0 , 0 , MAX_MICROSECONDS + 1 ), OverflowError ),
270
+ ((0 , 0 , MIN_MICROSECONDS - 1 ), OverflowError ),
271
+ (("0" , 0 , 0 ), TypeError ),
272
+ ((0 , "0" , 0 ), TypeError ),
273
+ ((0 , 0 , "0" ), TypeError ),
274
+ ],
275
+ )
259
276
def test_delta_err (args , err_type ):
260
277
with pytest .raises (err_type ):
261
278
rdt .make_delta (* args )
262
279
280
+
263
281
def test_issue_219 ():
264
282
rdt .issue_219 ()
265
283
284
+
266
285
def test_tz_class ():
267
286
tzi = rdt .TzClass ()
268
287
@@ -272,9 +291,9 @@ def test_tz_class():
272
291
assert dt .utcoffset () == pdt .timedelta (hours = 1 )
273
292
assert dt .dst () is None
274
293
294
+
275
295
def test_tz_class_introspection ():
276
296
tzi = rdt .TzClass ()
277
297
278
298
assert tzi .__class__ == rdt .TzClass
279
- assert repr (tzi ).startswith ('<rustapi_module.datetime.TzClass object at' )
280
-
299
+ assert repr (tzi ).startswith ("<rustapi_module.datetime.TzClass object at" )
0 commit comments