code wiki / (root) / nx_chk_bits_up_e2e.nx

nx_chk_bits_up_e2e.nx source

↩ module page · 97 lines · 4790 B

1// nx_chk_bits_up_e2e.nx -- REAL bits-up end-to-end test driving the 2// actual nx_checkers game through the 5 bits-up test driver primitives. 3// 100% NishiLang. Replaces nishi-pages/scripts/_bits_up_check_checkers.mjs. 4 5import "nx_test_harness.nx" 6import "nx_game_harness.nx" 7import "nx_dom_query.nx" 8import "nx_dom_click.nx" 9import "nx_checkers.nx" 10import "nx_checkers_render.nx" 11const K_MAGIC_65536: i64 = 65536 12 13func main() -> i64 { 14 nx_test_init() 15 16 let state: *i64 = nx_chk_render_init() 17 let buf: *u8 = sys_mmap(K_MAGIC_65536) 18 19 // ---- Cycle 1: fresh game (red to move) ---- 20 let cap1: *NxGameCapture = nx_capture_start() 21 nx_chk_render(state) 22 let n1: i64 = nx_capture_end(cap1, buf, K_MAGIC_65536 as i64) 23 24 nx_test_expect_eq("checkers cycle 1: bytes captured > 0" as *u8, 25 n1 > 0, 1 as i64) 26 nx_test_expect_class_count("32 dark squares emitted" as *u8, 27 buf, n1, "dark" as *u8, 32 as i64) 28 nx_test_expect_class_count("32 light squares emitted" as *u8, 29 buf, n1, "light" as *u8, 32 as i64) 30 nx_test_expect_class_count("12 red pieces on initial board" as *u8, 31 buf, n1, "red" as *u8, 12 as i64) 32 nx_test_expect_class_count("12 black pieces on initial board" as *u8, 33 buf, n1, "black" as *u8, 12 as i64) 34 nx_test_expect_contains("initial status shows Red to move" as *u8, 35 buf, n1, "Red" as *u8) 36 nx_test_expect_contains("New game button present" as *u8, 37 buf, n1, "New game" as *u8) 38 39 // ---- Click red piece at sq 40 (selects it) ---- 40 let sel_intent: *NxClickIntent = nx_dom_click_intent(buf, n1, 41 "data-sq" as *u8, 42 "40" as *u8) 43 nx_test_expect_click("click intent for sq 40 (action=1, arg0=40)" as *u8, 44 sel_intent, 1 as i64, 40 as i64) 45 nx_chk_action(state, sel_intent.action, sel_intent.arg0, 46 sel_intent.arg1, sel_intent.arg2, sel_intent.arg3) 47 48 // ---- Cycle 2: piece should be selected ---- 49 let cap2: *NxGameCapture = nx_capture_start() 50 nx_chk_render(state) 51 let n2: i64 = nx_capture_end(cap2, buf, K_MAGIC_65536 as i64) 52 53 nx_test_expect_class_count("one .sel class after selection" as *u8, 54 buf, n2, "sel" as *u8, 1 as i64) 55 nx_test_expect_contains("at least one hint visible" as *u8, 56 buf, n2, "hint" as *u8) 57 58 // ---- Click sq 33 (legal forward move from 40 to 33) ---- 59 let move_intent: *NxClickIntent = nx_dom_click_intent(buf, n2, 60 "data-sq" as *u8, 61 "33" as *u8) 62 nx_test_expect_click("click intent for sq 33 (action=1, arg0=33)" as *u8, 63 move_intent, 1 as i64, 33 as i64) 64 nx_chk_action(state, move_intent.action, move_intent.arg0, 65 move_intent.arg1, move_intent.arg2, move_intent.arg3) 66 67 // ---- Cycle 3: red moved, black AI played, board still 12 + 12 ---- 68 let cap3: *NxGameCapture = nx_capture_start() 69 nx_chk_render(state) 70 let n3: i64 = nx_capture_end(cap3, buf, K_MAGIC_65536 as i64) 71 72 nx_test_expect_class_count("still 12 red after one ply each" as *u8, 73 buf, n3, "red" as *u8, 12 as i64) 74 nx_test_expect_class_count("still 12 black after one ply each" as *u8, 75 buf, n3, "black" as *u8, 12 as i64) 76 nx_test_expect_class_count("no .sel class after move completed" as *u8, 77 buf, n3, "sel" as *u8, 0 as i64) 78 79 // ---- Reset via New game button (data-action=2) ---- 80 let reset_intent: *NxClickIntent = nx_dom_click_intent(buf, n3, 81 "data-action" as *u8, 82 "2" as *u8) 83 nx_test_expect_click("reset button (action=2, arg0=0)" as *u8, 84 reset_intent, 2 as i64, 0 as i64) 85 nx_chk_action(state, reset_intent.action, reset_intent.arg0, 86 reset_intent.arg1, reset_intent.arg2, reset_intent.arg3) 87 88 let cap4: *NxGameCapture = nx_capture_start() 89 nx_chk_render(state) 90 let n4: i64 = nx_capture_end(cap4, buf, K_MAGIC_65536 as i64) 91 nx_test_expect_class_count("after reset: 12 red" as *u8, 92 buf, n4, "red" as *u8, 12 as i64) 93 nx_test_expect_class_count("after reset: 12 black" as *u8, 94 buf, n4, "black" as *u8, 12 as i64) 95 96 return nx_test_summary() 97}