diff --git a/crates/ely_app/src/services/servo_sidecar.rs b/crates/ely_app/src/services/servo_sidecar.rs index 1cd2ce5..092278b 100644 --- a/crates/ely_app/src/services/servo_sidecar.rs +++ b/crates/ely_app/src/services/servo_sidecar.rs @@ -289,6 +289,24 @@ impl SidecarSnapshot { self.height } + #[cfg(all(test, feature = "live-site-smoke"))] + #[must_use] + pub(crate) fn non_white_pixel_count(&self) -> u64 { + self.non_white_pixel_count + } + + #[cfg(all(test, feature = "live-site-smoke"))] + #[must_use] + pub(crate) fn content_pixel_count(&self) -> u64 { + self.content_pixel_count + } + + #[cfg(all(test, feature = "live-site-smoke"))] + #[must_use] + pub(crate) fn sample_hash(&self) -> u64 { + self.sample_hash + } + #[must_use] pub fn into_rgba_bytes(self) -> Vec { self.rgba_bytes diff --git a/crates/ely_app/src/shell/web_surface_frame.rs b/crates/ely_app/src/shell/web_surface_frame.rs index 8af46a5..c8f0d67 100644 --- a/crates/ely_app/src/shell/web_surface_frame.rs +++ b/crates/ely_app/src/shell/web_surface_frame.rs @@ -22,6 +22,12 @@ pub(super) struct WebSurfaceFrame { scroll_offset: WebSurfaceScrollOffset, click_point: Option, typed_text: Option, + #[cfg(all(test, feature = "live-site-smoke"))] + non_white_pixel_count: u64, + #[cfg(all(test, feature = "live-site-smoke"))] + content_pixel_count: u64, + #[cfg(all(test, feature = "live-site-smoke"))] + sample_hash: u64, pub(super) image: Arc, } @@ -38,6 +44,12 @@ impl WebSurfaceFrame { let loaded_url = snapshot.loaded_url().map(str::to_string); let title = snapshot.title().map(str::to_string); let render_state = snapshot.render_state().to_string(); + #[cfg(all(test, feature = "live-site-smoke"))] + let non_white_pixel_count = snapshot.non_white_pixel_count(); + #[cfg(all(test, feature = "live-site-smoke"))] + let content_pixel_count = snapshot.content_pixel_count(); + #[cfg(all(test, feature = "live-site-smoke"))] + let sample_hash = snapshot.sample_hash(); let rgba_bytes = snapshot.into_rgba_bytes(); let Some(buffer) = ImageBuffer::, _>::from_raw(width, height, rgba_bytes) else { @@ -56,6 +68,12 @@ impl WebSurfaceFrame { scroll_offset, click_point, typed_text, + #[cfg(all(test, feature = "live-site-smoke"))] + non_white_pixel_count, + #[cfg(all(test, feature = "live-site-smoke"))] + content_pixel_count, + #[cfg(all(test, feature = "live-site-smoke"))] + sample_hash, image: Arc::new(RenderImage::new([image::Frame::new(image_buffer)])), }) } @@ -99,6 +117,21 @@ impl WebSurfaceFrame { pub(super) fn typed_text(&self) -> Option<&str> { self.typed_text.as_deref() } + + #[cfg(all(test, feature = "live-site-smoke"))] + pub(super) fn non_white_pixel_count(&self) -> u64 { + self.non_white_pixel_count + } + + #[cfg(all(test, feature = "live-site-smoke"))] + pub(super) fn content_pixel_count(&self) -> u64 { + self.content_pixel_count + } + + #[cfg(all(test, feature = "live-site-smoke"))] + pub(super) fn sample_hash(&self) -> u64 { + self.sample_hash + } } #[derive(Debug, Error)] diff --git a/crates/ely_app/src/shell/web_surface_live_site_tests.rs b/crates/ely_app/src/shell/web_surface_live_site_tests.rs index ce22c7d..528eded 100644 --- a/crates/ely_app/src/shell/web_surface_live_site_tests.rs +++ b/crates/ely_app/src/shell/web_surface_live_site_tests.rs @@ -20,6 +20,7 @@ use super::WebSurfaceStore; const LIVE_SURFACE_WIDTH: u32 = 934; const LIVE_SURFACE_HEIGHT: u32 = 657; +const MINIMUM_CONTENT_PIXELS: u64 = 1_000; #[test] fn web_surface_cases_cover_prd_reference_urls() -> Result<(), Box> { @@ -78,6 +79,9 @@ fn assert_prd_frame_is_ready(frame: &WebSurfaceFrame, case: &LiveSiteCase) { assert!(frame.url_label().contains(normalized_url(case.url)), "{}", frame.url_label()); assert!(frame.title_label().contains(case.title_fragment), "{}", frame.title_label()); assert_eq!(frame.detail_label(), format!("{} 934x657", frame.render_state()), "{}", case.url); + assert!(frame.non_white_pixel_count() > 0, "{}", case.url); + assert!(frame.content_pixel_count() >= MINIMUM_CONTENT_PIXELS, "{}", case.url); + assert!(frame.sample_hash() > 0, "{}", case.url); } fn assert_render_state_is_open(state: &str, url: &str) {