// ██████╗ █████╗ ███████╗███████╗██╗███╗ ██╗ ██████╗ // ██╔══██╗██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝ // ██████╔╝███████║███████╗███████╗██║██╔██╗ ██║██║ ███╗ // ██╔═══╝ ██╔══██║╚════██║╚════██║██║██║╚██╗██║██║ ██║ // ██║ ██║ ██║███████║███████║██║██║ ╚████║╚██████╔╝ // ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝ #[cfg(test)] mod passing { use html5ever::serialize::{serialize, SerializeOpts}; use reqwest::blocking::Client; use std::collections::HashMap; use crate::html; use crate::opts::Options; #[test] fn basic() { let cache = &mut HashMap::new(); let html = "

"; let dom = html::html_to_dom(&html); let url = "http://localhost"; let mut options = Options::default(); options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "

" ); } #[test] fn ensure_no_recursive_iframe() { let html = "

"; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "

" ); } #[test] fn ensure_no_recursive_frame() { let html = ""; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "" ); } #[test] fn no_css() { let html = "\ \
"; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_css = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "\ \ \ \ \ \
\ \ " ); } #[test] fn no_images() { let html = "\
"; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_images = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), format!( "\ \ \ \ \
\ \
\ \ ", empty_image = empty_image!() ) ); } #[test] fn no_body_background_images() { let html = ""; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_images = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "" ); } #[test] fn no_frames() { let html = ""; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_frames = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "" ); } #[test] fn no_iframes() { let html = ""; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_frames = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "" ); } #[test] fn no_js() { let html = "
\ \ \
"; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_js = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "
\
" ); } #[test] fn discards_integrity() { let html = "No integrity\ \ "; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_css = true; options.no_frames = true; options.no_js = true; options.no_images = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "\ No integrity\ \ " ); } #[test] fn removes_unwanted_meta_tags() { let html = "\ \ \ \ \ \ "; let dom = html::html_to_dom(&html); let url = "http://localhost"; let cache = &mut HashMap::new(); let mut options = Options::default(); options.no_css = true; options.no_frames = true; options.no_js = true; options.no_images = true; options.silent = true; let client = Client::new(); html::walk_and_embed_assets(cache, &client, &url, &dom.document, &options, 0); let mut buf: Vec = Vec::new(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); assert_eq!( buf.iter().map(|&c| c as char).collect::(), "\ \ \ \ \ \ " ); } }