use rush::parser::{AstNode, Parser}; #[cfg(test)] mod tests { use super::*; #[test] fn test_variable_assignment() { // Test parsing a variable assignment let parser = Parser::new(); let input = "x = \"10\""; let result = parser.parse(input); assert!(result.is_ok()); let program = result.unwrap(); assert_eq!(program.statements.len(), 1); match &program.statements[0] { AstNode::VariableAssignment { name, .. } => { assert_eq!(name, "x"); } _ => panic!("Expected variable assignment"), } } #[test] fn test_command_parsing() { // Test parsing a simple command let parser = Parser::new(); let input = "echo \"Hello World\""; let result = parser.parse(input); assert!(result.is_ok()); let program = result.unwrap(); assert_eq!(program.statements.len(), 1); match &program.statements[0] { AstNode::Command { name, .. } => { assert_eq!(name, "echo"); } _ => panic!("Expected command"), } } #[test] fn test_multiple_statements() { // Test parsing multiple statements let parser = Parser::new(); let input = "name = \"Louis\"\necho \"Hello\" $name"; let result = parser.parse(input); assert!(result.is_ok()); let program = result.unwrap(); assert_eq!(program.statements.len(), 2); } #[test] fn test_skip_comments() { // Test that comments are skipped let parser = Parser::new(); let input = "# This is a comment\necho \"test\""; let result = parser.parse(input); assert!(result.is_ok()); let program = result.unwrap(); assert_eq!(program.statements.len(), 1); } }