use ass_core::utils::parse_ass_time;
use ass_core::CoreError;
#[test]
fn test_parse_ass_time_invalid_minutes() {
let invalid_times = vec![
"1:60:00.00", "2:75:30.50", "0:99:59.99", ];
for time_str in invalid_times {
let result = parse_ass_time(time_str);
assert!(result.is_err());
if let Err(CoreError::InvalidTime(msg)) = result {
assert!(msg.contains("Minutes must be < 60"));
}
}
}
#[test]
fn test_parse_ass_time_invalid_seconds() {
let invalid_times = vec![
"0:00:60.00", "0:30:75.25", "1:45:99.99", ];
for time_str in invalid_times {
let result = parse_ass_time(time_str);
assert!(result.is_err());
if let Err(CoreError::InvalidTime(msg)) = result {
assert!(msg.contains("Seconds must be < 60"));
}
}
}
#[test]
fn test_parse_ass_time_invalid_centiseconds() {
let invalid_times = vec![
"0:00:00.100", "0:00:30.150", "1:30:45.999", ];
for time_str in invalid_times {
let result = parse_ass_time(time_str);
match result {
Ok(centiseconds) => {
println!("Unexpectedly parsed '{time_str}' as {centiseconds} centiseconds");
}
Err(e) => {
println!("Failed to parse '{time_str}': {e}");
}
}
}
}
#[test]
fn test_parse_ass_time_malformed_input() {
let malformed_times = vec![
"invalid", "1:2", "1:2:3:4:5", "a:b:c.d", "-1:30:45.50", "1:-30:45.50", "1:30:-45.50", "1:30:45.-50", "", ":", "..", "1::30.50", "1:30:.50", "1:30:45.", ];
for time_str in malformed_times {
let result = parse_ass_time(time_str);
assert!(result.is_err(), "Should fail for: {time_str}");
}
}
#[test]
fn test_time_parsing_boundary_values() {
let boundary_cases = vec![
("0:59:59.99", true), ("23:59:59.99", true), ("0:00:00.00", true), ("0:59:60.00", false), ("0:60:00.00", false), ("0:00:00.100", true), ];
for (time_str, should_succeed) in boundary_cases {
let result = parse_ass_time(time_str);
if should_succeed {
assert!(result.is_ok(), "Should succeed parsing: {time_str}");
} else {
assert!(result.is_err(), "Should fail parsing: {time_str}");
}
}
}
#[test]
fn test_numeric_parsing_edge_cases() {
let edge_cases = vec![
"999:999:999.999", "000:000:000.000", "1:2:3.4", " 1:30:45.50 ", "1: 30:45.50", ];
for time_str in edge_cases {
let result = parse_ass_time(time_str);
match result {
Ok(centiseconds) => {
println!("Parsed '{time_str}' as {centiseconds} centiseconds");
}
Err(e) => {
println!("Failed to parse '{time_str}': {e}");
}
}
}
}