use ass_core::utils::{parse_ass_time, CoreError};
#[test]
fn test_parse_ass_time_invalid_minutes() {
let invalid_times = vec![
"1:60:30.45", "0:65:00.00", "2:99:15.50", ];
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![
"1:30:60.45", "0:45:65.00", "2:15:99.50", ];
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![
"1:30:45.100", "0:45:30.999", ];
for time_str in invalid_times {
let result = parse_ass_time(time_str);
let _ = result;
}
}
#[test]
fn test_parse_ass_time_malformed_format() {
let malformed_times = vec![
"", "invalid", "1:30", "1:30:45.", "a:30:45.50", "1:b:45.50", "1:30:c.50", "1:30:45.d", "1::45.50", ":30:45.50", "1:30:.50", "-1:30:45.50", "1:-30:45.50", "1:30:-45.50", "1:30:45.-50", "1:30:45.1a", ];
for time_str in malformed_times {
let result = parse_ass_time(time_str);
assert!(
result.is_err(),
"Expected {time_str} to be invalid but it was valid"
);
}
}
#[test]
fn test_parse_ass_time_precision_edge_cases() {
let precision_cases = vec![
"0:00:00.00", "9:59:59.99", "0:00:00.01", "5:30:30.50", ];
for time_str in precision_cases {
let result = parse_ass_time(time_str);
assert!(result.is_ok(), "Time {time_str} should be valid");
}
}