diff --git a/testing/jsmaker-regression.rkt b/testing/jsmaker-regression.rkt index 4bec1b4..6f0c629 100644 --- a/testing/jsmaker-regression.rkt +++ b/testing/jsmaker-regression.rkt @@ -1,6 +1,7 @@ #lang racket/base (require racket/string + json "../main.rkt" "jsmaker-executors.rkt" "jsmaker-test-framework.rkt") @@ -86,6 +87,37 @@ (unless (not (regexp-match? #rx"__let_star_value" simple-let-star)) (error 'jsmaker-regression "simple let* should not use tempvars, got: ~a" simple-let-star)) +(define webview-set-value-program + (let ([val "2026-05-28"]) + (with-id->el/inject 'inp2 el + (if (or (= (js-dot el type) "checkbox") + (= (js-dot el type) "radio")) + (begin + (set! (js-dot el checked) (inject (if (eq? val #f) #f #t))) + #t) + (begin + (set! (js-dot el value) (inject val)) + #t))))) + +(unless (not (regexp-match? #rx"return true;" webview-set-value-program)) + (error 'jsmaker-regression + "top-level WebView-style js must not emit branch-level return true statements, got: ~a" + webview-set-value-program)) + +(define webview-top-level-vm-smoke + (format #< { + if (typeof require !== 'function') return true; + const vm = require('vm'); + const el = { type: 'text', value: '', checked: false }; + const context = { document: { getElementById: (id) => el } }; + vm.runInNewContext(~a, context); + return JSON.stringify([el.value, el.checked]) === ~a; +})() +JS + (jsexpr->string webview-set-value-program) + (jsexpr->string "[\"2026-05-28\",false]"))) + (define tests (list (js-expression-test 'if-zero (js/expression (if 0 1 2)) "1") @@ -112,6 +144,9 @@ (js/expression (array (eval (list 1 2 3)) (eval (string-append "a" "b")))) "[[1,2,3],\"ab\"]") + (js-expression-test 'webview-top-level-script-vm + webview-top-level-vm-smoke + "true") (let ([x 10] [y 20]) (js-expression-test 'runtime-eval-lexical-let