Files
vasilito facf0c92e0 feat: track all source trees in git — full fork offline-first model
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.
2026-05-14 10:55:53 +01:00

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