use super::*;
use crate::analysis::events::dialogue_info::DialogueInfo;
use crate::parser::{ast::Span, Event};
#[cfg(not(feature = "std"))]
use alloc::boxed::Box;
#[cfg(not(feature = "std"))]
use alloc::vec;
#[cfg(not(feature = "std"))]
fn create_test_dialogue_info(start: &'static str, end: &'static str) -> DialogueInfo<'static> {
let event = Box::leak(Box::new(Event {
event_type: crate::parser::ast::EventType::Dialogue,
start,
end,
text: "Test",
layer: "0",
style: "Default",
name: "",
margin_l: "0",
margin_r: "0",
margin_v: "0",
margin_t: None,
margin_b: None,
effect: "",
span: Span::new(0, 0, 0, 0),
}));
DialogueInfo::analyze(event).unwrap()
}
#[cfg(feature = "std")]
fn create_test_dialogue_info(start: &'static str, end: &'static str) -> DialogueInfo<'static> {
let event = Box::leak(Box::new(Event {
event_type: crate::parser::ast::EventType::Dialogue,
start,
end,
text: "Test",
layer: "0",
style: "Default",
name: "",
margin_l: "0",
margin_r: "0",
margin_v: "0",
margin_t: None,
margin_b: None,
effect: "",
span: Span::new(0, 0, 0, 0),
}));
DialogueInfo::analyze(event).unwrap()
}
#[test]
fn empty_events_no_overlaps() {
let events = vec![];
assert_eq!(find_overlapping_dialogue_events(&events).len(), 0);
assert_eq!(count_overlapping_dialogue_events(&events), 0);
}
#[test]
fn calculate_duration_empty() {
let events = vec![];
assert_eq!(calculate_total_duration(&events), None);
assert_eq!(calculate_average_duration(&events), None);
}
#[test]
fn calculate_duration_single_event() {
let events = vec![create_test_dialogue_info("0:00:00.00", "0:00:05.00")];
assert_eq!(calculate_total_duration(&events), Some(500)); assert_eq!(calculate_average_duration(&events), Some(500));
}
#[test]
fn calculate_duration_multiple_events() {
let events = vec![
create_test_dialogue_info("0:00:00.00", "0:00:05.00"),
create_test_dialogue_info("0:00:03.00", "0:00:08.00"),
create_test_dialogue_info("0:00:10.00", "0:00:15.00"),
];
assert_eq!(calculate_total_duration(&events), Some(1500));
assert_eq!(calculate_average_duration(&events), Some(500));
}
#[test]
fn sort_events_maintains_order() {
let mut events = vec![
create_test_dialogue_info("0:00:05.00", "0:00:10.00"),
create_test_dialogue_info("0:00:00.00", "0:00:05.00"),
create_test_dialogue_info("0:00:02.00", "0:00:07.00"),
];
sort_events_by_time(&mut events);
assert_eq!(events[0].start_time_cs(), 0); assert_eq!(events[1].start_time_cs(), 200); assert_eq!(events[2].start_time_cs(), 500); }
#[test]
fn find_events_in_range_filters_correctly() {
let events = vec![
create_test_dialogue_info("0:00:00.00", "0:00:05.00"), create_test_dialogue_info("0:00:03.00", "0:00:08.00"), create_test_dialogue_info("0:00:10.00", "0:00:15.00"), ];
let indices = find_events_in_range(&events, 250, 600); assert_eq!(indices, vec![0, 1]); }
#[test]
fn sort_events_same_start_time() {
let mut events = vec![
create_test_dialogue_info("0:00:05.00", "0:00:10.00"), create_test_dialogue_info("0:00:05.00", "0:00:08.00"), create_test_dialogue_info("0:00:05.00", "0:00:12.00"), ];
sort_events_by_time(&mut events);
assert_eq!(events[0].start_time_cs(), 500);
assert_eq!(events[0].end_time_cs(), 800); assert_eq!(events[1].start_time_cs(), 500);
assert_eq!(events[1].end_time_cs(), 1000); assert_eq!(events[2].start_time_cs(), 500);
assert_eq!(events[2].end_time_cs(), 1200); }