diff --git a/hosts/ocaml/bin/run_tests.ml b/hosts/ocaml/bin/run_tests.ml index 3b3ec8f4..0d91b8aa 100644 --- a/hosts/ocaml/bin/run_tests.ml +++ b/hosts/ocaml/bin/run_tests.ml @@ -430,6 +430,31 @@ let make_test_env () = | [state] -> Sx_ref.cek_run state | _ -> Nil); bind "now-ms" (fun _args -> Number 1000.0); + bind "random-int" (fun args -> match args with [Number lo; _] -> Number lo | _ -> Number 0.0); + bind "try-rerender-page" (fun _args -> Nil); + bind "collect!" (fun args -> + match args with + | [String name; value] -> + let stack = try Hashtbl.find _scope_stacks name with Not_found -> [] in + (match stack with + | List items :: rest -> + if List.mem value items then Nil + else (Hashtbl.replace _scope_stacks name (List (items @ [value]) :: rest); Nil) + | _ -> + Hashtbl.replace _scope_stacks name (List [value] :: stack); Nil) + | _ -> Nil); + bind "collected" (fun args -> + match args with + | [String name] -> + let stack = try Hashtbl.find _scope_stacks name with Not_found -> [] in + (match stack with List items :: _ -> List items | _ -> List []) + | _ -> List []); + bind "clear-collected!" (fun args -> + match args with + | [String name] -> + let stack = try Hashtbl.find _scope_stacks name with Not_found -> [] in + (match stack with _ :: rest -> Hashtbl.replace _scope_stacks name (List [] :: rest) | [] -> ()); Nil + | _ -> Nil); bind "regex-find-all" (fun args -> (* Stub: supports simple ~name pattern for component scanning *) match args with @@ -492,6 +517,13 @@ let make_test_env () = (* Declarative type/effect forms — no-ops at runtime *) bind "deftype" (fun _args -> Nil); bind "defeffect" (fun _args -> Nil); + bind "register-special-form!" (fun args -> + match args with + | [String name; fn_val] -> + (* Don't let SX modules override OCaml-registered defhandler/defisland *) + if name = "defhandler" || name = "defisland" then Nil + else (ignore (Sx_ref.register_special_form (String name) fn_val); Nil) + | _ -> Nil); (* defhandler — register handler as handler:name in eval env. Mirrors sx_server.ml's defhandler special form. *)