Files
rush/tests/parser_tests.rs
2025-11-01 22:45:55 +01:00

65 lines
1.8 KiB
Rust

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);
}
}