test(browser): compare ax.find across both hosts on one page

This commit is contained in:
pj committed 2026-08-15 20:39:18 +05:30
1 parent 3fe972946d
commit e62b08dffd
3 files changed
+111

No files matched your search

+16
View File
@@ -0,0 +1,16 @@
<!doctype html>
<html>
<body>
<!-- Two elements share the id, one inside a shadow root on the mount and
one later in the light DOM. The hierarchy dump orders a host's shadow
children before its light ones, so a pre-order search there reaches the
shadow one first; a light-DOM sweep that only descends afterwards
reaches the other. The page exists to make the two walks disagree. -->
<div id="mount" style="width: 200px; height: 80px"></div>
<span id="x">light</span>
<script>
document.getElementById("mount").attachShadow({ mode: "open" }).innerHTML =
'<span id="x">shadow</span>';
</script>
</body>
</html>
+17
View File
@@ -0,0 +1,17 @@
import { always, extract, taps } from "@sanderling/spec";
// Which of the two #x a selector means is the whole fixture. The reading is
// compared between the two hosts by TestBrowserAxFindAgreesAcrossHosts, which
// drives each host's production path and never asks one what the other said.
//
// Written in the "k:v" string grammar because that is the one form both hosts
// resolve the same way: the object form {id: "x"} reaches the goja host as a
// plain attribute filter, and a web hierarchy dump carries the id under
// resource-id, so it matches nothing there.
const found = extract((s) => s.ax.find("id:x")?.text).named("found");
const findsTheShadowMatch = always(() => found.current === "shadow");
export const properties = { findsTheShadowMatch };
export const actionsRoot = taps;