# selftest_expect.exp — Expect self-test (BRINTOS-1 E1-E4). Exercises the real # pty/spawn/wait machinery. Emits E- OK/FAIL lines, then ALL-EXPECT-OK iff # all four pass. Requires a working execve/forkpty (BRINTOS-37 on wasm32-hwjs). log_user 0 set pass 0 # E1 — interpreter start-up: Expect's own commands loaded. if {[string length [exp_version]] > 0} { incr pass; puts "E-E1ver OK" } else { puts "E-E1ver FAIL" } puts "E1-ver [exp_version]" # E2 — spawn a child over a real pty and match an echoed marker. set marker "E2MARKER-OK" set e2 FAIL spawn -noecho cat send "$marker\r" expect { -timeout 5 "$marker" { set e2 OK } timeout { set e2 FAIL } } send "\x04" if {$e2 eq "OK"} { incr pass } puts "E-E2spawn $e2" # E3 — regexp match with a capture group. set e3 FAIL spawn -noecho sh -c "echo val=123" expect { -timeout 5 -re {val=([0-9]+)} { if {$expect_out(1,string) eq "123"} { set e3 OK } } timeout {} } if {$e3 eq "OK"} { incr pass } puts "E-E3regexp $e3" # E4 — reap a child's real exit status (/bin/false → 1). set e4 FAIL spawn -noecho false lassign [wait] _pid _sid _err e4rc if {$e4rc == 1} { set e4 OK } if {$e4 eq "OK"} { incr pass } puts "E-E4wait $e4" puts "E-SUMMARY pass=$pass/4" if {$pass == 4} { puts "ALL-EXPECT-OK" }