summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_typing.py
diff options
context:
space:
mode:
authorIvan Levkivskyi <levkivskyi@gmail.com>2018-05-09 01:23:46 (GMT)
committerGitHub <noreply@github.com>2018-05-09 01:23:46 (GMT)
commit43d12a6bd82bd09ac189069fe1eb40cdbc10a58c (patch)
tree571c07dc83eb43ce93d4e3f12499f04c0ca84648 /Lib/test/test_typing.py
parent0904f766e116c269675317e11368a4d29eef0bc6 (diff)
downloadcpython-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.py68
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,