@@ -70,15 +70,38 @@ def valid_keys():
7070 return hypothesis .strategies .sampled_from (VALID_KEYS )
7171
7272
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+
7394class ZoneInfoTest (ZoneInfoTestBase ):
7495 module = py_zoneinfo
7596
7697 @hypothesis .given (key = valid_keys ())
98+ @add_key_examples
7799 def test_str (self , key ):
78100 zi = self .klass (key )
79101 self .assertEqual (str (zi ), key )
80102
81103 @hypothesis .given (key = valid_keys ())
104+ @add_key_examples
82105 def test_key (self , key ):
83106 zi = self .klass (key )
84107
@@ -89,6 +112,13 @@ def test_key(self, key):
89112 hypothesis .strategies .datetimes (), hypothesis .strategies .times ()
90113 )
91114 )
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 ))
92122 def test_utc (self , dt ):
93123 zi = self .klass ("UTC" )
94124 dt_zi = dt .replace (tzinfo = zi )
@@ -113,6 +143,7 @@ def setUp(self):
113143 super ().setUp ()
114144
115145 @hypothesis .given (key = valid_keys ())
146+ @add_key_examples
116147 def test_pickle_unpickle_cache (self , key ):
117148 zi = self .klass (key )
118149 pkl_str = pickle .dumps (zi )
@@ -121,6 +152,7 @@ def test_pickle_unpickle_cache(self, key):
121152 self .assertIs (zi , zi_rt )
122153
123154 @hypothesis .given (key = valid_keys ())
155+ @add_key_examples
124156 def test_pickle_unpickle_no_cache (self , key ):
125157 zi = self .klass .no_cache (key )
126158 pkl_str = pickle .dumps (zi )
@@ -130,6 +162,7 @@ def test_pickle_unpickle_no_cache(self, key):
130162 self .assertEqual (str (zi ), str (zi_rt ))
131163
132164 @hypothesis .given (key = valid_keys ())
165+ @add_key_examples
133166 def test_pickle_unpickle_cache_multiple_rounds (self , key ):
134167 """Test that pickle/unpickle is idempotent."""
135168 zi_0 = self .klass (key )
@@ -147,6 +180,7 @@ def test_pickle_unpickle_cache_multiple_rounds(self, key):
147180 self .assertIs (zi_1 , zi_2 )
148181
149182 @hypothesis .given (key = valid_keys ())
183+ @add_key_examples
150184 def test_pickle_unpickle_no_cache_multiple_rounds (self , key ):
151185 """Test that pickle/unpickle is idempotent."""
152186 zi_cache = self .klass (key )
@@ -178,13 +212,15 @@ class ZoneInfoCacheTest(ZoneInfoTestBase):
178212 module = py_zoneinfo
179213
180214 @hypothesis .given (key = valid_keys ())
215+ @add_key_examples
181216 def test_cache (self , key ):
182217 zi_0 = self .klass (key )
183218 zi_1 = self .klass (key )
184219
185220 self .assertIs (zi_0 , zi_1 )
186221
187222 @hypothesis .given (key = valid_keys ())
223+ @add_key_examples
188224 def test_no_cache (self , key ):
189225 zi_0 = self .klass .no_cache (key )
190226 zi_1 = self .klass .no_cache (key )
@@ -203,13 +239,26 @@ def _is_ambiguous(self, dt):
203239 return dt .replace (fold = not dt .fold ).utcoffset () == dt .utcoffset ()
204240
205241 @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" )
206247 def test_same_str (self , dt , key ):
207248 py_dt = dt .replace (tzinfo = py_zoneinfo .ZoneInfo (key ))
208249 c_dt = dt .replace (tzinfo = c_zoneinfo .ZoneInfo (key ))
209250
210251 self .assertEqual (str (py_dt ), str (c_dt ))
211252
212253 @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" )
213262 def test_same_offsets_and_names (self , dt , key ):
214263 py_dt = dt .replace (tzinfo = py_zoneinfo .ZoneInfo (key ))
215264 c_dt = dt .replace (tzinfo = c_zoneinfo .ZoneInfo (key ))
@@ -294,6 +343,7 @@ def test_same_to_utc(self, dt, key):
294343 self .assertEqual (py_utc , c_utc )
295344
296345 @hypothesis .given (key = valid_keys ())
346+ @add_key_examples
297347 def test_cross_module_pickle (self , key ):
298348 py_zi = py_zoneinfo .ZoneInfo (key )
299349 c_zi = c_zoneinfo .ZoneInfo (key )
0 commit comments