Three related changes for the `evaluate(() => window.X = Y)` setup pattern:
1. extract_window_setups now also matches the single-expression form
`evaluate(() => window.X = Y)` (no braces), in addition to the
block form `evaluate(() => { window.X = Y; ... })`.
2. js_expr_to_sx now recognises `function(args) { return X; }` (and
`function(args) { X; }`) in addition to arrow functions, so e.g.
`window.select2 = function(){ return "select2"; }` translates to
`(fn () "select2")`.
3. generate_test_chai / generate_test_pw (HTML+click test generators)
inject `(host-set! (host-global "window") "X" <sx>)` for each window
setup found in the test body, so HS code that reads `window.X` sees
the right value at activation time.
4. Test-helper preamble now defines `window` and `document` as
`(host-global "window")` / `(host-global "document")`, so HS
expressions like `window.tmp` resolve through the host instead of
erroring on an unbound `window` symbol.
Net effect on suites smoke-tested: nominal, because most affected tests
hit a separate `if/then/else` parser bug — the `then` keyword inserter
in process_hs_val turns multi-line if blocks into ones the HS parser
collapses to "always run the body". Fixing that is the next iteration.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>