@@ -70,15 +70,38 @@ def valid_keys():
70
70
return hypothesis .strategies .sampled_from (VALID_KEYS )
71
71
72
72
73
+ KEY_EXAMPLES = [
74
+ "Africa/Abidjan" ,
75
+ "Africa/Casablanca" ,
76
+ "America/Los_Angeles" ,
77
+ "America/Santiago" ,
78
+ "Asia/Tokyo" ,
79
+ "Australia/Sydney" ,
80
+ "Europe/Dublin" ,
81
+ "Europe/Lisbon" ,
82
+ "Europe/London" ,
83
+ "Pacific/Kiritimati" ,
84
+ "UTC" ,
85
+ ]
86
+
87
+
88
+ def add_key_examples (f ):
89
+ for key in KEY_EXAMPLES :
90
+ f = hypothesis .example (key )(f )
91
+ return f
92
+
93
+
73
94
class ZoneInfoTest (ZoneInfoTestBase ):
74
95
module = py_zoneinfo
75
96
76
97
@hypothesis .given (key = valid_keys ())
98
+ @add_key_examples
77
99
def test_str (self , key ):
78
100
zi = self .klass (key )
79
101
self .assertEqual (str (zi ), key )
80
102
81
103
@hypothesis .given (key = valid_keys ())
104
+ @add_key_examples
82
105
def test_key (self , key ):
83
106
zi = self .klass (key )
84
107
@@ -89,6 +112,13 @@ def test_key(self, key):
89
112
hypothesis .strategies .datetimes (), hypothesis .strategies .times ()
90
113
)
91
114
)
115
+ @hypothesis .example (dt = datetime .datetime .min )
116
+ @hypothesis .example (dt = datetime .datetime .max )
117
+ @hypothesis .example (dt = datetime .datetime (1970 , 1 , 1 ))
118
+ @hypothesis .example (dt = datetime .datetime (2039 , 1 , 1 ))
119
+ @hypothesis .example (dt = datetime .time (0 ))
120
+ @hypothesis .example (dt = datetime .time (12 , 0 ))
121
+ @hypothesis .example (dt = datetime .time (23 , 59 , 59 , 999999 ))
92
122
def test_utc (self , dt ):
93
123
zi = self .klass ("UTC" )
94
124
dt_zi = dt .replace (tzinfo = zi )
@@ -113,6 +143,7 @@ def setUp(self):
113
143
super ().setUp ()
114
144
115
145
@hypothesis .given (key = valid_keys ())
146
+ @add_key_examples
116
147
def test_pickle_unpickle_cache (self , key ):
117
148
zi = self .klass (key )
118
149
pkl_str = pickle .dumps (zi )
@@ -121,6 +152,7 @@ def test_pickle_unpickle_cache(self, key):
121
152
self .assertIs (zi , zi_rt )
122
153
123
154
@hypothesis .given (key = valid_keys ())
155
+ @add_key_examples
124
156
def test_pickle_unpickle_no_cache (self , key ):
125
157
zi = self .klass .no_cache (key )
126
158
pkl_str = pickle .dumps (zi )
@@ -130,6 +162,7 @@ def test_pickle_unpickle_no_cache(self, key):
130
162
self .assertEqual (str (zi ), str (zi_rt ))
131
163
132
164
@hypothesis .given (key = valid_keys ())
165
+ @add_key_examples
133
166
def test_pickle_unpickle_cache_multiple_rounds (self , key ):
134
167
"""Test that pickle/unpickle is idempotent."""
135
168
zi_0 = self .klass (key )
@@ -147,6 +180,7 @@ def test_pickle_unpickle_cache_multiple_rounds(self, key):
147
180
self .assertIs (zi_1 , zi_2 )
148
181
149
182
@hypothesis .given (key = valid_keys ())
183
+ @add_key_examples
150
184
def test_pickle_unpickle_no_cache_multiple_rounds (self , key ):
151
185
"""Test that pickle/unpickle is idempotent."""
152
186
zi_cache = self .klass (key )
@@ -178,13 +212,15 @@ class ZoneInfoCacheTest(ZoneInfoTestBase):
178
212
module = py_zoneinfo
179
213
180
214
@hypothesis .given (key = valid_keys ())
215
+ @add_key_examples
181
216
def test_cache (self , key ):
182
217
zi_0 = self .klass (key )
183
218
zi_1 = self .klass (key )
184
219
185
220
self .assertIs (zi_0 , zi_1 )
186
221
187
222
@hypothesis .given (key = valid_keys ())
223
+ @add_key_examples
188
224
def test_no_cache (self , key ):
189
225
zi_0 = self .klass .no_cache (key )
190
226
zi_1 = self .klass .no_cache (key )
@@ -203,13 +239,26 @@ def _is_ambiguous(self, dt):
203
239
return dt .replace (fold = not dt .fold ).utcoffset () == dt .utcoffset ()
204
240
205
241
@hypothesis .given (dt = hypothesis .strategies .datetimes (), key = valid_keys ())
242
+ @hypothesis .example (dt = datetime .datetime .min , key = "America/New_York" )
243
+ @hypothesis .example (dt = datetime .datetime .max , key = "America/New_York" )
244
+ @hypothesis .example (dt = datetime .datetime (1970 , 1 , 1 ), key = "America/New_York" )
245
+ @hypothesis .example (dt = datetime .datetime (2020 , 1 , 1 ), key = "Europe/Paris" )
246
+ @hypothesis .example (dt = datetime .datetime (2020 , 6 , 1 ), key = "Europe/Paris" )
206
247
def test_same_str (self , dt , key ):
207
248
py_dt = dt .replace (tzinfo = py_zoneinfo .ZoneInfo (key ))
208
249
c_dt = dt .replace (tzinfo = c_zoneinfo .ZoneInfo (key ))
209
250
210
251
self .assertEqual (str (py_dt ), str (c_dt ))
211
252
212
253
@hypothesis .given (dt = hypothesis .strategies .datetimes (), key = valid_keys ())
254
+ @hypothesis .example (dt = datetime .datetime (1970 , 1 , 1 ), key = "America/New_York" )
255
+ @hypothesis .example (dt = datetime .datetime (2020 , 2 , 5 ), key = "America/New_York" )
256
+ @hypothesis .example (dt = datetime .datetime (2020 , 8 , 12 ), key = "America/New_York" )
257
+ @hypothesis .example (dt = datetime .datetime (2040 , 1 , 1 ), key = "Africa/Casablanca" )
258
+ @hypothesis .example (dt = datetime .datetime (1970 , 1 , 1 ), key = "Europe/Paris" )
259
+ @hypothesis .example (dt = datetime .datetime (2040 , 1 , 1 ), key = "Europe/Paris" )
260
+ @hypothesis .example (dt = datetime .datetime .min , key = "Asia/Tokyo" )
261
+ @hypothesis .example (dt = datetime .datetime .max , key = "Asia/Tokyo" )
213
262
def test_same_offsets_and_names (self , dt , key ):
214
263
py_dt = dt .replace (tzinfo = py_zoneinfo .ZoneInfo (key ))
215
264
c_dt = dt .replace (tzinfo = c_zoneinfo .ZoneInfo (key ))
@@ -294,6 +343,7 @@ def test_same_to_utc(self, dt, key):
294
343
self .assertEqual (py_utc , c_utc )
295
344
296
345
@hypothesis .given (key = valid_keys ())
346
+ @add_key_examples
297
347
def test_cross_module_pickle (self , key ):
298
348
py_zi = py_zoneinfo .ZoneInfo (key )
299
349
c_zi = c_zoneinfo .ZoneInfo (key )
0 commit comments