diff options
author | Ivan Levkivskyi <levkivskyi@gmail.com> | 2018-05-09 01:23:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-09 01:23:46 (GMT) |
commit | 43d12a6bd82bd09ac189069fe1eb40cdbc10a58c (patch) | |
tree | 571c07dc83eb43ce93d4e3f12499f04c0ca84648 /Lib/test/test_typing.py | |
parent | 0904f766e116c269675317e11368a4d29eef0bc6 (diff) | |
download | cpython-43d12a6bd82bd09ac189069fe1eb40cdbc10a58c.zip cpython-43d12a6bd82bd09ac189069fe1eb40cdbc10a58c.tar.gz cpython-43d12a6bd82bd09ac189069fe1eb40cdbc10a58c.tar.bz2 |
bpo-28556: Minor fixes for typing module (GH-6732)
This also fixes https://bugs.python.org/issue33420
Diffstat (limited to 'Lib/test/test_typing.py')
-rw-r--r-- | Lib/test/test_typing.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 390fe60..46bab5e 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1324,6 +1324,72 @@ class GenericTests(BaseTestCase): with self.assertRaises(Exception): D[T] + def test_new_with_args(self): + + class A(Generic[T]): + pass + + class B: + def __new__(cls, arg): + # call object + obj = super().__new__(cls) + obj.arg = arg + return obj + + # mro: C, A, Generic, B, object + class C(A, B): + pass + + c = C('foo') + self.assertEqual(c.arg, 'foo') + + def test_new_with_args2(self): + + class A: + def __init__(self, arg): + self.from_a = arg + # call object + super().__init__() + + # mro: C, Generic, A, object + class C(Generic[T], A): + def __init__(self, arg): + self.from_c = arg + # call Generic + super().__init__(arg) + + c = C('foo') + self.assertEqual(c.from_a, 'foo') + self.assertEqual(c.from_c, 'foo') + + def test_new_no_args(self): + + class A(Generic[T]): + pass + + class B: + def __new__(cls): + # call object + obj = super().__new__(cls) + obj.from_b = 'b' + return obj + + # mro: C, A, Generic, B, object + class C(A, B): + def __init__(self, arg): + self.arg = arg + + def __new__(cls, arg): + # call A + obj = super().__new__(cls) + obj.from_c = 'c' + return obj + + c = C('foo') + self.assertEqual(c.arg, 'foo') + self.assertEqual(c.from_b, 'b') + self.assertEqual(c.from_c, 'c') + class ClassVarTests(BaseTestCase): @@ -1737,6 +1803,8 @@ class GetTypeHintTests(BaseTestCase): self.assertEqual(gth(HasForeignBaseClass), {'some_xrepr': XRepr, 'other_a': mod_generics_cache.A, 'some_b': mod_generics_cache.B}) + self.assertEqual(gth(XRepr.__new__), + {'x': int, 'y': int}) self.assertEqual(gth(mod_generics_cache.B), {'my_inner_a1': mod_generics_cache.B.A, 'my_inner_a2': mod_generics_cache.B.A, |