#![cfg(feature = "integration-tests")]
use serial_test::serial;
use zendriver::Browser;
use zendriver::{Persona, Seed, Strategy, Surface};
const CANVAS_READ_JS: &str = r#"(() => {
const c = document.createElement('canvas');
c.width = 50; c.height = 20;
const x = c.getContext('2d');
x.fillText('zd', 2, 12);
return c.toDataURL();
})()"#;
#[tokio::test]
#[serial]
#[ignore] async fn seeded_canvas_is_stable_across_reads() {
let browser = Browser::builder()
.persona(Persona::builder().seed(Seed::from_u64(42)).build())
.launch()
.await
.unwrap();
let tab = browser.main_tab();
tab.goto("about:blank").await.unwrap();
tab.wait_for_load().await.unwrap();
let a: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
let b: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
assert_eq!(a, b, "Seeded canvas must be STABLE across repeat reads");
browser.close().await.unwrap();
}
#[tokio::test]
#[serial]
#[ignore] async fn native_canvas_is_stable_across_reads() {
let browser = Browser::builder()
.persona(Persona::builder().seed(Seed::from_u64(42)).build())
.surface(Surface::Canvas, Strategy::Native)
.launch()
.await
.unwrap();
let tab = browser.main_tab();
tab.goto("about:blank").await.unwrap();
tab.wait_for_load().await.unwrap();
let a: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
let b: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
assert_eq!(a, b, "Native canvas must also be stable (no farble noise)");
browser.close().await.unwrap();
}
#[tokio::test]
#[serial]
#[ignore] async fn random_canvas_differs_across_reads() {
let browser = Browser::builder()
.persona(Persona::builder().seed(Seed::from_u64(99)).build())
.surface(Surface::Canvas, Strategy::Random)
.launch()
.await
.unwrap();
let tab = browser.main_tab();
tab.goto("about:blank").await.unwrap();
tab.wait_for_load().await.unwrap();
let a: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
let b: String = tab.evaluate::<String>(CANVAS_READ_JS).await.unwrap();
assert_ne!(
a, b,
"Random canvas strategy must produce different outputs per read"
);
browser.close().await.unwrap();
}