diff --git a/test/browser/browser_test.go b/test/browser/browser_test.go index e603d6c..b2b0b56 100644 --- a/test/browser/browser_test.go +++ b/test/browser/browser_test.go @@ -53,6 +53,18 @@ func TestBrowserCounterInvariantHolds(t *testing.T) { } } +// TestBrowserShadowDOMIsReachable drives a page whose entire UI (canvas, the +// button over it, and the counter) lives inside a shadow root, the shape +// Compose for Web produces. Both the enumeration and the selector lookup have +// to cross the boundary for the counter to move at all, so the property firing +// is the end-to-end evidence. +func TestBrowserShadowDOMIsReachable(t *testing.T) { + violations := runFixture(t, "shadow") + if !slices.Contains(violations, "counterNeverMoves") { + t.Fatalf("nothing inside the shadow root was ever tapped; violations=%v", violations) + } +} + // runFixture serves the named testdata case over an in-process file server, // drives it through headless Chrome with a fixed seed and a bounded step count, // and returns every property name that was ever reported violated. diff --git a/test/browser/testdata/shadow/index.html b/test/browser/testdata/shadow/index.html new file mode 100644 index 0000000..6e21e34 --- /dev/null +++ b/test/browser/testdata/shadow/index.html @@ -0,0 +1,43 @@ + + +
+ +