* WIP deep rename (not for push) * WIP2 * WIP3 * WIP4 wxs fix * rustfmt * Rename the remaining identifiers in merged crash-report code Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
27 lines
1.4 KiB
Rust
27 lines
1.4 KiB
Rust
//! The registry remains valid JSON and a closed pipeline reader must not cause a panic.
|
|
|
|
use std::process::{Command, Stdio};
|
|
|
|
#[test]
|
|
fn registry_output_is_complete_json() {
|
|
let output = Command::new(env!("CARGO_BIN_EXE_solidcraft-cli")).arg("commands").output().unwrap();
|
|
assert!(output.status.success(), "{}", String::from_utf8_lossy(&output.stderr));
|
|
let registry: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
|
|
let commands = registry.as_array().unwrap();
|
|
assert!(commands.iter().any(|command| command["id"] == "solid.box"));
|
|
assert!(commands.iter().any(|command| command["id"] == "engine.commands"));
|
|
assert!(output.stdout.ends_with(b"\n"));
|
|
assert!(output.stderr.is_empty());
|
|
}
|
|
|
|
#[test]
|
|
fn closed_registry_pipe_exits_without_panicking() {
|
|
let mut child = Command::new(env!("CARGO_BIN_EXE_solidcraft-cli")).arg("commands").stdout(Stdio::piped()).stderr(Stdio::piped()).spawn().unwrap();
|
|
// Close our read end before waiting. No sleeps or timing threshold are needed:
|
|
// the registry is larger than the pipe buffer, so it cannot all be written first.
|
|
drop(child.stdout.take());
|
|
let output = child.wait_with_output().unwrap();
|
|
assert!(output.status.success(), "status: {}; stderr: {}", output.status, String::from_utf8_lossy(&output.stderr));
|
|
assert!(output.stderr.is_empty(), "{}", String::from_utf8_lossy(&output.stderr));
|
|
}
|