tests: completed for all languages
fix: parsing search videos without duration
This commit is contained in:
parent
b88faa9d05
commit
bb396968dc
20 changed files with 927 additions and 688 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -143,7 +143,7 @@ where
|
|||
/// and return the duration in seconds.
|
||||
pub fn parse_video_length(text: &str) -> Option<u32> {
|
||||
static VIDEO_LENGTH_REGEX: Lazy<Regex> =
|
||||
Lazy::new(|| Regex::new(r#"(?:(\d+):)?(\d{1,2}):(\d{2})"#).unwrap());
|
||||
Lazy::new(|| Regex::new(r#"(?:(\d+)[:.])?(\d{1,2})[:.](\d{2})"#).unwrap());
|
||||
VIDEO_LENGTH_REGEX.captures(text).map(|cap| {
|
||||
let hrs = cap
|
||||
.get(1)
|
||||
|
|
@ -294,11 +294,40 @@ where
|
|||
}
|
||||
} else if c == decimal_point {
|
||||
after_point = true;
|
||||
} else if !matches!(c, '\u{200b}' | '.' | ',') {
|
||||
} else if !matches!(
|
||||
c,
|
||||
'\u{200b}'
|
||||
| '\u{202b}'
|
||||
| '\u{202c}'
|
||||
| '\u{202e}'
|
||||
| '\u{200e}'
|
||||
| '\u{200f}'
|
||||
| '.'
|
||||
| ','
|
||||
) {
|
||||
filtered.push(c);
|
||||
}
|
||||
}
|
||||
(ok_or_bail!(buf.parse::<u64>(), None), exp, filtered)
|
||||
if buf.is_empty() {
|
||||
// TODO: integrate into dictionary
|
||||
if lang == Language::Ar && string.contains("واحد")
|
||||
|| lang == Language::Iw && string.contains("אחד")
|
||||
|| lang == Language::As && string.contains('১') // ১টা
|
||||
|| lang == Language::Bn && string.contains('১')
|
||||
|| lang == Language::Fa && string.contains('۱')
|
||||
|| lang == Language::Is && (string.contains("Eitt ") || string.contains("Einn "))
|
||||
|| lang == Language::My && string.contains('၁')
|
||||
|| lang == Language::No && string.contains("Én ")
|
||||
|| lang == Language::Pt && string.contains("Um ")
|
||||
|| lang == Language::Ro && string.contains("Un ")
|
||||
{
|
||||
return 1.try_into().ok();
|
||||
}
|
||||
|
||||
return None;
|
||||
} else {
|
||||
(buf.parse::<u64>().ok()?, exp, filtered)
|
||||
}
|
||||
};
|
||||
|
||||
let lookup_token = |token: &str| match token {
|
||||
|
|
@ -467,6 +496,17 @@ pub(crate) mod tests {
|
|||
assert_eq!(res, expect);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(
|
||||
Language::Iw,
|
||||
"\u{200f}\u{202b}3.36M\u{200f}\u{202c}\u{200f} \u{200f}מנויים\u{200f}",
|
||||
3360000
|
||||
)]
|
||||
fn t_parse_large_numstr_1(#[case] lang: Language, #[case] string: &str, #[case] expect: u64) {
|
||||
let res = parse_large_numstr::<u64>(string, lang).unwrap();
|
||||
assert_eq!(res, expect);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn t_parse_large_numstr_samples() {
|
||||
let json_path = path!(*TESTFILES / "dict" / "large_number_samples.json");
|
||||
|
|
|
|||
Reference in a new issue