use stoolap::parser::{Lexer, TokenType};
#[test]
fn test_single_quotes_string() {
let input = "'simple string'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(
token.token_type,
TokenType::String,
"Single quotes should create String token"
);
assert_eq!(token.literal, "'simple string'");
}
#[test]
fn test_double_quotes_identifier() {
let input = "\"double quoted\"";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(
token.token_type,
TokenType::Identifier,
"Double quotes should create Identifier token"
);
assert_eq!(token.literal, "double quoted");
}
#[test]
fn test_backticks_identifier() {
let input = "`backtick id`";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(
token.token_type,
TokenType::Identifier,
"Backticks should create Identifier token"
);
assert_eq!(token.literal, "backtick id");
}
#[test]
fn test_date_string() {
let input = "'2023-05-15'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
let content = &token.literal[1..token.literal.len() - 1];
assert_eq!(content, "2023-05-15");
}
#[test]
fn test_time_string() {
let input = "'14:30:00'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
let content = &token.literal[1..token.literal.len() - 1];
assert_eq!(content, "14:30:00");
}
#[test]
fn test_empty_string() {
let input = "''";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
assert_eq!(token.literal, "''");
}
#[test]
fn test_string_with_spaces() {
let input = "'hello world'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
let content = &token.literal[1..token.literal.len() - 1];
assert_eq!(content, "hello world");
}
#[test]
fn test_identifier_with_spaces() {
let input = "\"column name\"";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Identifier);
assert_eq!(token.literal, "column name");
}
#[test]
fn test_mixed_quotes_in_query() {
let input = "SELECT \"column\" FROM mytable WHERE name = 'value'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Keyword);
assert_eq!(token.literal.to_uppercase(), "SELECT");
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Identifier);
assert_eq!(token.literal, "column");
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Keyword);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Identifier);
assert_eq!(token.literal, "mytable");
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Keyword);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Identifier);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Operator);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
let content = &token.literal[1..token.literal.len() - 1];
assert_eq!(content, "value");
}
#[test]
fn test_string_with_numbers() {
let input = "'abc123'";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::String);
let content = &token.literal[1..token.literal.len() - 1];
assert_eq!(content, "abc123");
}
#[test]
fn test_quoted_keyword_identifier() {
let input = "\"select\"";
let mut lexer = Lexer::new(input);
let token = lexer.next_token();
assert_eq!(token.token_type, TokenType::Identifier);
assert_eq!(token.literal, "select");
}