use impeccable::asset_capture::CdpAssetRenderer; use impeccable_comp::{png_io, raster}; use impeccable_comp_verbs::asset_capture::{AssetCaptureRequest, AssetRenderer, CaptureBox}; use std::{ io::{Read, Write}, net::TcpListener, time::Duration, }; #[test] fn native_capture_distinguishes_paint_from_file_presence() { let env = std::env::vars().collect(); if impeccable_browser::discovery::find_browser(&env).is_err() { eprintln!("skip: no browser installed"); return; } let image = png_io::encode_png(&raster::create_image(32, 32, [231, 60, 30, 255]), &[]).unwrap(); let wrong = png_io::encode_png(&raster::create_image(32, 32, [20, 50, 200, 255]), &[]).unwrap(); let transparent = png_io::encode_png(&raster::create_image(32, 32, [0, 0, 0, 0]), &[]).unwrap(); let transparent_response = transparent.clone(); let listener = TcpListener::bind("127.0.0.1:0").unwrap(); let origin = format!("http://127.0.0.1:{}", listener.local_addr().unwrap().port()); let asset = image.clone(); std::thread::spawn(move || { for mut stream in listener.incoming().flatten() { stream .set_read_timeout(Some(Duration::from_secs(2))) .unwrap(); let mut bytes = [0u8; 4096]; let n = stream.read(&mut bytes).unwrap_or(0); let line = String::from_utf8_lossy(&bytes[..n]); let path = line.split_whitespace().nth(1).unwrap_or("/"); let (mime, body) = if path == "/transparent.png" { ("image/png", transparent_response.clone()) } else if path == "/art.png" || path == "/lazy.png" { ("image/png", asset.clone()) } else if path == "/collision/art.png" { ("image/png", wrong.clone()) } else { let mode = path.trim_start_matches('/'); let parent = match mode { "hidden" => "visibility:hidden", "opacity" | "pseudo-hidden" => "opacity:0", "clip" => "clip-path:inset(100%)", _ => "", }; let position = match mode { "shift" => "left:70px", "footer" => "top:500px", _ => "", }; let img = if mode == "pseudo-url-only" { "
" } else if mode.starts_with("pseudo-") && mode != "pseudo-neighbor" { "" } else if mode == "layered-duplicate" { "" } else if mode == "decoration" { "
"
} else if mode == "background" {
""
} else if mode == "wrong" || mode == "footer-trap" {
"
"
} else {
"
"
};
let cover = if mode == "duplicate" {
"
"
} else if mode == "covered" || mode == "pseudo-covered" {
""
} else {
""
};
let extra = match mode {
"many-text-pseudos" => "",
"pseudo-specificity" => "",
"pseudo-mutating" => "",
"pseudo-neighbor" => {
""
}
"canvas-cover" => {
""
}
"canvas-only" => {
""
}
"tiny-token" => "",
"many" => {
""
}
"closed-shadow" => {
""
}
"poison" => {
""
}
"state-probe" => {
""
}
"lazy" => {
"
"
}
"canvas" => {
""
}
"footer-trap" => {
"
"
}
"mutating" => {
""
}
"ambiguous" => {
""
}
"rotated-overlap" => "",
"transition" => "",
"animated" => {
""
}
_ => "",
};
let html = format!(
"