use crate::tokenizer::{AssTokenizer, TokenType};
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
#[test]
fn context_reset_to_document() {
let mut tokenizer = AssTokenizer::new("{\\an8}text\nNew line");
let mut all_tokens = Vec::new();
while let Some(token) = tokenizer.next_token().unwrap() {
all_tokens.push(token);
}
assert!(all_tokens.len() >= 4);
assert_eq!(all_tokens[0].token_type, TokenType::OverrideBlock);
assert_eq!(all_tokens[1].token_type, TokenType::OverrideClose);
assert_eq!(all_tokens[2].token_type, TokenType::Text);
assert_eq!(all_tokens[2].span, "text");
let fourth_token = &all_tokens[3];
assert!(
fourth_token.token_type == TokenType::Newline
|| (fourth_token.token_type == TokenType::Text && fourth_token.span.contains('\n'))
);
}
#[test]
fn delimiter_in_wrong_context_as_text() {
let mut tokenizer = AssTokenizer::new("}]");
let first = tokenizer.next_token().unwrap().unwrap();
assert_eq!(first.token_type, TokenType::Text);
assert_eq!(first.span, "}");
let second = tokenizer.next_token().unwrap().unwrap();
assert_eq!(second.token_type, TokenType::Text);
assert_eq!(second.span, "]");
}
#[test]
fn exclamation_without_colon() {
let mut tokenizer = AssTokenizer::new("!notcomment");
let token = tokenizer.next_token().unwrap().unwrap();
assert_eq!(token.token_type, TokenType::Text);
}
#[test]
fn carriage_return_line_feed_handling() {
let mut tokenizer = AssTokenizer::new("line1\r\nline2");
let _text1 = tokenizer.next_token().unwrap();
let newline = tokenizer.next_token().unwrap().unwrap();
assert_eq!(newline.token_type, TokenType::Newline);
let _text2 = tokenizer.next_token().unwrap();
assert!(tokenizer.position() > 7); }
#[test]
fn issues_collector_functionality() {
let mut tokenizer = AssTokenizer::new("test content");
let _tokens = tokenizer.tokenize_all().unwrap();
let issues = tokenizer.issues();
assert!(issues.is_empty() || !issues.is_empty());
}
#[test]
fn tokenizer_allows_whitespace_skipping() {
let mut tokenizer = AssTokenizer::new(" [Section] ");
let token = tokenizer.next_token().unwrap().unwrap();
assert_eq!(token.token_type, TokenType::SectionHeader);
}
#[test]
fn context_allows_whitespace_skipping() {
let mut tokenizer = AssTokenizer::new(" text ");
let token = tokenizer.next_token().unwrap().unwrap();
assert_eq!(token.token_type, TokenType::Text);
}
#[test]
fn tokenize_all_large_input() {
let content = "[Script Info]\nTitle: Test\n".repeat(3);
let mut tokenizer = AssTokenizer::new(&content);
let result = tokenizer.tokenize_all();
assert!(result.is_ok());
}