| import subprocess | |
| import pathlib | |
| import pytest | |
| TEST_PATH = pathlib.Path(__file__).parents[1].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"]) |