diff --git a/moli-benchmark/moli_benchmark/wpt_cross/case_set.py b/moli-benchmark/moli_benchmark/wpt_cross/case_set.py index 08574384a8..5fc797f0bd 100644 --- a/moli-benchmark/moli_benchmark/wpt_cross/case_set.py +++ b/moli-benchmark/moli_benchmark/wpt_cross/case_set.py @@ -7,11 +7,11 @@ URLs, ``==`` / ``!=`` references, timeout metadata, and fuzzy bounds. A testharness case is selectable if: * The file does not live under one of the default excluded directory prefixes. -* It is a navigable ``.html`` file, a selected ``.any.js`` global, or a +* It is a navigable ``.html`` / ``.htm`` file, a selected ``.any.js`` global, or a ``.window.js`` / ``.worker.js`` script case that can be wrapped as a testharness page. * Its filename does not contain ``.tentative`` or ``.optional``. -* Its filename does not end in ``-manual.html``. +* Its filename does not end in ``-manual.html`` or ``-manual.htm``. * It is not under a ``resources`` support directory. * HTML cases reference ``/resources/testharness.js``. * The file body does NOT reference ``/resources/testdriver`` (testdriver @@ -49,6 +49,7 @@ import re from dataclasses import dataclass from html import unescape from html.parser import HTMLParser +from itertools import chain from pathlib import Path from typing import Any, Iterator from urllib.parse import urljoin, urlsplit @@ -853,7 +854,7 @@ def enumerate_cases( base = wpt_root / prefix if not base.exists(): continue - for path in base.rglob("*.html"): + for path in chain(base.rglob("*.html"), base.rglob("*.htm")): if not path.is_file(): continue rel = path.relative_to(wpt_root).as_posix() @@ -1133,7 +1134,7 @@ def _is_default_goal_container_query_case(rel: str) -> bool: def _is_manual_or_support_case(rel: str) -> bool: parts = rel.split("/") - return parts[-1].endswith("-manual.html") or any( + return parts[-1].endswith(("-manual.html", "-manual.htm")) or any( part in {"resources", "support"} for part in parts[:-1] ) diff --git a/moli-benchmark/tests/test_wpt_cross.py b/moli-benchmark/tests/test_wpt_cross.py index e58a84b687..bb6e657821 100644 --- a/moli-benchmark/tests/test_wpt_cross.py +++ b/moli-benchmark/tests/test_wpt_cross.py @@ -2421,6 +2421,36 @@ class WptCrossTests(unittest.TestCase): self.assertFalse(audit["ok"]) self.assertEqual(audit["counts"]["resolved_known_failures"], 1) + def test_enumerate_cases_includes_htm_before_applying_limit(self) -> None: + with tempfile.TemporaryDirectory() as temp_dir: + wpt_root = Path(temp_dir) + case_dir = wpt_root / "dom" + case_dir.mkdir() + harness = '' + (case_dir / "a.htm").write_text( + '' + '' + '' + + harness, + encoding="utf-8", + ) + (case_dir / "z.html").write_text(harness, encoding="utf-8") + expected = [ + WptCase("dom/a.htm?mode=a", LONG_TIMEOUT_MULTIPLIER), + WptCase("dom/a.htm?mode=z", LONG_TIMEOUT_MULTIPLIER), + WptCase("dom/z.html"), + ] + + for prefixes in (None, ("dom",)): + with self.subTest(dir_prefixes=prefixes): + self.assertEqual( + enumerate_cases(wpt_root, dir_prefixes=prefixes), expected + ) + self.assertEqual( + enumerate_cases(wpt_root, dir_prefixes=prefixes, limit=1), + expected[:1], + ) + def test_enumerate_cases_expands_wpt_meta_variants(self) -> None: with tempfile.TemporaryDirectory() as temp_dir: wpt_root = Path(temp_dir) @@ -2732,14 +2762,24 @@ class WptCrossTests(unittest.TestCase): """ - (case_dir / "kept.html").write_text(case_html, encoding="utf-8") - (case_dir / "upload-manual.html").write_text(case_html, encoding="utf-8") - (resource_dir / "helper.html").write_text(case_html, encoding="utf-8") - (support_dir / "helper.html").write_text(case_html, encoding="utf-8") + for suffix in (".html", ".htm"): + (case_dir / f"kept{suffix}").write_text(case_html, encoding="utf-8") + (case_dir / f"upload-manual{suffix}").write_text( + case_html, encoding="utf-8" + ) + (resource_dir / f"helper{suffix}").write_text( + case_html, encoding="utf-8" + ) + (support_dir / f"helper{suffix}").write_text( + case_html, encoding="utf-8" + ) cases = enumerate_cases(wpt_root) - self.assertEqual([case.case_path for case in cases], ["FileAPI/kept.html"]) + self.assertEqual( + [case.case_path for case in cases], + ["FileAPI/kept.htm", "FileAPI/kept.html"], + ) def test_explicit_dir_prefix_bypasses_default_rendering_blacklist(self) -> None: with tempfile.TemporaryDirectory() as temp_dir: