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: