fix(wpt-cross): model worker URL encoding fixture

This commit is contained in:
ldm0
2026-09-28 01:47:00 +08:00
parent 086114ced2
commit e8aab2f754
2 changed files with 59 additions and 0 deletions
@@ -1157,6 +1157,19 @@ def _xhr_inspect_headers_fixture_response(
return headers, b"".join(parts)
def _workers_url_encoding_response(query: str) -> bytes:
"""Model workers/semantics/encodings/003-1.py's UTF-8 query check."""
value = next(
(
value
for name, value in parse_qsl(query, keep_blank_values=True)
if name == "x"
),
None,
)
return b"PASS" if value == "å" else b"FAIL"
def _redirect_fixture_response(query: str) -> tuple[int, str] | None:
"""Return the shared redirect response used by static WPT fixture handlers."""
@@ -2117,6 +2130,13 @@ def _make_handler(
if path == "/xhr/resources/delay.py":
self._serve_xhr_delay(parsed.query, emit_body=emit_body)
return
if path == "/workers/semantics/encodings/003-1.py":
self._send_bytes(
"text/plain; charset=utf-8",
_workers_url_encoding_response(parsed.query),
emit_body=emit_body,
)
return
if path == (
"/html/semantics/scripting-1/the-script-element/module/"
"resources/delayed-modulescript.py"
+39
View File
@@ -139,6 +139,7 @@ from moli_benchmark.wpt_cross.server import (
_substitute_wpt_template_variables,
_window_js_window_wrapper,
_wasm_webapi_status_code,
_workers_url_encoding_response,
_wpt_delay_seconds,
_wpt_dedicated_worker_js_wrapper_html,
_wpt_any_dedicated_worker_wrapper_html,
@@ -4072,6 +4073,44 @@ test(() => {}, "ok");
self.assertIsNone(_wpt_delay_seconds("ms=-1"))
self.assertIsNone(_wpt_delay_seconds("ms=nan"))
def test_fixture_server_models_worker_url_utf8_query_check(self) -> None:
self.assertEqual(_workers_url_encoding_response("x=%C3%A5"), b"PASS")
self.assertEqual(_workers_url_encoding_response("x=%C3%A5&x=wrong"), b"PASS")
self.assertEqual(_workers_url_encoding_response("x=%C3%83%C2%A5"), b"FAIL")
self.assertEqual(_workers_url_encoding_response("x=%E5"), b"FAIL")
self.assertEqual(_workers_url_encoding_response(""), b"FAIL")
with tempfile.TemporaryDirectory() as root:
root_path = Path(root)
(root_path / "resources").mkdir()
(root_path / "resources" / "testharness.js").write_text(
"// testharness", encoding="utf-8"
)
with WptFixtureServer(root_path) as server:
url = (
f"{server.base_url}/workers/semantics/encodings/"
"003-1.py?x=%C3%A5"
)
responses = []
for method in ("GET", "HEAD"):
with urlopen(Request(url, method=method), timeout=2) as response:
responses.append(
(
method,
response.status,
response.read(),
response.headers["Content-Type"],
)
)
self.assertEqual(
responses,
[
("GET", 200, b"PASS", "text/plain; charset=utf-8"),
("HEAD", 200, b"", "text/plain; charset=utf-8"),
],
)
def test_fixture_server_models_xhr_delay_py_methods(self) -> None:
with tempfile.TemporaryDirectory() as root:
root_path = Path(root)