mirror of
https://git.fddl.dev/fddl/fddl.git
synced 2025-03-14 12:05:01 +00:00
101 lines
2.7 KiB
Rust
101 lines
2.7 KiB
Rust
use fiddle::lexer::Lexer;
|
|
use fiddle::lexer::token::Token;
|
|
|
|
#[test]
|
|
fn test_single_tokens() {
|
|
let source = String::from("()+-*/;");
|
|
let mut lexer = Lexer::new(source);
|
|
let tokens = lexer.scan_tokens();
|
|
|
|
assert_eq!(
|
|
tokens,
|
|
vec![
|
|
Token::LeftParen,
|
|
Token::RightParen,
|
|
Token::Plus,
|
|
Token::Minus,
|
|
Token::Star,
|
|
Token::Slash,
|
|
Token::Semicolon,
|
|
Token::EOF
|
|
]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_identifier_and_keywords() {
|
|
let source = String::from("let $varName := 123; ");
|
|
let mut lexer = Lexer::new(source);
|
|
let tokens = lexer.scan_tokens();
|
|
|
|
assert_eq!(
|
|
tokens,
|
|
vec![
|
|
Token::Let,
|
|
Token::Dollar,
|
|
Token::Identifier("varName".to_string()),
|
|
Token::ColonEqual,
|
|
Token::Number(123.0),
|
|
Token::Semicolon,
|
|
Token::EOF
|
|
]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_doc_comments() {
|
|
let source = String::from("##! Module documentation
|
|
module test {
|
|
### Function documentation
|
|
func example() {
|
|
# Regular comment
|
|
return 42;
|
|
}
|
|
}
|
|
");
|
|
let mut lexer = Lexer::new(source);
|
|
let tokens = lexer.scan_tokens();
|
|
|
|
println!("Tokens: {:?}", tokens);
|
|
|
|
assert_eq!(tokens[0], Token::DocComment("Module documentation".to_string()));
|
|
assert_eq!(tokens[1], Token::Module);
|
|
assert_eq!(tokens[2], Token::Identifier("test".to_string()));
|
|
assert_eq!(tokens[3], Token::LeftBrace);
|
|
assert_eq!(tokens[4], Token::DocComment("Function documentation".to_string()));
|
|
assert_eq!(tokens[5], Token::Func);
|
|
assert_eq!(tokens[6], Token::Identifier("example".to_string()));
|
|
assert_eq!(tokens[7], Token::LeftParen);
|
|
assert_eq!(tokens[8], Token::RightParen);
|
|
assert_eq!(tokens[9], Token::LeftBrace);
|
|
assert_eq!(tokens[10], Token::Return);
|
|
assert_eq!(tokens[11], Token::Number(42.0));
|
|
assert_eq!(tokens[12], Token::Semicolon);
|
|
assert_eq!(tokens[13], Token::RightBrace); // Closes function body
|
|
assert_eq!(tokens[14], Token::RightBrace); // Closes module
|
|
assert_eq!(tokens[15], Token::EOF);
|
|
}
|
|
|
|
#[test]
|
|
fn test_tilde_operator() {
|
|
let source = String::from("if (a ~= b) { ~c }");
|
|
let mut lexer = Lexer::new(source);
|
|
let tokens = lexer.scan_tokens();
|
|
|
|
assert_eq!(
|
|
tokens,
|
|
vec![
|
|
Token::If,
|
|
Token::LeftParen,
|
|
Token::Identifier("a".to_string()),
|
|
Token::TildeEqual,
|
|
Token::Identifier("b".to_string()),
|
|
Token::RightParen,
|
|
Token::LeftBrace,
|
|
Token::Tilde,
|
|
Token::Identifier("c".to_string()),
|
|
Token::RightBrace,
|
|
Token::EOF
|
|
]
|
|
);
|
|
}
|