use std::borrow::Cow;
pub(crate) fn trim_url_raw(raw: &str) -> Option<Cow<'_, str>> {
let open = raw.find('(')?;
let close = raw.rfind(')')?;
if close < open {
return None;
}
let inner_raw = &raw[open + 1..close];
let inner = crate::escapes::trim_css(inner_raw);
if inner.len() == inner_raw.len() && close == raw.len() - 1 {
return Some(Cow::Borrowed(raw));
}
Some(Cow::Owned(format!("{}{})", &raw[..=open], inner)))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn trims_inner_whitespace_preserving_content_and_casing() {
assert_eq!(
trim_url_raw("url( https://fuz.dev )").as_deref(),
Some("url(https://fuz.dev)")
);
assert_eq!(trim_url_raw("URL( foo )").as_deref(), Some("URL(foo)"));
assert_eq!(trim_url_raw("url( )").as_deref(), Some("url()"));
}
#[test]
fn returns_none_when_not_parenthesized() {
assert_eq!(trim_url_raw("noparens"), None);
assert_eq!(trim_url_raw(")foo("), None);
}
#[test]
fn matches_any_parenthesized_token_and_uses_last_paren() {
assert_eq!(trim_url_raw("(foo)").as_deref(), Some("(foo)"));
assert_eq!(trim_url_raw("url(a)b)").as_deref(), Some("url(a)b)"));
}
}