summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_typing.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 44712b6..9ab42a3 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -1735,6 +1735,23 @@ class CollectionsAbcTests(BaseTestCase):
with self.assertRaises(TypeError):
typing.Generator[int, int, int]()
+ @skipUnless(PY36, 'Python 3.6 required')
+ def test_async_generator(self):
+ ns = {}
+ exec("async def f():\n"
+ " yield 42\n", globals(), ns)
+ g = ns['f']()
+ self.assertIsSubclass(type(g), typing.AsyncGenerator)
+
+ @skipUnless(PY36, 'Python 3.6 required')
+ def test_no_async_generator_instantiation(self):
+ with self.assertRaises(TypeError):
+ typing.AsyncGenerator()
+ with self.assertRaises(TypeError):
+ typing.AsyncGenerator[T, T]()
+ with self.assertRaises(TypeError):
+ typing.AsyncGenerator[int, int]()
+
def test_subclassing(self):
class MMA(typing.MutableMapping):
@@ -1804,6 +1821,31 @@ class CollectionsAbcTests(BaseTestCase):
self.assertIsSubclass(G, collections.Iterable)
self.assertNotIsSubclass(type(g), G)
+ @skipUnless(PY36, 'Python 3.6 required')
+ def test_subclassing_async_generator(self):
+ class G(typing.AsyncGenerator[int, int]):
+ def asend(self, value):
+ pass
+ def athrow(self, typ, val=None, tb=None):
+ pass
+
+ ns = {}
+ exec('async def g(): yield 0', globals(), ns)
+ g = ns['g']
+ self.assertIsSubclass(G, typing.AsyncGenerator)
+ self.assertIsSubclass(G, typing.AsyncIterable)
+ self.assertIsSubclass(G, collections.AsyncGenerator)
+ self.assertIsSubclass(G, collections.AsyncIterable)
+ self.assertNotIsSubclass(type(g), G)
+
+ instance = G()
+ self.assertIsInstance(instance, typing.AsyncGenerator)
+ self.assertIsInstance(instance, typing.AsyncIterable)
+ self.assertIsInstance(instance, collections.AsyncGenerator)
+ self.assertIsInstance(instance, collections.AsyncIterable)
+ self.assertNotIsInstance(type(g), G)
+ self.assertNotIsInstance(g, G)
+
def test_subclassing_subclasshook(self):
class Base(typing.Iterable):