diff --git a/apps/ai-game-creator-shell/src-tauri/src/process_session/tests.rs b/apps/ai-game-creator-shell/src-tauri/src/process_session/tests.rs index f7a0acc12..3a890ead3 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/process_session/tests.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/process_session/tests.rs @@ -1399,10 +1399,21 @@ process.stdin.resume(); ) .expect("poll ready"); } - let eof = write_process_session_stdin_at(root, &identity, &poll.process_id, "", false, true) - .expect("close stdin"); - assert!(eof.eof); - assert!(!eof.stdin_open); + // 自然 EOF 与本用例显式 close 存在竞态:PTY 在负载下可能先收到流 EOF, + // 子进程随即退出并把会话置为终态,此时 close 会以「已进入终态」拒绝。 + // 该终态正是用例要验证的收敛结果,因此只在会话仍未终止时要求 close 成功。 + match write_process_session_stdin_at(root, &identity, &poll.process_id, "", false, true) { + Ok(eof) => { + assert!(eof.eof); + assert!(!eof.stdin_open); + } + Err(error) => { + assert!( + error.contains("已进入终态"), + "closing stdin failed for a non-terminal session: {error}" + ); + } + } let mut tail = String::new(); for _ in 0..20 { poll = poll_process_session_at(