use unilang_parser:: { Parser, UnilangParserOptions };
#[ test ]
fn flag_syntax_rejection_verbose()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_single_instruction( "command.run --verbose" );
assert!( result.is_err(), "Parser should reject --verbose flag syntax" );
let error = result.unwrap_err();
let error_msg = format!( "{error:?}" );
assert!(
error_msg.contains( "--verbose" ) || error_msg.contains( "Unexpected token" ),
"Error message should mention the problematic token: {error_msg}"
);
}
#[ test ]
fn flag_syntax_rejection_dry_run()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_single_instruction( "deploy.staging --dry-run" );
assert!( result.is_err(), "Parser should reject --dry-run flag syntax" );
let error = result.unwrap_err();
let error_msg = format!( "{error:?}" );
assert!(
error_msg.contains( "--dry-run" ) || error_msg.contains( "Unexpected token" ),
"Error message should mention the problematic token: {error_msg}"
);
}
#[ test ]
fn flag_syntax_rejection_binary()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_single_instruction( "file.read path :: \"/etc/hosts\" --binary" );
assert!( result.is_err(), "Parser should reject --binary flag syntax" );
let error = result.unwrap_err();
let error_msg = format!( "{error:?}" );
assert!(
error_msg.contains( "--binary" ) || error_msg.contains( "Unexpected token" ),
"Error message should mention the problematic token: {error_msg}"
);
}
#[ test ]
fn correct_boolean_syntax_works()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_single_instruction( "command.run verbose :: true dry_run :: true" );
assert!( result.is_ok(), "Parser should accept key::value syntax for boolean flags" );
let instruction = result.unwrap();
assert!( instruction.named_arguments.contains_key( "verbose" ) );
assert!( instruction.named_arguments.contains_key( "dry_run" ) );
assert_eq!( instruction.named_arguments.get( "verbose" ).unwrap()[0].value, "true" );
assert_eq!( instruction.named_arguments.get( "dry_run" ).unwrap()[0].value, "true" );
}
#[ test ]
fn mixed_correct_and_incorrect_syntax()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_single_instruction( "server.deploy config :: \"/etc/app.conf\" --verbose" );
assert!( result.is_err(), "Parser should reject command even with one invalid flag" );
let error = result.unwrap_err();
let error_msg = format!( "{error:?}" );
assert!(
error_msg.contains( "--verbose" ) || error_msg.contains( "Unexpected token" ),
"Error should clearly identify the problematic flag: {error_msg}"
);
}