import subprocess import pathlib import pytest

TEST_PATH = pathlib.Path(__file__).parents.resolve()

xfails = {}

def libffi_tests(self, selenium, libffi_test):

if libffi_test in xfails:
    pytest.xfail(f'known failure with code "{xfails[libffi_test]}"')
res = selenium.run_js(
    """
    window.TestModule = await Module();
    """
)
selenium.run_js(
    f"""
    try {{
        TestModule._test__{libffi_test}();
    }} catch(e){{
        if(e.name !== "ExitStatus"){{
            throw e;
        }}
        if(e.status !== 0){{
            throw new Error(`Terminated with nonzero status code ${{e.status}}: ` + e.message);
        }}
    }}
    """
)

class TestCall:

TEST_BUILD_DIR = "libffi.call.test"
test_call = libffi_tests

class TestClosures:

TEST_BUILD_DIR = "libffi.closures.test"
test_closures = libffi_tests

def pytest_generate_tests(metafunc):

test_build_dir = metafunc.cls.TEST_BUILD_DIR
test_names = [x.stem for x in (TEST_PATH / test_build_dir).glob("*.o")]
metafunc.parametrize("libffi_test", test_names)

if __name__ == “__main__”:

subprocess.call(["build-tests.sh", "libffi.call"])