use htmlentity::entity::{
decode, encode, encode_default, encode_filter, encode_with, EncodeType, EntitySet, NOOP,
};
#[test]
fn test_escape() {
let content = "
\t
\n
<br>this is a multiple line text.
<div class='product'>
<span><span>¥</span>100</span>
<h4>this is a title<main></h4>
</div>
";
let result = encode_default(content);
assert_eq!(decode(&result), content);
let content = "<div>";
let encoded_content = "<div>";
assert_eq!(
encode(content, EntitySet::SpecialChars, Default::default()),
encoded_content
);
assert_eq!(decode(encoded_content), content);
let content = "<div>";
let encoded_content = "<div>";
assert_eq!(
encode(content, EntitySet::All, EncodeType::NamedOrHex),
encoded_content
);
assert_eq!(decode(encoded_content), content);
let content = "\t<div>";
let encoded_content = encode_filter(
content,
|_ch: char| true,
EncodeType::Named,
Some(|ch| ch == '<'),
);
assert_eq!(encoded_content, "	<div>");
let content = "\t<div>";
let encoded_content = encode_with(content, |ch: char| {
if ch == '<' {
return None;
}
Some(EncodeType::Named)
});
assert_eq!(encoded_content, "	<div>");
}
#[test]
fn test_wrong_entity() {
let content = "&#;";
assert_eq!(decode(content), content);
let content = "&;";
assert_eq!(decode(content), content);
}
#[test]
fn test_decode_named() {
let content = "&#q123;";
assert_eq!(decode(content), content);
let content = "&123;";
assert_eq!(decode(content), content);
let content = "&q123;";
assert_eq!(decode(content), content);
}
#[test]
fn test_decode_hex() {
let content = "→";
assert_eq!(decode(content), "→");
let content = "→";
assert_eq!(decode(content), "→");
let content = "→";
assert_eq!(decode(content), "→");
let content = "�";
assert_eq!(decode(content), content);
let content = "�";
assert_eq!(decode(content), content);
let content = "ਏh;";
assert_eq!(decode(content), content);
let content = "&#a00;";
assert_eq!(decode(content), content);
}
#[test]
fn test_decode_decimal() {
let content = "→";
assert_eq!(decode(content), "→");
let content = "→";
assert_eq!(decode(content), "→");
let content = "�";
assert_eq!(decode(content), content);
let content = "�";
assert_eq!(decode(content), content);
}
#[test]
fn test_exclude_named() {
let html = "<div class='header'></div>";
let html_encoded = encode_filter(
html,
|ch| ch != '<' && EntitySet::SpecialChars.contains(&ch),
EncodeType::Named,
NOOP,
);
assert_eq!(html_encoded, "<div class='header'></div>");
let html = "<div class='header'></div>";
let html_encoded = encode_filter(
html,
|ch| EntitySet::SpecialChars.contains(&ch),
EncodeType::NamedOrDecimal,
Some(|ch| ch == '\''),
);
assert_eq!(
html_encoded,
"<div class='header'></div>"
);
let html = "<div class='header'></div>";
let html_encoded = encode_filter(
html,
|ch| EntitySet::SpecialChars.contains(&ch),
EncodeType::NamedOrDecimal,
Some(|ch| EntitySet::SpecialChars.contains(&ch)),
);
assert_eq!(
html_encoded,
"<div class='header'></div>"
);
}