use crate::limits::ParserLimits;
#[derive(Debug, Clone)]
pub struct ParseOptions {
pub resolve_relative_uris: bool,
pub sanitize_html: bool,
pub limits: ParserLimits,
}
impl Default for ParseOptions {
fn default() -> Self {
Self {
resolve_relative_uris: true,
sanitize_html: true,
limits: ParserLimits::default(),
}
}
}
impl ParseOptions {
#[must_use]
pub const fn permissive() -> Self {
Self {
resolve_relative_uris: true,
sanitize_html: false,
limits: ParserLimits::permissive(),
}
}
#[must_use]
pub const fn strict() -> Self {
Self {
resolve_relative_uris: false,
sanitize_html: true,
limits: ParserLimits::strict(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_options() {
let options = ParseOptions::default();
assert!(options.resolve_relative_uris);
assert!(options.sanitize_html);
assert_eq!(options.limits.max_entries, 10_000);
}
#[test]
fn test_permissive_options() {
let options = ParseOptions::permissive();
assert!(options.resolve_relative_uris);
assert!(!options.sanitize_html);
assert_eq!(options.limits.max_entries, 100_000);
}
#[test]
fn test_strict_options() {
let options = ParseOptions::strict();
assert!(!options.resolve_relative_uris);
assert!(options.sanitize_html);
assert_eq!(options.limits.max_entries, 1_000);
}
#[test]
fn test_custom_options() {
let options = ParseOptions {
resolve_relative_uris: false,
sanitize_html: false,
limits: ParserLimits::permissive(),
};
assert!(!options.resolve_relative_uris);
assert!(!options.sanitize_html);
assert_eq!(options.limits.max_entries, 100_000);
}
#[test]
fn test_options_clone() {
let options1 = ParseOptions::default();
let options2 = options1.clone();
assert_eq!(
options1.resolve_relative_uris,
options2.resolve_relative_uris
);
assert_eq!(options1.sanitize_html, options2.sanitize_html);
}
#[test]
fn test_options_debug() {
let options = ParseOptions::default();
let debug_str = format!("{options:?}");
assert!(debug_str.contains("ParseOptions"));
assert!(debug_str.contains("resolve_relative_uris"));
assert!(debug_str.contains("sanitize_html"));
}
}