use ass_core::tokenizer::{AssTokenizer, TokenType};
#[test]
fn test_section_header_transitions() {
let input = "[Script Info]\nTitle: Test";
let mut tokenizer = AssTokenizer::new(input);
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::SectionHeader));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::SectionClose));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Newline));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Text));
}
#[test]
fn test_field_value_context_transitions() {
let input = "Title: Test Value";
let mut tokenizer = AssTokenizer::new(input);
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Text));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Colon));
let token = tokenizer.next_token().unwrap().unwrap();
if matches!(token.token_type, TokenType::Whitespace) {
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Text));
} else {
assert!(matches!(token.token_type, TokenType::Text));
}
}
#[test]
fn test_style_override_context_transitions() {
let input = "{\\b1}text{\\b0}";
let mut tokenizer = AssTokenizer::new(input);
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::OverrideBlock));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::OverrideClose));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Text));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::OverrideBlock));
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::OverrideClose));
}
#[test]
fn test_newline_context_reset() {
let input = "Title: Test\nNext Line";
let mut tokenizer = AssTokenizer::new(input);
while let Some(token) = tokenizer.next_token().unwrap() {
if matches!(token.token_type, TokenType::Colon) {
break;
}
}
while let Some(token) = tokenizer.next_token().unwrap() {
if matches!(token.token_type, TokenType::Newline) {
break;
}
}
let token = tokenizer.next_token().unwrap().unwrap();
assert!(matches!(token.token_type, TokenType::Text));
}
#[test]
fn test_nested_context_transitions() {
let input = "[V4+ Styles]: {\\b1}test{\\b0}, value";
let mut tokenizer = AssTokenizer::new(input);
let mut contexts_seen = 0;
while let Some(_token) = tokenizer.next_token().unwrap() {
contexts_seen += 1;
}
assert!(contexts_seen > 8); }