use super::*;
#[test]
fn tokenizer_context_based_token_creation() {
let source = "{\\b1}Bold text{\\b0}";
let mut tokenizer = AssTokenizer::new(source);
let mut token_count = 0;
while let Ok(Some(token)) = tokenizer.next_token() {
assert!(token.line >= 1);
assert!(token.column >= 1);
assert!(!token.span.is_empty());
token_count += 1;
if token_count > 15 {
break;
}
}
assert!(token_count > 0);
}
#[test]
fn tokenizer_section_header_start_tracking() {
let source = "[Script Info]";
let mut tokenizer = AssTokenizer::new(source);
let token = tokenizer.next_token().unwrap().unwrap();
assert_eq!(token.line, 1);
assert_eq!(token.column, 1);
}
#[test]
fn tokenizer_section_close_bracket() {
let source = "[Test]";
let mut tokenizer = AssTokenizer::new(source);
let _header = tokenizer.next_token().unwrap().unwrap();
let close = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
close.token_type,
crate::tokenizer::tokens::TokenType::SectionClose
);
}
#[test]
fn tokenizer_colon_field_separator() {
let source = "Key:Value";
let mut tokenizer = AssTokenizer::new(source);
let _key = tokenizer.next_token().unwrap().unwrap();
let colon = tokenizer.next_token().unwrap().unwrap();
assert_eq!(colon.token_type, crate::tokenizer::tokens::TokenType::Colon);
}
#[test]
fn tokenizer_comma_separator() {
let source = "val1,val2";
let mut tokenizer = AssTokenizer::new(source);
let _val1 = tokenizer.next_token().unwrap().unwrap();
let comma = tokenizer.next_token().unwrap().unwrap();
assert_eq!(comma.token_type, crate::tokenizer::tokens::TokenType::Comma);
}
#[test]
fn tokenizer_newline_handling() {
let source = "line1\nline2\r\nline3";
let mut tokenizer = AssTokenizer::new(source);
let _line1 = tokenizer.next_token().unwrap().unwrap();
let newline1 = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
newline1.token_type,
crate::tokenizer::tokens::TokenType::Newline
);
}
#[test]
fn tokenizer_style_override_tokens() {
let source = "{\\b1}text{\\b0}";
let mut tokenizer = AssTokenizer::new(source);
let override_block = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
override_block.token_type,
crate::tokenizer::tokens::TokenType::OverrideBlock
);
}
#[test]
fn tokenizer_comment_exclamation() {
let source = "!: This is a comment";
let mut tokenizer = AssTokenizer::new(source);
let comment = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
comment.token_type,
crate::tokenizer::tokens::TokenType::Comment
);
}
#[test]
fn tokenizer_comment_semicolon() {
let source = "; This is a comment";
let mut tokenizer = AssTokenizer::new(source);
let comment = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
comment.token_type,
crate::tokenizer::tokens::TokenType::Comment
);
}
#[test]
fn tokenizer_whitespace_token() {
let source = "Key: \t ";
let mut tokenizer = AssTokenizer::new(source);
let _key = tokenizer.next_token().unwrap().unwrap();
let _colon = tokenizer.next_token().unwrap().unwrap();
let whitespace = tokenizer.next_token().unwrap().unwrap();
assert_eq!(
whitespace.token_type,
crate::tokenizer::tokens::TokenType::Whitespace
);
}