use ass_core::tokenizer::{
scanner::{CharNavigator, TokenScanner},
state::{IssueCollector, TokenContext},
};
#[test]
fn test_char_navigator_edge_cases() {
let mut navigator = CharNavigator::new("", 0, 1, 1);
assert!(navigator.is_at_end());
assert!(navigator.peek_char().is_err());
let mut navigator2 = CharNavigator::new("x", 0, 1, 1);
assert!(!navigator2.is_at_end());
assert_eq!(navigator2.peek_char().unwrap(), 'x');
navigator2.advance_char().unwrap();
assert!(navigator2.is_at_end());
assert!(navigator2.peek_char().is_err());
}
#[test]
fn test_token_scanner_context_handling() {
let source = "test{override}[section]:value;comment";
let mut scanner = TokenScanner::new(source, 0, 1, 1);
let text_result = scanner.scan_text(TokenContext::Document);
assert!(text_result.is_ok());
let mut scanner2 = TokenScanner::new(&source[4..], 0, 1, 5);
let override_result = scanner2.scan_style_override();
assert!(override_result.is_ok());
}
#[test]
fn test_issue_collector_comprehensive() {
let mut collector = IssueCollector::new();
assert!(collector.issues().is_empty());
collector.clear();
assert!(collector.issues().is_empty());
for _i in 0..10 {
collector.clear();
let _issues = collector.issues();
}
}
#[test]
fn test_scanner_state_preservation() {
let source = "test content";
let scanner = TokenScanner::new(source, 0, 1, 1);
assert_eq!(scanner.navigator().position(), 0);
assert_eq!(scanner.navigator().line(), 1);
assert_eq!(scanner.navigator().column(), 1);
assert!(!scanner.navigator().is_at_end());
let scanner2 = TokenScanner::new(source, 5, 2, 3);
assert_eq!(scanner2.navigator().position(), 5);
assert_eq!(scanner2.navigator().line(), 2);
assert_eq!(scanner2.navigator().column(), 3);
}