use wander::lexer::{tokenize_and_filter, Token};
#[test]
fn tokenize_boolean_true() {
let input = "true";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Boolean(true)]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_boolean_false() {
let input = "false";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Boolean(false)]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_booleans() {
let input = "true false false";
let res = tokenize_and_filter(input);
let expected = Ok(vec![
Token::Boolean(true),
Token::Boolean(false),
Token::Boolean(false),
]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_integer() {
let input = "123450";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Int(123450)]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_integers() {
let input = "0 -100 4200";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Int(0), Token::Int(-100), Token::Int(4200)]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_strings() {
let input = "\"Hello, world\"";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::String(String::from("Hello, world"))]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_strings_with_quotes() {
let input = "\"\\\"Hello, world\\\"\"";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::String(String::from("\\\"Hello, world\\\""))]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_name() {
let input = "hello123";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Name(String::from("hello123"))]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_names_keywords_and_symbols() {
let input = "val x = 5";
let res = tokenize_and_filter(input);
let expected = Ok(vec![
Token::Val,
Token::Name(String::from("x")),
Token::EqualSign,
Token::Int(5),
]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_function_call() {
let input = "not(false)";
let res = tokenize_and_filter(input);
let expected = Ok(vec![
Token::Name(String::from("not")),
Token::OpenParen,
Token::Boolean(false),
Token::CloseParen,
]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_function_call_with_pipe() {
let input = "false | not()";
let res = tokenize_and_filter(input);
let expected = Ok(vec![
Token::Boolean(false),
Token::Pipe,
Token::Name(String::from("not")),
Token::OpenParen,
Token::CloseParen,
]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_comment() {
let input = "--hello";
let res = tokenize_and_filter(input);
let expected = Ok(vec![]);
assert_eq!(res, expected);
}
#[test]
fn tokenize_complex_comment() {
let input = "-- <<<>>> () {} }{ )( ><";
let res = tokenize_and_filter(input);
let expected = Ok(vec![]);
assert_eq!(res, expected);
}
#[test]
fn multiline_comment() {
let input = "-- <<<>>> () {} }{ )( ><\n5--five\n--comment";
let res = tokenize_and_filter(input);
let expected = Ok(vec![Token::Int(5)]);
assert_eq!(res, expected);
}