facf0c92e0
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
87 lines
2.1 KiB
Python
87 lines
2.1 KiB
Python
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
|