|
2 | 2 |
|
3 | 3 | import unittest |
4 | 4 | import pickle |
| 5 | +import copy |
5 | 6 | from collections import ( |
6 | 7 | defaultdict, deque, OrderedDict, Counter, UserDict, UserList |
7 | 8 | ) |
@@ -270,11 +271,30 @@ class MyType(type): |
270 | 271 |
|
271 | 272 | def test_pickle(self): |
272 | 273 | alias = GenericAlias(list, T) |
273 | | - s = pickle.dumps(alias) |
274 | | - loaded = pickle.loads(s) |
275 | | - self.assertEqual(alias.__origin__, loaded.__origin__) |
276 | | - self.assertEqual(alias.__args__, loaded.__args__) |
277 | | - self.assertEqual(alias.__parameters__, loaded.__parameters__) |
| 274 | + for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 275 | + s = pickle.dumps(alias, proto) |
| 276 | + loaded = pickle.loads(s) |
| 277 | + self.assertEqual(loaded.__origin__, alias.__origin__) |
| 278 | + self.assertEqual(loaded.__args__, alias.__args__) |
| 279 | + self.assertEqual(loaded.__parameters__, alias.__parameters__) |
| 280 | + |
| 281 | + def test_copy(self): |
| 282 | + class X(list): |
| 283 | + def __copy__(self): |
| 284 | + return self |
| 285 | + def __deepcopy__(self, memo): |
| 286 | + return self |
| 287 | + |
| 288 | + for origin in list, deque, X: |
| 289 | + alias = GenericAlias(origin, T) |
| 290 | + copied = copy.copy(alias) |
| 291 | + self.assertEqual(copied.__origin__, alias.__origin__) |
| 292 | + self.assertEqual(copied.__args__, alias.__args__) |
| 293 | + self.assertEqual(copied.__parameters__, alias.__parameters__) |
| 294 | + copied = copy.deepcopy(alias) |
| 295 | + self.assertEqual(copied.__origin__, alias.__origin__) |
| 296 | + self.assertEqual(copied.__args__, alias.__args__) |
| 297 | + self.assertEqual(copied.__parameters__, alias.__parameters__) |
278 | 298 |
|
279 | 299 | def test_union(self): |
280 | 300 | a = typing.Union[list[int], list[str]] |
|
0 commit comments