mirror of
https://github.com/python/cpython.git
synced 2025-11-24 04:17:38 +00:00
gh-140438: properly run the asyncio REPL tests (#140298)
This commit is contained in:
parent
574405c19e
commit
1a3da2c070
1 changed files with 14 additions and 5 deletions
|
|
@ -5,6 +5,7 @@ import select
|
|||
import subprocess
|
||||
import sys
|
||||
import unittest
|
||||
from functools import partial
|
||||
from textwrap import dedent
|
||||
from test import support
|
||||
from test.support import (
|
||||
|
|
@ -27,7 +28,7 @@ if not has_subprocess_support:
|
|||
raise unittest.SkipTest("test module requires subprocess")
|
||||
|
||||
|
||||
def spawn_repl(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw):
|
||||
def spawn_repl(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, custom=False, **kw):
|
||||
"""Run the Python REPL with the given arguments.
|
||||
|
||||
kw is extra keyword args to pass to subprocess.Popen. Returns a Popen
|
||||
|
|
@ -41,7 +42,11 @@ def spawn_repl(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw):
|
|||
# path may be used by PyConfig_Get("module_search_paths") to build the
|
||||
# default module search path.
|
||||
stdin_fname = os.path.join(os.path.dirname(sys.executable), "<stdin>")
|
||||
cmd_line = [stdin_fname, '-I', '-i']
|
||||
cmd_line = [stdin_fname, '-I']
|
||||
# Don't re-run the built-in REPL from interactive mode
|
||||
# if we're testing a custom REPL (such as the asyncio REPL).
|
||||
if not custom:
|
||||
cmd_line.append('-i')
|
||||
cmd_line.extend(args)
|
||||
|
||||
# Set TERM=vt100, for the rationale see the comments in spawn_python() of
|
||||
|
|
@ -55,6 +60,10 @@ def spawn_repl(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw):
|
|||
stdout=stdout, stderr=stderr,
|
||||
**kw)
|
||||
|
||||
|
||||
spawn_asyncio_repl = partial(spawn_repl, "-m", "asyncio", custom=True)
|
||||
|
||||
|
||||
def run_on_interactive_mode(source):
|
||||
"""Spawn a new Python interpreter, pass the given
|
||||
input source code from the stdin and return the
|
||||
|
|
@ -359,7 +368,7 @@ class TestInteractiveModeSyntaxErrors(unittest.TestCase):
|
|||
class TestAsyncioREPL(unittest.TestCase):
|
||||
def test_multiple_statements_fail_early(self):
|
||||
user_input = "1 / 0; print(f'afterwards: {1+1}')"
|
||||
p = spawn_repl("-m", "asyncio")
|
||||
p = spawn_asyncio_repl()
|
||||
p.stdin.write(user_input)
|
||||
output = kill_python(p)
|
||||
self.assertIn("ZeroDivisionError", output)
|
||||
|
|
@ -371,7 +380,7 @@ class TestAsyncioREPL(unittest.TestCase):
|
|||
var = ContextVar("var", default="failed")
|
||||
var.set("ok")
|
||||
""")
|
||||
p = spawn_repl("-m", "asyncio")
|
||||
p = spawn_asyncio_repl()
|
||||
p.stdin.write(user_input)
|
||||
user_input2 = dedent("""
|
||||
print(f"toplevel contextvar test: {var.get()}")
|
||||
|
|
@ -387,7 +396,7 @@ class TestAsyncioREPL(unittest.TestCase):
|
|||
from contextvars import ContextVar
|
||||
var = ContextVar('var', default='failed')
|
||||
""")
|
||||
p = spawn_repl("-m", "asyncio")
|
||||
p = spawn_asyncio_repl()
|
||||
p.stdin.write(user_input)
|
||||
user_input2 = "async def set_var(): var.set('ok')\n"
|
||||
p.stdin.write(user_input2)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue