initial commit
This commit is contained in:
64
tests/parser_tests.rs
Normal file
64
tests/parser_tests.rs
Normal file
@@ -0,0 +1,64 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user