pyodide/test/test_core_python.py

66 lines
2.1 KiB
Python

from pathlib import Path
import pytest
def test_cpython_core(python_test, selenium, request):
name, error_flags = python_test
# keep only flags related to the current browser
flags_to_remove = ["firefox", "chrome"]
flags_to_remove.remove(selenium.browser)
for flag in flags_to_remove:
if "crash-" + flag in error_flags:
error_flags.remove("crash-" + flag)
if any(flag.startswith("segfault") for flag in error_flags):
pytest.skip('known segfault with code: "{}"'.format(",".join(error_flags)))
if error_flags:
if request.config.option.run_xfail:
request.applymarker(
pytest.mark.xfail(
run=False,
reason='known failure with code "{}"'.format(",".join(error_flags)),
)
)
else:
pytest.xfail('known failure with code "{}"'.format(",".join(error_flags)))
selenium.load_package("test")
try:
selenium.run(
"""
from test.libregrtest import main
try:
main(['{}'], verbose=True, verbose3=True)
except SystemExit as e:
if e.code != 0:
raise RuntimeError(f'Failed with code: {{e.code}}')
""".format(
name
)
)
except selenium.JavascriptException:
print(selenium.logs)
raise
def pytest_generate_tests(metafunc):
if "python_test" in metafunc.fixturenames:
test_modules = []
test_modules_ids = []
with open(Path(__file__).parent / "python_tests.txt") as fp:
for line in fp:
line = line.strip()
if line.startswith("#") or not line:
continue
error_flags = line.split()
name = error_flags.pop(0)
test_modules.append((name, error_flags))
# explicitly define test ids to keep
# a human readable test name in pytest
test_modules_ids.append(name)
metafunc.parametrize("python_test", test_modules, ids=test_modules_ids)