use super::*;
#[test]
fn defaults_cover_major_vendors() {
let s = SliderCaptchaSolver::new();
let canvases: Vec<_> = s.selectors.iter().map(|x| x.canvas).collect();
for needle in [
".geetest_canvas_slice",
"#captcha__puzzle",
".px-captcha-puzzle",
"[data-puzzle-canvas]",
] {
assert!(
canvases.contains(&needle),
"default selectors must include: {needle}"
);
}
}
#[test]
fn supports_slider_and_known_vendors() {
let s = SliderCaptchaSolver::new();
assert!(s.supports(&DetectedCaptcha::SliderCaptcha));
assert!(s.supports(&DetectedCaptcha::Custom("datadome".into())));
assert!(s.supports(&DetectedCaptcha::Custom("geetest_v3".into())));
assert!(s.supports(&DetectedCaptcha::Custom("perimeterx_human".into())));
assert!(s.supports(&DetectedCaptcha::Custom("aws_waf_captcha".into())));
assert!(!s.supports(&DetectedCaptcha::Custom("friendly_captcha".into())));
assert!(!s.supports(&DetectedCaptcha::Turnstile));
}
#[test]
fn name_and_method_stable() {
let s = SliderCaptchaSolver::new();
assert_eq!(s.name(), "SliderCaptchaSolver");
assert_eq!(s.method(), SolveMethod::BehavioralBypass);
}
#[test]
fn with_selectors_overrides_default() {
let custom = SliderSelectors {
canvas: ".my-canvas",
handle: ".my-handle",
success_marker: None,
};
let s = SliderCaptchaSolver::new().with_selectors(vec![custom]);
assert_eq!(s.selectors.len(), 1);
assert_eq!(s.selectors[0].canvas, ".my-canvas");
}
#[test]
fn gap_detect_js_uses_canvas_imagedata() {
assert!(GAP_DETECT_JS.contains("getImageData"));
assert!(GAP_DETECT_JS.contains("HTMLCanvasElement"));
}
#[test]
fn anchors_js_returns_handle_and_canvas_geometry() {
assert!(ANCHORS_JS.contains("getBoundingClientRect"));
assert!(ANCHORS_JS.contains("handleX"));
assert!(ANCHORS_JS.contains("canvasLeft"));
}