diff options
author | Guido van Rossum <guido@python.org> | 2016-11-29 17:46:29 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2016-11-29 17:46:29 (GMT) |
commit | 356ae170ef47af5561d0c39be56ef32b76d704a0 (patch) | |
tree | fb2988507309c3e4ad096121aba965695c1ca7ce /Lib/test/test_typing.py | |
parent | f9c2405ff81fa1d3be9a9f49f0d5cbe811adfa31 (diff) | |
parent | c349374ee6309a9e85d98c2c9c22b9ce0e48bdfc (diff) | |
download | cpython-356ae170ef47af5561d0c39be56ef32b76d704a0.zip cpython-356ae170ef47af5561d0c39be56ef32b76d704a0.tar.gz cpython-356ae170ef47af5561d0c39be56ef32b76d704a0.tar.bz2 |
Issue #28790: Fix error when using Generic and __slots__ (Ivan L) (3.6->3.7)
Diffstat (limited to 'Lib/test/test_typing.py')
-rw-r--r-- | Lib/test/test_typing.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 0910fd4..d203ce3 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -896,6 +896,44 @@ class GenericTests(BaseTestCase): self.assertEqual(t, copy(t)) self.assertEqual(t, deepcopy(t)) + def test_parameterized_slots(self): + T = TypeVar('T') + class C(Generic[T]): + __slots__ = ('potato',) + + c = C() + c_int = C[int]() + self.assertEqual(C.__slots__, C[str].__slots__) + + c.potato = 0 + c_int.potato = 0 + with self.assertRaises(AttributeError): + c.tomato = 0 + with self.assertRaises(AttributeError): + c_int.tomato = 0 + + def foo(x: C['C']): ... + self.assertEqual(get_type_hints(foo, globals(), locals())['x'], C[C]) + self.assertEqual(get_type_hints(foo, globals(), locals())['x'].__slots__, + C.__slots__) + self.assertEqual(copy(C[int]), deepcopy(C[int])) + + def test_parameterized_slots_dict(self): + T = TypeVar('T') + class D(Generic[T]): + __slots__ = {'banana': 42} + + d = D() + d_int = D[int]() + self.assertEqual(D.__slots__, D[str].__slots__) + + d.banana = 'yes' + d_int.banana = 'yes' + with self.assertRaises(AttributeError): + d.foobar = 'no' + with self.assertRaises(AttributeError): + d_int.foobar = 'no' + def test_errors(self): with self.assertRaises(TypeError): B = SimpleMapping[XK, Any] |