diff --git a/crates/oxide_cli/src/main.rs b/crates/oxide_cli/src/main.rs index c4e19504..d13dbe07 100644 --- a/crates/oxide_cli/src/main.rs +++ b/crates/oxide_cli/src/main.rs @@ -470,5 +470,6 @@ fn not_implemented(command: &str) -> ExitCode { use ansi_term::Colour::Yellow; kernel_info!("command not yet implemented: {}", command); eprintln!("{}", Yellow.paint(format!("'{command}' is not yet implemented"))); - ExitCode::SUCCESS + // 2 = 未实现,与 0=成功、1=运行失败区分,供脚本与 CI 识别。 + ExitCode::from(2) } diff --git a/crates/oxide_cli/tests/cli_smoke.rs b/crates/oxide_cli/tests/cli_smoke.rs index 537612b7..b8530262 100644 --- a/crates/oxide_cli/tests/cli_smoke.rs +++ b/crates/oxide_cli/tests/cli_smoke.rs @@ -63,6 +63,22 @@ fn eval_array_output() { assert!(stdout.trim() == "[1, 2, 3]", "eval 数组应打印元素区内容: {stdout}"); } +#[test] +fn test_stub_exit_code() { + let output = Command::new(env!("CARGO_BIN_EXE_oxide")) + .args(["test"]) + .output() + .expect("failed to run oxide test"); + + // 未实现子命令固定退出码 2,区别于 0=成功 / 1=运行失败。 + assert_eq!(output.status.code(), Some(2), "test stub should exit 2"); + let stderr = String::from_utf8_lossy(&output.stderr); + assert!( + stderr.contains("not yet implemented"), + "test stub should print not-implemented notice: {stderr}" + ); +} + #[test] fn bench_help() { let output = Command::new(env!("CARGO_BIN_EXE_oxide"))