use super::{Cli, Command};
use clap::Parser;
#[test]
fn serve_bare_is_http_default() {
let cli = Cli::try_parse_from(["trusty-memory", "serve"]).expect("parse ok");
let Command::Serve {
http,
stdio,
foreground,
..
} = cli.command
else {
panic!("expected Serve");
};
assert!(http.is_none(), "bare serve: http must be None");
assert!(!stdio, "bare serve: stdio must be false");
assert!(!foreground, "bare serve: foreground must be false");
}
#[test]
fn serve_http_bare_parses_as_some_none() {
let cli = Cli::try_parse_from(["trusty-memory", "serve", "--http"]).expect("--http bare ok");
let Command::Serve { http, stdio, .. } = cli.command else {
panic!("expected Serve");
};
assert_eq!(http, Some(None), "--http (bare) must parse as Some(None)");
assert!(!stdio, "--http bare: stdio must be false");
assert!(
http.flatten().is_none(),
"--http bare flattened must be None (dynamic port)"
);
}
#[test]
fn serve_http_with_addr_parses_as_some_some() {
let cli = Cli::try_parse_from(["trusty-memory", "serve", "--http", "127.0.0.1:7070"])
.expect("--http ADDR ok");
let Command::Serve { http, .. } = cli.command else {
panic!("expected Serve");
};
let addr: std::net::SocketAddr = "127.0.0.1:7070".parse().unwrap();
assert_eq!(
http,
Some(Some(addr)),
"--http ADDR must parse as Some(Some(addr))"
);
assert_eq!(
http.flatten(),
Some(addr),
"--http ADDR flattened must return the address"
);
}
#[test]
fn serve_http_and_stdio_together_is_error() {
let result = Cli::try_parse_from(["trusty-memory", "serve", "--http", "--stdio"]);
assert!(
result.is_err(),
"--http and --stdio together must be rejected by clap"
);
}