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}