65 lines
1.8 KiB
Rust
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);
|
|
}
|
|
}
|