(* Tests for preloaded package detection and CRC verification. Uses Impl.check_preload_status directly (pure function, no JS deps) with mock lookup functions to simulate different scenarios. *) open Js_top_worker.Impl let make_dcs ?(crcs = []) modules = { dcs_url = "test://"; dcs_toplevel_modules = modules; dcs_file_prefixes = []; dcs_module_crcs = crcs; dcs_cma_units = [] } let print_status = function | Preloaded -> print_string "Preloaded" | Not_loaded -> print_string "Not_loaded" | Partially_loaded { loaded; missing } -> Printf.printf "Partially_loaded(loaded=[%s], missing=[%s])" (String.concat "," loaded) (String.concat "," missing) | Crc_mismatch ms -> Printf.printf "Crc_mismatch([%s])" (String.concat "; " ms) (* Mock helpers *) let available_set = ref [] let binary_crcs = ref [] let server_crcs = ref [] let is_available m = List.mem m !available_set let get_binary_crc m = List.assoc_opt m !binary_crcs let get_universe_crc m = List.assoc_opt m !server_crcs let setup ~available ~binary ~server = available_set := available; binary_crcs := binary; server_crcs := server let check dcs = check_preload_status ~is_available ~get_binary_crc ~get_universe_crc dcs let%expect_test "all modules linked, CRCs match — Preloaded" = setup ~available:["Foo"; "Bar"] ~binary:[("Foo", "abc123"); ("Bar", "def456")] ~server:[("Foo", "abc123"); ("Bar", "def456")]; let dcs = make_dcs ~crcs:[("Foo", "abc123"); ("Bar", "def456")] ["Foo"; "Bar"] in print_status (check dcs); [%expect {| Preloaded |}] let%expect_test "no modules linked — Not_loaded" = setup ~available:[] ~binary:[] ~server:[]; let dcs = make_dcs ~crcs:[("Foo", "abc123")] ["Foo"] in print_status (check dcs); [%expect {| Not_loaded |}] let%expect_test "CRC mismatch" = setup ~available:["Foo"] ~binary:[("Foo", "binary_crc")] ~server:[("Foo", "universe_crc")]; let dcs = make_dcs ~crcs:[("Foo", "universe_crc")] ["Foo"] in print_status (check dcs); [%expect {| Crc_mismatch([Foo (universe=universe_crc binary=binary_crc)]) |}] let%expect_test "partial load" = setup ~available:["Foo"] ~binary:[("Foo", "abc123")] ~server:[]; let dcs = make_dcs ~crcs:[("Foo", "abc123"); ("Bar", "def456")] ["Foo"; "Bar"] in print_status (check dcs); [%expect {| Partially_loaded(loaded=[Foo], missing=[Bar]) |}] let%expect_test "no CRCs in universe — still Preloaded" = setup ~available:["Foo"] ~binary:[("Foo", "abc123")] ~server:[]; let dcs = make_dcs ["Foo"] in print_status (check dcs); [%expect {| Preloaded |}] let%expect_test "empty module list — Not_loaded" = setup ~available:[] ~binary:[] ~server:[]; let dcs = make_dcs [] in print_status (check dcs); [%expect {| Not_loaded |}] let%expect_test "server CRC overrides dcs_module_crcs" = (* get_universe_crc returns server_crcs, ignoring dcs.dcs_module_crcs *) setup ~available:["Foo"] ~binary:[("Foo", "binary_crc")] ~server:[("Foo", "real_server_crc")]; let dcs = make_dcs ~crcs:[("Foo", "stale_json_crc")] ["Foo"] in print_status (check dcs); [%expect {| Crc_mismatch([Foo (universe=real_server_crc binary=binary_crc)]) |}] let%expect_test "binary CRC missing — no mismatch" = setup ~available:["Foo"] ~binary:[] ~server:[("Foo", "server_crc")]; let dcs = make_dcs ~crcs:[("Foo", "server_crc")] ["Foo"] in print_status (check dcs); [%expect {| Preloaded |}] let%expect_test "multiple modules, one mismatch" = setup ~available:["Foo"; "Bar"] ~binary:[("Foo", "abc123"); ("Bar", "wrong")] ~server:[("Foo", "abc123"); ("Bar", "def456")]; let dcs = make_dcs ~crcs:[("Foo", "abc123"); ("Bar", "def456")] ["Foo"; "Bar"] in print_status (check dcs); [%expect {| Crc_mismatch([Bar (universe=def456 binary=wrong)]) |}]