ass-core 0.1.2

High-performance ASS subtitle format parser and analyzer
Documentation
//! Token-kind fallback and span-path coverage tests for [`AssTokenizer`].

use super::*;

#[test]
fn tokenizer_text_fallback() {
    // Target lines 156: default text case
    let source = "regular_text_123";
    let mut tokenizer = AssTokenizer::new(source);

    let text = tokenizer.next_token().unwrap().unwrap();
    assert_eq!(text.token_type, crate::tokenizer::tokens::TokenType::Text);
}

#[test]
fn tokenizer_infinite_loop_error_path() {
    // Target lines 166-167: infinite loop error
    let source = "test";
    let mut tokenizer = AssTokenizer::new(source);

    // Manually create a scenario where position doesn't advance
    // This is hard to trigger naturally, so we test the normal path
    let result = tokenizer.next_token();
    assert!(result.is_ok());
}

#[test]
fn tokenizer_span_creation_path() {
    // Target lines 170-172: span creation
    let source = "test";
    let mut tokenizer = AssTokenizer::new(source);

    let token = tokenizer.next_token().unwrap().unwrap();
    assert_eq!(token.span, "test");
    assert_eq!(token.line, 1);
    assert_eq!(token.column, 1);
}

#[test]
fn tokenizer_end_of_input_handling() {
    // Target lines 176-180: end of input
    let source = "";
    let mut tokenizer = AssTokenizer::new(source);

    let result = tokenizer.next_token().unwrap();
    assert!(result.is_none());
}

#[test]
fn tokenizer_all_error_propagation() {
    // Target lines 193-195: tokenize_all error handling
    let source = "valid_content";
    let mut tokenizer = AssTokenizer::new(source);

    let tokens = tokenizer.tokenize_all().unwrap();
    assert!(!tokens.is_empty());
}

#[test]
fn tokenizer_carriage_return_handling() {
    // Target scanner lines for '\r' handling
    let source = "line1\rline2";
    let mut tokenizer = AssTokenizer::new(source);

    let _line1 = tokenizer.next_token().unwrap().unwrap();
    let newline = tokenizer.next_token().unwrap().unwrap();
    assert_eq!(
        newline.token_type,
        crate::tokenizer::tokens::TokenType::Newline
    );

    let _line2 = tokenizer.next_token().unwrap().unwrap();
    assert_eq!(tokenizer.line(), 2);
}