Edit

kc3-lang/libffi/testsuite/emscripten/conftest.py

Branch :

  • Show log

    Commit

  • Author : Daily Price Depot Droid
    Date : 2023-10-21 09:05:48
    Hash : 357755ee
    Message : Try logging

  • testsuite/emscripten/conftest.py
  • from pathlib import Path
    from pytest import fixture
    from pytest_pyodide.server import spawn_web_server
    from pytest_pyodide import runner
    
    import logging
    
    TEST_PATH = Path(__file__).parents[1].resolve()
    
    
    class BaseRunner(runner._BrowserBaseRunner):
        def __init__(
            self,
            *args,
            test_dir,
            **kwargs,
        ):
            self.test_dir = test_dir
            super().__init__(
                *args,
                **kwargs,
                load_pyodide=False,
            )
    
        def prepare_driver(self):
            self.base_url = (
                f"http://{self.server_hostname}:{self.server_port}/{self.test_dir}/"
            )
            self.goto(f"{self.base_url}/test.html")
    
        def javascript_setup(self):
            self.run_js("globalThis.TestModule = await globalThis.Module();")
    
    
    class FirefoxRunner(BaseRunner, runner.SeleniumFirefoxRunner):
        pass
    
    
    class ChromeRunner(BaseRunner, runner.SeleniumChromeRunner):
        pass
    
    
    # TODO: Figure out how to get NodeRunner to work.
    
    RUNNER_DICT = {x.browser: x for x in [FirefoxRunner, ChromeRunner]}
    
    
    @fixture(params=list(RUNNER_DICT), scope="class")
    def selenium_class_scope(request, web_server_main):
        server_hostname, server_port, server_log = web_server_main
        assert request.param in RUNNER_DICT
    
        logger = logging.getLogger('selenium')
        logger.setLevel(logging.DEBUG)
    
        cls = RUNNER_DICT[request.param]
        selenium = cls(
            test_dir=request.cls.TEST_BUILD_DIR,
            server_port=server_port,
            server_hostname=server_hostname,
            server_log=server_log,
        )
        request.cls.call_number = 0
        try:
            yield selenium
        finally:
            print(selenium.logs)
            selenium.driver.quit()
    
    
    @fixture(scope="function")
    def selenium(selenium_class_scope, request):
        selenium = selenium_class_scope
        request.cls.call_number += 1
        # Refresh page every 50 calls to prevent firefox out of memory errors
        if request.cls.call_number % 50 == 0:
            selenium.driver.refresh()
            selenium.javascript_setup()
        selenium.clean_logs()
        yield selenium
    
    
    @fixture(scope="session")
    def web_server_main(request):
        with spawn_web_server(TEST_PATH) as output:
            yield output