|
33 | 33 | import weakref |
34 | 34 | import types |
35 | 35 |
|
| 36 | +from test.support import import_helper |
36 | 37 | from test import mod_generics_cache |
37 | 38 | from test import _typed_dict_helper |
38 | 39 |
|
39 | 40 |
|
| 41 | +py_typing = import_helper.import_fresh_module('typing', blocked=['_typing']) |
| 42 | +c_typing = import_helper.import_fresh_module('typing', fresh=['_typing']) |
| 43 | + |
| 44 | + |
40 | 45 | class BaseTestCase(TestCase): |
41 | 46 |
|
42 | 47 | def assertIsSubclass(self, cls, class_or_tuple, msg=None): |
@@ -3673,48 +3678,75 @@ def foo(a: A) -> Optional[BaseException]: |
3673 | 3678 | assert foo(None) is None |
3674 | 3679 |
|
3675 | 3680 |
|
3676 | | -class NewTypeTests(BaseTestCase): |
| 3681 | +class TestModules(TestCase): |
| 3682 | + func_names = ['_idfunc'] |
| 3683 | + |
| 3684 | + def test_py_functions(self): |
| 3685 | + for fname in self.func_names: |
| 3686 | + self.assertEqual(getattr(py_typing, fname).__module__, 'typing') |
| 3687 | + |
| 3688 | + @skipUnless(c_typing, 'requires _typing') |
| 3689 | + def test_c_functions(self): |
| 3690 | + for fname in self.func_names: |
| 3691 | + self.assertEqual(getattr(c_typing, fname).__module__, '_typing') |
| 3692 | + |
| 3693 | + |
| 3694 | +class NewTypeTests: |
| 3695 | + def setUp(self): |
| 3696 | + sys.modules['typing'] = self.module |
| 3697 | + |
| 3698 | + def tearDown(self): |
| 3699 | + sys.modules['typing'] = typing |
3677 | 3700 |
|
3678 | 3701 | def test_basic(self): |
3679 | | - UserId = NewType('UserId', int) |
3680 | | - UserName = NewType('UserName', str) |
| 3702 | + UserId = self.module.NewType('UserId', int) |
| 3703 | + UserName = self.module.NewType('UserName', str) |
3681 | 3704 | self.assertIsInstance(UserId(5), int) |
3682 | 3705 | self.assertIsInstance(UserName('Joe'), str) |
3683 | 3706 | self.assertEqual(UserId(5) + 1, 6) |
3684 | 3707 |
|
3685 | 3708 | def test_errors(self): |
3686 | | - UserId = NewType('UserId', int) |
3687 | | - UserName = NewType('UserName', str) |
| 3709 | + UserId = self.module.NewType('UserId', int) |
| 3710 | + UserName = self.module.NewType('UserName', str) |
3688 | 3711 | with self.assertRaises(TypeError): |
3689 | 3712 | issubclass(UserId, int) |
3690 | 3713 | with self.assertRaises(TypeError): |
3691 | 3714 | class D(UserName): |
3692 | 3715 | pass |
3693 | 3716 |
|
3694 | 3717 | def test_or(self): |
3695 | | - UserId = NewType('UserId', int) |
3696 | | - UserName = NewType('UserName', str) |
| 3718 | + UserId = self.module.NewType('UserId', int) |
| 3719 | + UserName = self.module.NewType('UserName', str) |
3697 | 3720 |
|
3698 | 3721 | for cls in (int, UserName): |
3699 | 3722 | with self.subTest(cls=cls): |
3700 | | - self.assertEqual(UserId | cls, Union[UserId, cls]) |
3701 | | - self.assertEqual(cls | UserId, Union[cls, UserId]) |
| 3723 | + self.assertEqual(UserId | cls, self.module.Union[UserId, cls]) |
| 3724 | + self.assertEqual(cls | UserId, self.module.Union[cls, UserId]) |
3702 | 3725 |
|
3703 | | - self.assertEqual(get_args(UserId | cls), (UserId, cls)) |
3704 | | - self.assertEqual(get_args(cls | UserId), (cls, UserId)) |
| 3726 | + self.assertEqual(self.module.get_args(UserId | cls), (UserId, cls)) |
| 3727 | + self.assertEqual(self.module.get_args(cls | UserId), (cls, UserId)) |
3705 | 3728 |
|
3706 | 3729 | def test_special_attrs(self): |
3707 | | - UserId = NewType('UserId', int) |
| 3730 | + UserId = self.module.NewType('UserId', int) |
3708 | 3731 |
|
3709 | 3732 | self.assertEqual(UserId.__name__, 'UserId') |
3710 | 3733 | self.assertEqual(UserId.__qualname__, 'UserId') |
3711 | 3734 | self.assertEqual(UserId.__module__, __name__) |
3712 | 3735 |
|
3713 | 3736 | def test_repr(self): |
3714 | | - UserId = NewType('UserId', int) |
| 3737 | + UserId = self.module.NewType('UserId', int) |
3715 | 3738 |
|
3716 | 3739 | self.assertEqual(repr(UserId), f'{__name__}.UserId') |
3717 | 3740 |
|
| 3741 | +class NewTypePythonTests(BaseTestCase, NewTypeTests): |
| 3742 | + module = py_typing |
| 3743 | + |
| 3744 | + |
| 3745 | +@skipUnless(c_typing, 'requires _typing') |
| 3746 | +class NewTypeCTests(BaseTestCase, NewTypeTests): |
| 3747 | + module = c_typing |
| 3748 | + |
| 3749 | + |
3718 | 3750 | class NamedTupleTests(BaseTestCase): |
3719 | 3751 | class NestedEmployee(NamedTuple): |
3720 | 3752 | name: str |
|
0 commit comments