#![ allow( clippy::doc_markdown ) ]
#![ cfg( unix ) ]
mod cli_binary_test_helpers;
use cli_binary_test_helpers::{ fake_claude_dir, run_with_path };
#[ test ]
fn ec_01_timeout_exits_4()
{
let ( _dir, path_val ) = fake_claude_dir( "sleep 10" );
let out = run_with_path(
&[ "-p", "--timeout", "1", "--max-sessions", "0", "--retry-override", "0", "x" ],
&path_val,
);
assert_eq!(
out.status.code(),
Some( 4 ),
"CLR timeout watchdog must exit 4 (not 2). Got: {:?}. stderr: {}",
out.status.code(),
String::from_utf8_lossy( &out.stderr )
);
let stderr = String::from_utf8_lossy( &out.stderr );
assert!(
stderr.contains( "timeout after 1s" ),
"stderr must contain 'timeout after 1s'. Got:\n{stderr}"
);
}
#[ test ]
fn ec_02_expect_mismatch_exits_3()
{
let ( _dir, path_val ) = fake_claude_dir( "printf 'foo'" );
let out = run_with_path(
&[ "-p", "--expect", "bar", "--max-sessions", "0", "x" ],
&path_val,
);
assert_eq!(
out.status.code(),
Some( 3 ),
"expect-validation mismatch must exit 3. Got: {:?}. stderr: {}",
out.status.code(),
String::from_utf8_lossy( &out.stderr )
);
}
#[ test ]
fn ec_03_gate_bypass_exits_0()
{
let ( _dir, path_val ) = fake_claude_dir( "exit 0" );
let out = run_with_path(
&[ "-p", "--max-sessions", "0", "x" ],
&path_val,
);
assert!(
out.status.success(),
"gate bypass with subprocess exit 0 must relay exit 0. Got: {:?}. stderr: {}",
out.status.code(),
String::from_utf8_lossy( &out.stderr )
);
}