use crate::lexer::{Error, StrTokenizer, Token, TokenType, Tokenizer};
use std::borrow::Cow;
#[test]
fn escape_newline_eof() {
let _ = env_logger::try_init();
let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("\\\n");
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::EOF,
start_byte: 2,
end_byte: 2,
text: Cow::Borrowed(""),
}
);
}
#[test]
fn escape_identifier() {
let _ = env_logger::try_init();
let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("Foo\\\nBar");
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::Identifier,
start_byte: 0,
end_byte: 7,
text: Cow::Borrowed("FooBar"),
}
);
}
#[test]
fn string_literal_with_escaped_newline() {
let _ = env_logger::try_init();
let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("\"foo\\\nbar\"");
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::StringLiteral,
start_byte: 0,
end_byte: 9,
text: Cow::Borrowed("\"foobar\""),
}
);
}
#[test]
fn ident_to_num_with_escaped_newline() {
let _ = env_logger::try_init();
let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("Foobar\\\n.0foo");
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::Identifier,
start_byte: 0,
end_byte: 5,
text: Cow::Borrowed("Foobar"),
}
);
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::PPNumber,
start_byte: 8,
end_byte: 12,
text: Cow::Borrowed(".0foo"),
}
);
}
#[test]
fn comment_with_escaped_line() {
let _ = env_logger::try_init();
let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("//foo\\\nbar");
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::Comment,
start_byte: 0,
end_byte: 9,
text: Cow::Borrowed("//foobar"),
}
);
assert_eq!(
tokenizer.get_next_token().unwrap(),
Token {
token_type: TokenType::EOF,
start_byte: 10,
end_byte: 10,
text: Cow::Borrowed(""),
}
);
}