use ass_core::tokenizer::{AssTokenizer, TokenType};
#[cfg(not(feature = "std"))]
use alloc::string::ToString;
#[test]
fn test_tokenizer_position_advancement_validation() {
let mut tokenizer = AssTokenizer::new("x");
let token = tokenizer.next_token().unwrap().unwrap();
assert_eq!(token.token_type, TokenType::Text);
assert!(tokenizer.position() > 0);
}
#[test]
fn test_tokenizer_scanner_error_propagation() {
let mut tokenizer = AssTokenizer::new("\x00invalid\x01");
let result = tokenizer.next_token();
if let Ok(Some(token)) = result {
assert!(matches!(token.token_type, TokenType::Text));
} else {
}
}
#[test]
fn test_tokenizer_bom_edge_cases() {
let tokenizer1 = AssTokenizer::new("\u{FFFE}not-bom");
assert_eq!(tokenizer1.position(), 0);
let tokenizer2 = AssTokenizer::new("\u{FEFF}content");
assert_eq!(tokenizer2.position(), 3); }
#[test]
fn test_tokenizer_issue_collection_comprehensive() {
let mut tokenizer = AssTokenizer::new("test content with potential issues");
assert!(tokenizer.issues().is_empty());
let _tokens = tokenizer.tokenize_all().unwrap();
let _issues = tokenizer.issues();
tokenizer.reset();
assert!(tokenizer.issues().is_empty());
assert_eq!(tokenizer.position(), 0);
assert_eq!(tokenizer.line(), 1);
assert_eq!(tokenizer.column(), 1);
}
#[test]
fn test_tokenizer_reset_comprehensive() {
let mut tokenizer = AssTokenizer::new("\u{FEFF}[Section]\nField: Value");
let _token1 = tokenizer.next_token().unwrap();
let _token2 = tokenizer.next_token().unwrap();
let mid_position = tokenizer.position();
let mid_line = tokenizer.line();
let mid_column = tokenizer.column();
assert!(mid_position > 3); assert!(mid_line >= 1);
assert!(mid_column >= 1);
tokenizer.reset();
assert_eq!(tokenizer.position(), 3); assert_eq!(tokenizer.line(), 1);
assert_eq!(tokenizer.column(), 1);
assert!(tokenizer.issues().is_empty());
}
#[test]
fn test_tokenizer_position_stagnation_prevention() {
let mut tokenizer = AssTokenizer::new("\x00");
let result = tokenizer.next_token();
match result {
Ok(Some(_)) => {
assert!(tokenizer.position() > 0);
}
Ok(None) => {
}
Err(e) => {
assert!(e.to_string().contains("position not advancing") || !e.to_string().is_empty());
}
}
}