summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2025-01-02 13:00:26 (GMT)
committerGitHub <noreply@github.com>2025-01-02 13:00:26 (GMT)
commit9ba0528537b2befcd02a7fdc5904e0cfbc33a887 (patch)
tree02dc843ba47928e8902154655a0d6f9cfb95ddc8 /Lib
parent8e48a6edc75ca67a34924bbe54463ca913ae6e58 (diff)
downloadcpython-9ba0528537b2befcd02a7fdc5904e0cfbc33a887.zip
cpython-9ba0528537b2befcd02a7fdc5904e0cfbc33a887.tar.gz
cpython-9ba0528537b2befcd02a7fdc5904e0cfbc33a887.tar.bz2
gh-128404: Remove ``asyncio`` from ``test_builtin`` (#128403)
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_builtin.py123
1 files changed, 64 insertions, 59 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index f981383..5f4eac5 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1,7 +1,6 @@
# Python test set -- built-in functions
import ast
-import asyncio
import builtins
import collections
import contextlib
@@ -31,7 +30,8 @@ from textwrap import dedent
from types import AsyncGeneratorType, FunctionType, CellType
from operator import neg
from test import support
-from test.support import (cpython_only, swap_attr, maybe_get_event_loop_policy)
+from test.support import cpython_only, swap_attr
+from test.support import async_yield, run_yielding_async_fn
from test.support.import_helper import import_module
from test.support.os_helper import (EnvironmentVarGuard, TESTFN, unlink)
from test.support.script_helper import assert_python_ok
@@ -414,10 +414,6 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
msg=f"source={source} mode={mode}")
- @unittest.skipIf(
- support.is_emscripten or support.is_wasi,
- "socket.accept is broken"
- )
def test_compile_top_level_await(self):
"""Test whether code with top level await can be compiled.
@@ -432,13 +428,25 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
for i in range(n):
yield i
+ class Lock:
+ async def __aenter__(self):
+ return self
+
+ async def __aexit__(self, *exc_info):
+ pass
+
+ async def sleep(delay, result=None):
+ assert delay == 0
+ await async_yield(None)
+ return result
+
modes = ('single', 'exec')
optimizations = (-1, 0, 1, 2)
code_samples = [
- '''a = await asyncio.sleep(0, result=1)''',
+ '''a = await sleep(0, result=1)''',
'''async for i in arange(1):
a = 1''',
- '''async with asyncio.Lock() as l:
+ '''async with Lock() as l:
a = 1''',
'''a = [x async for x in arange(2)][1]''',
'''a = 1 in {x async for x in arange(2)}''',
@@ -446,16 +454,16 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
'''a = [x async for x in arange(2) async for x in arange(2)][1]''',
'''a = [x async for x in (x async for x in arange(5))][1]''',
'''a, = [1 for x in {x async for x in arange(1)}]''',
- '''a = [await asyncio.sleep(0, x) async for x in arange(2)][1]''',
+ '''a = [await sleep(0, x) async for x in arange(2)][1]''',
# gh-121637: Make sure we correctly handle the case where the
# async code is optimized away
- '''assert not await asyncio.sleep(0); a = 1''',
+ '''assert not await sleep(0); a = 1''',
'''assert [x async for x in arange(1)]; a = 1''',
'''assert {x async for x in arange(1)}; a = 1''',
'''assert {x: x async for x in arange(1)}; a = 1''',
'''
if (a := 1) and __debug__:
- async with asyncio.Lock() as l:
+ async with Lock() as l:
pass
''',
'''
@@ -464,36 +472,31 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
pass
''',
]
- policy = maybe_get_event_loop_policy()
- try:
- for mode, code_sample, optimize in product(modes, code_samples, optimizations):
- with self.subTest(mode=mode, code_sample=code_sample, optimize=optimize):
- source = dedent(code_sample)
- with self.assertRaises(
- SyntaxError, msg=f"source={source} mode={mode}"):
- compile(source, '?', mode, optimize=optimize)
-
- co = compile(source,
- '?',
- mode,
- flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT,
- optimize=optimize)
-
- self.assertEqual(co.co_flags & CO_COROUTINE, CO_COROUTINE,
- msg=f"source={source} mode={mode}")
-
- # test we can create and advance a function type
- globals_ = {'asyncio': asyncio, 'a': 0, 'arange': arange}
- async_f = FunctionType(co, globals_)
- asyncio.run(async_f())
- self.assertEqual(globals_['a'], 1)
-
- # test we can await-eval,
- globals_ = {'asyncio': asyncio, 'a': 0, 'arange': arange}
- asyncio.run(eval(co, globals_))
- self.assertEqual(globals_['a'], 1)
- finally:
- asyncio._set_event_loop_policy(policy)
+ for mode, code_sample, optimize in product(modes, code_samples, optimizations):
+ with self.subTest(mode=mode, code_sample=code_sample, optimize=optimize):
+ source = dedent(code_sample)
+ with self.assertRaises(
+ SyntaxError, msg=f"source={source} mode={mode}"):
+ compile(source, '?', mode, optimize=optimize)
+
+ co = compile(source,
+ '?',
+ mode,
+ flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT,
+ optimize=optimize)
+
+ self.assertEqual(co.co_flags & CO_COROUTINE, CO_COROUTINE,
+ msg=f"source={source} mode={mode}")
+
+ # test we can create and advance a function type
+ globals_ = {'Lock': Lock, 'a': 0, 'arange': arange, 'sleep': sleep}
+ run_yielding_async_fn(FunctionType(co, globals_))
+ self.assertEqual(globals_['a'], 1)
+
+ # test we can await-eval,
+ globals_ = {'Lock': Lock, 'a': 0, 'arange': arange, 'sleep': sleep}
+ run_yielding_async_fn(lambda: eval(co, globals_))
+ self.assertEqual(globals_['a'], 1)
def test_compile_top_level_await_invalid_cases(self):
# helper function just to check we can run top=level async-for
@@ -501,6 +504,13 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
for i in range(n):
yield i
+ class Lock:
+ async def __aenter__(self):
+ return self
+
+ async def __aexit__(self, *exc_info):
+ pass
+
modes = ('single', 'exec')
code_samples = [
'''def f(): await arange(10)\n''',
@@ -511,27 +521,22 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
a = 1
''',
'''def f():
- async with asyncio.Lock() as l:
+ async with Lock() as l:
a = 1
'''
]
- policy = maybe_get_event_loop_policy()
- try:
- for mode, code_sample in product(modes, code_samples):
- source = dedent(code_sample)
- with self.assertRaises(
- SyntaxError, msg=f"source={source} mode={mode}"):
- compile(source, '?', mode)
-
- with self.assertRaises(
- SyntaxError, msg=f"source={source} mode={mode}"):
- co = compile(source,
- '?',
- mode,
- flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT)
- finally:
- asyncio._set_event_loop_policy(policy)
+ for mode, code_sample in product(modes, code_samples):
+ source = dedent(code_sample)
+ with self.assertRaises(
+ SyntaxError, msg=f"source={source} mode={mode}"):
+ compile(source, '?', mode)
+ with self.assertRaises(
+ SyntaxError, msg=f"source={source} mode={mode}"):
+ co = compile(source,
+ '?',
+ mode,
+ flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT)
def test_compile_async_generator(self):
"""
@@ -542,7 +547,7 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
code = dedent("""async def ticker():
for i in range(10):
yield i
- await asyncio.sleep(0)""")
+ await sleep(0)""")
co = compile(code, '?', 'exec', flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT)
glob = {}