gtn/.venv/Lib/site-packages/mypyc/test/test_commandline.py
Tipragot 628be439b8 Ajout d'un environement de développement.
Cela permet de ne pas avoir de problèmes de compatibilité
car python est dans le git.
2023-10-26 15:33:03 +02:00

83 lines
2.8 KiB
Python

"""Test cases for invoking mypyc on the command line.
These are slow -- do not add test cases unless you have a very good reason to do so.
"""
from __future__ import annotations
import glob
import os
import os.path
import re
import subprocess
import sys
from mypy.test.config import test_temp_dir
from mypy.test.data import DataDrivenTestCase
from mypy.test.helpers import normalize_error_messages
from mypyc.test.testutil import MypycDataSuite, assert_test_output
files = ["commandline.test"]
base_path = os.path.join(os.path.dirname(__file__), "..", "..")
python3_path = sys.executable
class TestCommandLine(MypycDataSuite):
files = files
base_path = test_temp_dir
optional_out = True
def run_case(self, testcase: DataDrivenTestCase) -> None:
# Parse options from test case description (arguments must not have spaces)
text = "\n".join(testcase.input)
m = re.search(r"# *cmd: *(.*)", text)
assert m is not None, 'Test case missing "# cmd: <files>" section'
args = m.group(1).split()
# Write main program to run (not compiled)
program = "_%s.py" % testcase.name
program_path = os.path.join(test_temp_dir, program)
with open(program_path, "w") as f:
f.write(text)
env = os.environ.copy()
env["PYTHONPATH"] = base_path
out = b""
try:
# Compile program
cmd = subprocess.run(
[sys.executable, "-m", "mypyc", *args],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd="tmp",
env=env,
)
if "ErrorOutput" in testcase.name or cmd.returncode != 0:
out += cmd.stdout
elif "WarningOutput" in testcase.name:
# Strip out setuptools build related output since we're only
# interested in the messages emitted during compilation.
messages, _, _ = cmd.stdout.partition(b"running build_ext")
out += messages
if cmd.returncode == 0:
# Run main program
out += subprocess.check_output([python3_path, program], cwd="tmp")
finally:
suffix = "pyd" if sys.platform == "win32" else "so"
so_paths = glob.glob(f"tmp/**/*.{suffix}", recursive=True)
for path in so_paths:
os.remove(path)
# Strip out 'tmp/' from error message paths in the testcase output,
# due to a mismatch between this test and mypy's test suite.
expected = [x.replace("tmp/", "") for x in testcase.output]
# Verify output
actual = normalize_error_messages(out.decode().splitlines())
assert_test_output(testcase, actual, "Invalid output", expected=expected)