use claude_runner_core::ClaudeCommand;
fn args_of( cmd: &ClaudeCommand ) -> Vec<String> {
let c = cmd.build_command_for_test();
c.get_args().map( |a| a.to_string_lossy().to_string() ).collect()
}
#[test]
fn with_add_dir_adds_flag_and_path() {
let cmd = ClaudeCommand::new().with_add_dir( "/some/path" );
let args = args_of( &cmd );
assert!( args.contains( &"--add-dir".to_string() ) );
assert!( args.contains( &"/some/path".to_string() ) );
}
#[test]
fn with_add_dir_called_twice_produces_two_pairs() {
let cmd = ClaudeCommand::new()
.with_add_dir( "/path/a" )
.with_add_dir( "/path/b" );
let args = args_of( &cmd );
let flag_count = args.iter().filter( |a| *a == "--add-dir" ).count();
assert_eq!( flag_count, 2, "--add-dir must appear twice for two paths: {args:?}" );
assert!( args.contains( &"/path/a".to_string() ) );
assert!( args.contains( &"/path/b".to_string() ) );
}
#[test]
fn with_allowed_tools_single_value_adds_flag() {
let cmd = ClaudeCommand::new().with_allowed_tools( [ "bash" ] );
let args = args_of( &cmd );
assert!( args.contains( &"--allowedTools".to_string() ) );
assert!( args.contains( &"bash".to_string() ) );
}
#[test]
fn with_allowed_tools_multiple_values_uses_single_flag() {
let cmd = ClaudeCommand::new().with_allowed_tools( [ "bash", "read", "write" ] );
let args = args_of( &cmd );
let flag_count = args.iter().filter( |a| *a == "--allowedTools" ).count();
assert_eq!( flag_count, 1, "--allowedTools must appear exactly once: {args:?}" );
assert!( args.contains( &"bash".to_string() ) );
assert!( args.contains( &"read".to_string() ) );
assert!( args.contains( &"write".to_string() ) );
}
#[test]
fn with_disallowed_tools_adds_flag() {
let cmd = ClaudeCommand::new().with_disallowed_tools( [ "bash" ] );
let args = args_of( &cmd );
assert!( args.contains( &"--disallowedTools".to_string() ) );
assert!( args.contains( &"bash".to_string() ) );
}
#[test]
fn with_disallowed_tools_multiple_values_uses_single_flag() {
let cmd = ClaudeCommand::new().with_disallowed_tools( [ "bash", "write" ] );
let args = args_of( &cmd );
let flag_count = args.iter().filter( |a| *a == "--disallowedTools" ).count();
assert_eq!( flag_count, 1, "--disallowedTools must appear exactly once: {args:?}" );
}
#[test]
fn with_tools_adds_flag() {
let cmd = ClaudeCommand::new().with_tools( [ "bash" ] );
let args = args_of( &cmd );
assert!( args.contains( &"--tools".to_string() ) );
assert!( args.contains( &"bash".to_string() ) );
}
#[test]
fn with_tools_multiple_values_uses_single_flag() {
let cmd = ClaudeCommand::new().with_tools( [ "bash", "read" ] );
let args = args_of( &cmd );
let flag_count = args.iter().filter( |a| *a == "--tools" ).count();
assert_eq!( flag_count, 1, "--tools must appear exactly once: {args:?}" );
}