use secure_output::CssEncoder;
use secure_output::OutputEncoder;
use std::borrow::Cow;
#[test]
fn css_alphanumeric_unchanged() {
let enc = CssEncoder;
let result = enc.encode("red");
assert!(
matches!(result, Cow::Borrowed(_)),
"expected Cow::Borrowed for pure alphanumeric input"
);
assert_eq!(result, "red");
}
#[test]
fn css_parentheses_escaped() {
let enc = CssEncoder;
let result = enc.encode("expression(alert(1))");
assert!(
!result.contains('('),
"parentheses must be escaped: {result}"
);
assert!(
!result.contains(')'),
"parentheses must be escaped: {result}"
);
}
#[test]
fn css_backslash_escaped() {
let enc = CssEncoder;
let result = enc.encode("a\\b");
assert!(
!result.contains("a\\b") || result.starts_with("a\\00"),
"backslash must be escaped: {result}"
);
assert!(
result.contains("005c") || result.contains("\\\\"),
"expected CSS escape for backslash: {result}"
);
}
#[test]
fn css_null_bytes_stripped() {
let enc = CssEncoder;
let result = enc.encode("color\0red");
assert!(!result.contains('\0'));
}
#[test]
fn css_numbers_unchanged() {
let enc = CssEncoder;
let result = enc.encode("123");
assert!(matches!(result, Cow::Borrowed(_)));
assert_eq!(result, "123");
}