use unilang_parser :: *;
use unilang_parser ::error ::ErrorKind; use unilang_parser ::UnilangParserOptions;
#[ test ]
fn parse_single_str_empty_input()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let result = parser.parse_repl_input( "" );
assert!( result.is_ok(), "Expected Ok for empty input, got Err: {:?}", result.err() );
let instruction = result.unwrap();
assert!( instruction.command_path_slices.is_empty() );
assert!( instruction.positional_arguments.is_empty() );
assert!( instruction.named_arguments.is_empty() );
assert!( !instruction.help_requested );
}
#[ test ]
fn parse_single_str_whitespace_input()
{
let options = UnilangParserOptions ::default();
let parser = Parser ::new( options );
let result = parser.parse_repl_input( " \t\n " );
assert!(
result.is_ok(),
"Expected Ok for whitespace input, got Err: {:?}",
result.err()
);
let instruction = result.unwrap();
assert!( instruction.command_path_slices.is_empty() );
assert!( instruction.positional_arguments.is_empty() );
assert!( instruction.named_arguments.is_empty() );
assert!( !instruction.help_requested );
}
#[ test ]
fn parse_single_str_comment_input()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let input = "# This is a comment";
let result = parser.parse_repl_input( input );
assert!( result.is_err(), "Parse error for comment input: {:?}", result.err() );
if let Err( e ) = result
{
assert_eq!( e.kind, ErrorKind ::Syntax( "Unexpected token '#' in arguments".to_string() ) );
}
}
#[ test ]
fn parse_single_str_simple_command_placeholder()
{
let options = UnilangParserOptions ::default();
let parser = Parser ::new( options );
let result = parser.parse_repl_input( "command" );
assert!( result.is_ok(), "Parse error for 'command' : {:?}", result.err() );
let instruction = result.unwrap();
assert_eq!( instruction.command_path_slices, vec![ "command".to_string() ] );
}
#[ test ]
#[ ignore = "Design decision: Parser strictly validates quote closure - requires design discussion" ]
fn parse_single_str_unterminated_quote_passes_to_analyzer()
{
let parser = Parser ::new( UnilangParserOptions ::default() );
let input = "command \"unterminated";
let result = parser.parse_repl_input( input );
assert!(
result.is_ok(),
"Expected Ok for unterminated quote, got Err: {:?}",
result.err()
);
let instruction = result.unwrap();
assert_eq!( instruction.command_path_slices, vec![ "command".to_string() ] );
assert_eq!( instruction.positional_arguments.len(), 1 );
assert_eq!( instruction.positional_arguments[ 0 ].value, "unterminated".to_string() );
}