From 4db339a6f580600250d9965ad265ed6b3c1e2d6a Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Tue, 15 Apr 2025 18:28:47 +0200 Subject: [PATCH 01/10] Add tests for layout and visuals of most egui widgets --- Cargo.lock | 10 + tests/egui_tests/Cargo.toml | 15 + .../tests/snapshots/button_image_layout.png | 3 + .../button_image_shortcut_layout.png | 3 + ...button_image_shortcut_selected_visuals.png | 3 + .../button_image_shortcut_visuals.png | 3 + .../tests/snapshots/button_image_visuals.png | 3 + .../tests/snapshots/button_layout.png | 3 + .../tests/snapshots/button_visuals.png | 3 + .../snapshots/checkbox_checked_layout.png | 3 + .../snapshots/checkbox_checked_visuals.png | 3 + .../tests/snapshots/checkbox_layout.png | 3 + .../tests/snapshots/checkbox_visuals.png | 3 + .../tests/snapshots/drag_value_layout.png | 3 + .../tests/snapshots/drag_value_visuals.png | 3 + .../tests/snapshots/radio_checked_layout.png | 3 + .../tests/snapshots/radio_checked_visuals.png | 3 + .../tests/snapshots/radio_layout.png | 3 + .../tests/snapshots/radio_visuals.png | 3 + .../snapshots/selectable_value_layout.png | 3 + .../selectable_value_selected_layout.png | 3 + .../selectable_value_selected_visuals.png | 3 + .../snapshots/selectable_value_visuals.png | 3 + .../tests/snapshots/slider_layout.png | 3 + .../tests/snapshots/slider_visuals.png | 3 + .../tests/snapshots/text_edit_layout.png | 3 + .../tests/snapshots/text_edit_visuals.png | 3 + tests/egui_tests/tests/test_widgets.rs | 300 ++++++++++++++++++ 28 files changed, 400 insertions(+) create mode 100644 tests/egui_tests/Cargo.toml create mode 100644 tests/egui_tests/tests/snapshots/button_image_layout.png create mode 100644 tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png create mode 100644 tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/button_image_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/button_layout.png create mode 100644 tests/egui_tests/tests/snapshots/button_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/checkbox_checked_layout.png create mode 100644 tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/checkbox_layout.png create mode 100644 tests/egui_tests/tests/snapshots/checkbox_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/drag_value_layout.png create mode 100644 tests/egui_tests/tests/snapshots/drag_value_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/radio_checked_layout.png create mode 100644 tests/egui_tests/tests/snapshots/radio_checked_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/radio_layout.png create mode 100644 tests/egui_tests/tests/snapshots/radio_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/selectable_value_layout.png create mode 100644 tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png create mode 100644 tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/selectable_value_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/slider_layout.png create mode 100644 tests/egui_tests/tests/snapshots/slider_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/text_edit_layout.png create mode 100644 tests/egui_tests/tests/snapshots/text_edit_visuals.png create mode 100644 tests/egui_tests/tests/test_widgets.rs diff --git a/Cargo.lock b/Cargo.lock index 6d1d01b1d8e..c2d246045aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1423,6 +1423,16 @@ dependencies = [ "wgpu", ] +[[package]] +name = "egui_tests" +version = "0.31.1" +dependencies = [ + "egui", + "egui_extras", + "egui_kittest", + "image", +] + [[package]] name = "ehttp" version = "0.5.0" diff --git a/tests/egui_tests/Cargo.toml b/tests/egui_tests/Cargo.toml new file mode 100644 index 00000000000..ee2531831c1 --- /dev/null +++ b/tests/egui_tests/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "egui_tests" +edition.workspace = true +license.workspace = true +rust-version.workspace = true +version.workspace = true + +[dev-dependencies] +egui = { workspace = true, default-features = true } +egui_kittest = { workspace = true, features = ["snapshot", "wgpu"] } +egui_extras = { workspace = true, features = ["image"]} +image = { workspace = true, features = ["png"] } + +[lints] +workspace = true diff --git a/tests/egui_tests/tests/snapshots/button_image_layout.png b/tests/egui_tests/tests/snapshots/button_image_layout.png new file mode 100644 index 00000000000..7efd857fbd7 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_image_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8631e8522e77389f5e726f15ba13f562f82ac5eb4b2c4daabacc520f70776fe1 +size 331063 diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png b/tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png new file mode 100644 index 00000000000..3d581ebbb48 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aeaf22b0c031f6970f5d9d576f8ff9cdacaea099cc7ce2b16d13bfb32a9ee49 +size 396606 diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png b/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png new file mode 100644 index 00000000000..c1937b4b395 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:809bdd9df1f5482bb4bc52ca3a430a909b3cfc8ccd5336538735e4be0612a161 +size 12850 diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png b/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png new file mode 100644 index 00000000000..d9452bccbb7 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc5767d06d62d4d0eab6b5e3fc869c7cd7692cbc5930aa676bd629fd22e16249 +size 13004 diff --git a/tests/egui_tests/tests/snapshots/button_image_visuals.png b/tests/egui_tests/tests/snapshots/button_image_visuals.png new file mode 100644 index 00000000000..9f87853b82d --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_image_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0220683ddc2fc85b7dffd55dd33bdacaf34f2967e260399c0ba7424085a56034 +size 10588 diff --git a/tests/egui_tests/tests/snapshots/button_layout.png b/tests/egui_tests/tests/snapshots/button_layout.png new file mode 100644 index 00000000000..0f6b246988c --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5094e58c93eb18c9edcb14216c36a47fa1aea25ba9a9810187e543342f70681 +size 305512 diff --git a/tests/egui_tests/tests/snapshots/button_visuals.png b/tests/egui_tests/tests/snapshots/button_visuals.png new file mode 100644 index 00000000000..8f2f99600a4 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/button_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4637d90b1205fdf78f4a29dfaca58f62e90b8510f92a0e4ed3173cd43c77ffb +size 9545 diff --git a/tests/egui_tests/tests/snapshots/checkbox_checked_layout.png b/tests/egui_tests/tests/snapshots/checkbox_checked_layout.png new file mode 100644 index 00000000000..bb701df387c --- /dev/null +++ b/tests/egui_tests/tests/snapshots/checkbox_checked_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9d00abd0f054422911cbdc6bbc0cb563257b9b5deeb795af852e85f195eec2 +size 404141 diff --git a/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png b/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png new file mode 100644 index 00000000000..8625bcfb158 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4447383f700e90b02562506cdf65c9d11700bf76e57cb8e3e9f6bc31c2fc1643 +size 13182 diff --git a/tests/egui_tests/tests/snapshots/checkbox_layout.png b/tests/egui_tests/tests/snapshots/checkbox_layout.png new file mode 100644 index 00000000000..03e83a1fdbb --- /dev/null +++ b/tests/egui_tests/tests/snapshots/checkbox_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5246ef7d59bc9a7c064da73f7e6014f79aab0d9ffb6d9e8834908b389e6ae95 +size 374977 diff --git a/tests/egui_tests/tests/snapshots/checkbox_visuals.png b/tests/egui_tests/tests/snapshots/checkbox_visuals.png new file mode 100644 index 00000000000..67e1521ae1e --- /dev/null +++ b/tests/egui_tests/tests/snapshots/checkbox_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8305059365106b4364064139372b05cb3f5ebeb75f0316be06929b95d2ab549a +size 12138 diff --git a/tests/egui_tests/tests/snapshots/drag_value_layout.png b/tests/egui_tests/tests/snapshots/drag_value_layout.png new file mode 100644 index 00000000000..659c53442aa --- /dev/null +++ b/tests/egui_tests/tests/snapshots/drag_value_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acbecc3212814745bac866e33d428ca7839468a6d21bc7f8a5d260ab3f141340 +size 230688 diff --git a/tests/egui_tests/tests/snapshots/drag_value_visuals.png b/tests/egui_tests/tests/snapshots/drag_value_visuals.png new file mode 100644 index 00000000000..dbe3c13b644 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/drag_value_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e86a37c7b259a6bad61897545d927d75e8307916dc78d256e4d33c410fcd6876 +size 7306 diff --git a/tests/egui_tests/tests/snapshots/radio_checked_layout.png b/tests/egui_tests/tests/snapshots/radio_checked_layout.png new file mode 100644 index 00000000000..5311ed19be0 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/radio_checked_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4b2cc7d6d2c6c2d84f6ad89aa6d977b5993f1548c83cc6ee8ffb754d52eda1b +size 345185 diff --git a/tests/egui_tests/tests/snapshots/radio_checked_visuals.png b/tests/egui_tests/tests/snapshots/radio_checked_visuals.png new file mode 100644 index 00000000000..430ff0842fd --- /dev/null +++ b/tests/egui_tests/tests/snapshots/radio_checked_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ee407f5f0d72fd17dcb684eb74fe30b4c18dedfdb29633343eddbd43cee138a +size 11239 diff --git a/tests/egui_tests/tests/snapshots/radio_layout.png b/tests/egui_tests/tests/snapshots/radio_layout.png new file mode 100644 index 00000000000..460ea1ebab6 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/radio_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa88195c48639572902cd92eebebad48a5f0bdd2e22fef177a5e4f93474aed1c +size 326037 diff --git a/tests/egui_tests/tests/snapshots/radio_visuals.png b/tests/egui_tests/tests/snapshots/radio_visuals.png new file mode 100644 index 00000000000..55a86131d22 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/radio_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2baeda9d22b9b49f0f39cb116f763e9e0752e0740de0df180bbc612355a0a236 +size 10630 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_layout.png b/tests/egui_tests/tests/snapshots/selectable_value_layout.png new file mode 100644 index 00000000000..6fd4ce695cf --- /dev/null +++ b/tests/egui_tests/tests/snapshots/selectable_value_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdc33d431c37e38b7994595680a0907a4c92dd873ddff466d967be3ff30b25b8 +size 377371 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png b/tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png new file mode 100644 index 00000000000..d77617acdd3 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ea0864af3db46d7e0833500a7a0c1660480f830da8667223bad82872d6c347 +size 390547 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png b/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png new file mode 100644 index 00000000000..6252e354782 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34f6d0903380068be7acc58b093eb5c5019d503e46ee2cfdc59557b6839bf0d5 +size 12366 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_visuals.png b/tests/egui_tests/tests/snapshots/selectable_value_visuals.png new file mode 100644 index 00000000000..92d21c9cd8d --- /dev/null +++ b/tests/egui_tests/tests/snapshots/selectable_value_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c508716359b61b70f11752e37b34be7999daf12c46d59af0930a25d00e89ebe0 +size 12111 diff --git a/tests/egui_tests/tests/snapshots/slider_layout.png b/tests/egui_tests/tests/snapshots/slider_layout.png new file mode 100644 index 00000000000..31b540d7381 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/slider_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d30349bb8ff38a3f33ba4ca7dd2d189401d402c7ff70ede3b703a9e3520c782 +size 325085 diff --git a/tests/egui_tests/tests/snapshots/slider_visuals.png b/tests/egui_tests/tests/snapshots/slider_visuals.png new file mode 100644 index 00000000000..6c83485590c --- /dev/null +++ b/tests/egui_tests/tests/snapshots/slider_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1892358a4552af3f529141d314cd18e4cf55a629d870798278a5470e3e0a8a94 +size 11030 diff --git a/tests/egui_tests/tests/snapshots/text_edit_layout.png b/tests/egui_tests/tests/snapshots/text_edit_layout.png new file mode 100644 index 00000000000..386525ac285 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/text_edit_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e02ee9e6c53018dcad31366720fccb5f8864263662cf456f278b0ee6b048f5d +size 224890 diff --git a/tests/egui_tests/tests/snapshots/text_edit_visuals.png b/tests/egui_tests/tests/snapshots/text_edit_visuals.png new file mode 100644 index 00000000000..5f2a64b8d46 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/text_edit_visuals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7300a0b88d4fdb6c1e543bfaf50e8964b2f84aaaf8197267b671d0cf3c8da30a +size 7033 diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs new file mode 100644 index 00000000000..985954b2bf4 --- /dev/null +++ b/tests/egui_tests/tests/test_widgets.rs @@ -0,0 +1,300 @@ +use egui::load::SizedTexture; +use egui::{ + include_image, Align, Button, Color32, ColorImage, Direction, DragValue, Event, Grid, Layout, + PointerButton, Pos2, Rect, Response, Slider, Stroke, StrokeKind, TextureHandle, TextureOptions, + Ui, UiBuilder, Vec2, Widget, +}; +use egui_kittest::kittest::{by, Node, Queryable}; +use egui_kittest::Harness; +use std::time::Duration; + +#[test] +fn widget_tests() { + test_widget("button", |ui| ui.button("Button")); + test_widget("button_image", |ui| { + Button::image_and_text( + include_image!("../../../crates/eframe/data/icon.png"), + "Button", + ) + .ui(ui) + }); + test_widget("button_image_shortcut", |ui| { + Button::image_and_text( + include_image!("../../../crates/eframe/data/icon.png"), + "Open", + ) + .shortcut_text("⌘O") + .ui(ui) + }); + VisualTests::test("button_image_shortcut_selected", |ui| { + Button::image_and_text( + include_image!("../../../crates/eframe/data/icon.png"), + "Open", + ) + .shortcut_text("⌘O") + .selected(true) + .ui(ui) + }); + + test_widget("selectable_value", |ui| { + ui.selectable_label(false, "Selectable") + }); + test_widget("selectable_value_selected", |ui| { + ui.selectable_label(true, "Selectable") + }); + + test_widget("checkbox", |ui| ui.checkbox(&mut false, "Checkbox")); + test_widget("checkbox_checked", |ui| ui.checkbox(&mut true, "Checkbox")); + test_widget("radio", |ui| ui.radio(false, "Radio")); + test_widget("radio_checked", |ui| ui.radio(true, "Radio")); + + test_widget("drag_value", |ui| DragValue::new(&mut 12.0).ui(ui)); + + test_widget("text_edit", |ui| { + ui.spacing_mut().text_edit_width = 45.0; + ui.text_edit_singleline(&mut "Hi!".to_owned()) + }); + + test_widget("slider", |ui| { + ui.spacing_mut().slider_width = 45.0; + Slider::new(&mut 12.0, 0.0..=100.0).ui(ui) + }); +} + +fn test_widget(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { + test_widget_layout(name, &mut w); + VisualTests::test(name, &mut w); +} + +fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { + let test_size = Vec2::new(110.0, 45.0); + + struct Row { + main_dir: Direction, + main_align: Align, + main_justify: bool, + } + + struct Col { + cross_align: Align, + cross_justify: bool, + } + + let mut rows = Vec::new(); + let mut cols = Vec::new(); + + for main_justify in [false, true] { + for main_dir in [ + Direction::LeftToRight, + Direction::TopDown, + Direction::RightToLeft, + Direction::BottomUp, + ] { + for main_align in [Align::Min, Align::Center, Align::Max] { + rows.push(Row { + main_dir, + main_align, + main_justify, + }); + } + } + } + + for cross_justify in [false, true] { + for cross_align in [Align::Min, Align::Center, Align::Max] { + cols.push(Col { + cross_align, + cross_justify, + }); + } + } + + let mut harness = Harness::builder().build_ui(|ui| { + egui_extras::install_image_loaders(ui.ctx()); + Grid::new("layout").striped(true).show(ui, |ui| { + ui.label(""); + for col in &cols { + ui.label(format!( + "cross_align: {:?}\ncross_justify:{:?}", + col.cross_align, col.cross_justify + )); + } + ui.end_row(); + + for row in &rows { + ui.label(format!( + "main_dir: {:?}\nmain_align: {:?}\nmain_justify: {:?}", + row.main_dir, row.main_align, row.main_justify + )); + for col in &cols { + let layout = Layout { + main_dir: row.main_dir, + main_align: row.main_align, + main_justify: row.main_justify, + cross_align: col.cross_align, + cross_justify: col.cross_justify, + main_wrap: false, + }; + + let rect = Rect::from_min_size(ui.cursor().min, test_size); + ui.scope_builder(UiBuilder::new().layout(layout).max_rect(rect), |ui| w(ui)); + ui.painter().rect_stroke( + rect, + 0.0, + Stroke::new(1.0, Color32::WHITE), + StrokeKind::Outside, + ); + } + + ui.end_row(); + } + }); + + // For some reason the bottom is cut off otherwise... + // TODO: Figure out why fit_contents doesn't work as expected + ui.add_space(50.0); + }); + + harness.fit_contents(); + harness.snapshot(&format!("{name}_layout")); +} + +/// Utility to create a snapshot test of the different states of a egui widget. +/// This renders each state to a texture to work around the fact only a single widget can be +/// hovered / pressed / focused at a time. +struct VisualTests<'a> { + name: String, + w: &'a mut dyn FnMut(&mut Ui) -> Response, + results: Vec<(String, ColorImage)>, +} + +impl<'a> VisualTests<'a> { + pub fn test(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { + let mut vis = VisualTests::new(name, &mut w); + vis.add_default_states(); + vis.render(); + } + + pub fn new(name: &str, w: &'a mut dyn FnMut(&mut Ui) -> Response) -> Self { + Self { + name: name.to_owned(), + w, + results: Vec::new(), + } + } + + fn add_default_states(&mut self) { + self.add("idle", |_| {}); + self.add_node("hover", |node| { + node.hover(); + }); + self.add("pressed", |harness| { + harness.get_next().hover(); + let rect = harness.get_next().bounding_box().unwrap(); + let pos = Pos2::new( + ((rect.x0 + rect.x1) / 2.0) as f32, + ((rect.y0 + rect.y1) / 2.0) as f32, + ); + harness.input_mut().events.push(Event::PointerButton { + button: PointerButton::Primary, + pos, + pressed: true, + modifiers: Default::default(), + }); + }); + self.add_node("focussed", |node| { + node.focus(); + }); + self.add_disabled(); + } + + fn single_test(&mut self, f: impl FnOnce(&mut Harness<'_>), enabled: bool) -> ColorImage { + let mut harness = Harness::new_ui(|ui| { + egui_extras::install_image_loaders(ui.ctx()); + ui.add_enabled_ui(enabled, |ui| { + (self.w)(ui); + }); + }); + + f(&mut harness); + + harness.fit_contents(); + + while harness.run_ok().is_none() { + std::thread::sleep(Duration::from_millis(10)); + } + + let image = harness.render().expect("Failed to render harness"); + + ColorImage::from_rgba_unmultiplied( + [image.width() as usize, image.height() as usize], + image.as_ref(), + ) + } + + pub fn add(&mut self, name: &str, test: impl FnOnce(&mut Harness<'_>)) { + let image = self.single_test(test, true); + self.results.push((name.to_owned(), image)); + } + + pub fn add_disabled(&mut self) { + let image = self.single_test(|_| {}, false); + self.results.push(("disabled".to_owned(), image)); + } + + pub fn add_node(&mut self, name: &str, test: impl FnOnce(&Node<'_>)) { + self.add(name, |harness| { + let node = harness.get_next(); + test(&node); + }); + } + + pub fn render(self) { + let mut results = Some(self.results); + let mut images: Option> = None; + + let mut harness = Harness::new_ui(|ui| { + let results = images.get_or_insert_with(|| { + results + .take() + .unwrap() + .into_iter() + .map(|(name, image)| { + let size = Vec2::new(image.width() as f32, image.height() as f32); + let texture_handle = + ui.ctx() + .load_texture(name.clone(), image, TextureOptions::default()); + let texture = SizedTexture::new(texture_handle.id(), size); + (name.clone(), texture_handle, texture) + }) + .collect() + }); + + Grid::new("results").show(ui, |ui| { + for (name, _, image) in results { + ui.label(&*name); + + ui.scope(|ui| { + ui.image(*image); + }); + + ui.end_row(); + } + }); + }); + + harness.fit_contents(); + + harness.snapshot(&format!("{}_visuals", self.name)); + } +} + +trait HarnessExt { + fn get_next(&self) -> Node<'_>; +} + +impl HarnessExt for Harness<'_> { + fn get_next(&self) -> Node<'_> { + self.get_all(by()).next().unwrap() + } +} From b8b95b76fc91f197952a77c563c995f81118eb82 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 11:23:31 +0200 Subject: [PATCH 02/10] Add Harness::try_run_async, fix pressed state test, move snapshots around --- crates/egui_kittest/src/lib.rs | 64 ++++++++++++++----- ...button_image_shortcut_selected_visuals.png | 3 - .../button_image_shortcut_visuals.png | 3 - .../tests/snapshots/button_image_visuals.png | 3 - .../tests/snapshots/button_visuals.png | 3 - .../snapshots/checkbox_checked_visuals.png | 3 - .../tests/snapshots/checkbox_visuals.png | 3 - .../{button_layout.png => layout/button.png} | 0 .../button_image.png} | 0 .../button_image_shortcut.png} | 0 .../checkbox.png} | 0 .../checkbox_checked.png} | 0 .../drag_value.png} | 0 .../{radio_layout.png => layout/radio.png} | 0 .../radio_checked.png} | 0 .../selectable_value.png} | 0 .../selectable_value_selected.png} | 0 .../{slider_layout.png => layout/slider.png} | 0 .../text_edit.png} | 0 .../tests/snapshots/radio_checked_visuals.png | 3 - .../tests/snapshots/radio_visuals.png | 3 - .../selectable_value_selected_visuals.png | 3 - .../snapshots/selectable_value_visuals.png | 3 - .../tests/snapshots/visuals/button.png | 3 + .../tests/snapshots/visuals/button_image.png | 3 + .../visuals/button_image_shortcut.png | 3 + .../button_image_shortcut_selected.png | 3 + .../tests/snapshots/visuals/checkbox.png | 3 + .../snapshots/visuals/checkbox_checked.png | 3 + .../drag_value.png} | 0 .../tests/snapshots/visuals/radio.png | 3 + .../tests/snapshots/visuals/radio_checked.png | 3 + .../snapshots/visuals/selectable_value.png | 3 + .../visuals/selectable_value_selected.png | 3 + .../slider.png} | 0 .../text_edit.png} | 0 tests/egui_tests/tests/test_widgets.rs | 18 +++--- 37 files changed, 87 insertions(+), 55 deletions(-) delete mode 100644 tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/button_image_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/button_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/checkbox_visuals.png rename tests/egui_tests/tests/snapshots/{button_layout.png => layout/button.png} (100%) rename tests/egui_tests/tests/snapshots/{button_image_layout.png => layout/button_image.png} (100%) rename tests/egui_tests/tests/snapshots/{button_image_shortcut_layout.png => layout/button_image_shortcut.png} (100%) rename tests/egui_tests/tests/snapshots/{checkbox_layout.png => layout/checkbox.png} (100%) rename tests/egui_tests/tests/snapshots/{checkbox_checked_layout.png => layout/checkbox_checked.png} (100%) rename tests/egui_tests/tests/snapshots/{drag_value_layout.png => layout/drag_value.png} (100%) rename tests/egui_tests/tests/snapshots/{radio_layout.png => layout/radio.png} (100%) rename tests/egui_tests/tests/snapshots/{radio_checked_layout.png => layout/radio_checked.png} (100%) rename tests/egui_tests/tests/snapshots/{selectable_value_layout.png => layout/selectable_value.png} (100%) rename tests/egui_tests/tests/snapshots/{selectable_value_selected_layout.png => layout/selectable_value_selected.png} (100%) rename tests/egui_tests/tests/snapshots/{slider_layout.png => layout/slider.png} (100%) rename tests/egui_tests/tests/snapshots/{text_edit_layout.png => layout/text_edit.png} (100%) delete mode 100644 tests/egui_tests/tests/snapshots/radio_checked_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/radio_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png delete mode 100644 tests/egui_tests/tests/snapshots/selectable_value_visuals.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/button.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/button_image.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/button_image_shortcut.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/button_image_shortcut_selected.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/checkbox.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/checkbox_checked.png rename tests/egui_tests/tests/snapshots/{drag_value_visuals.png => visuals/drag_value.png} (100%) create mode 100644 tests/egui_tests/tests/snapshots/visuals/radio.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/radio_checked.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/selectable_value.png create mode 100644 tests/egui_tests/tests/snapshots/visuals/selectable_value_selected.png rename tests/egui_tests/tests/snapshots/{slider_visuals.png => visuals/slider.png} (100%) rename tests/egui_tests/tests/snapshots/{text_edit_visuals.png => visuals/text_edit.png} (100%) diff --git a/crates/egui_kittest/src/lib.rs b/crates/egui_kittest/src/lib.rs index 59bd5c056ac..544e4f7beb0 100644 --- a/crates/egui_kittest/src/lib.rs +++ b/crates/egui_kittest/src/lib.rs @@ -274,6 +274,7 @@ impl<'a, State> Harness<'a, State> { /// /// See also: /// - [`Harness::try_run`]. + /// - [`Harness::try_run_async`]. /// - [`Harness::run_ok`]. /// - [`Harness::step`]. /// - [`Harness::run_steps`]. @@ -287,22 +288,7 @@ impl<'a, State> Harness<'a, State> { } } - /// Run until - /// - all animations are done - /// - no more repaints are requested - /// - the maximum number of steps is reached (See [`HarnessBuilder::with_max_steps`]) - /// - /// Returns the number of steps that were run. - /// - /// # Errors - /// Returns an error if the maximum number of steps is exceeded. - /// - /// See also: - /// - [`Harness::run`]. - /// - [`Harness::run_ok`]. - /// - [`Harness::step`]. - /// - [`Harness::run_steps`]. - pub fn try_run(&mut self) -> Result { + fn _try_run(&mut self, sleep: bool) -> Result { let mut steps = 0; loop { steps += 1; @@ -310,6 +296,8 @@ impl<'a, State> Harness<'a, State> { // We only care about immediate repaints if self.root_viewport_output().repaint_delay != Duration::ZERO { break; + } else if sleep { + std::thread::sleep(Duration::from_secs_f32(self.step_dt)); } if steps > self.max_steps { return Err(ExceededMaxStepsError { @@ -321,6 +309,26 @@ impl<'a, State> Harness<'a, State> { Ok(steps) } + /// Run until + /// - all animations are done + /// - no more repaints are requested + /// - the maximum number of steps is reached (See [`HarnessBuilder::with_max_steps`]) + /// + /// Returns the number of steps that were run. + /// + /// # Errors + /// Returns an error if the maximum number of steps is exceeded. + /// + /// See also: + /// - [`Harness::run`]. + /// - [`Harness::run_ok`]. + /// - [`Harness::step`]. + /// - [`Harness::run_steps`]. + /// - [`Harness::try_run_async`]. + pub fn try_run(&mut self) -> Result { + self._try_run(false) + } + /// Run until /// - all animations are done /// - no more repaints are requested @@ -333,10 +341,34 @@ impl<'a, State> Harness<'a, State> { /// - [`Harness::try_run`]. /// - [`Harness::step`]. /// - [`Harness::run_steps`]. + /// - [`Harness::try_run_async`]. pub fn run_ok(&mut self) -> Option { self.try_run().ok() } + /// Run multiple frames, sleeping for [`HarnessBuilder::with_step_dt`] between frames. + /// + /// This is useful to e.g. wait for an async operation to complete (e.g. loading of images). + /// Runs until + /// - all animations are done + /// - no more repaints are requested + /// - the maximum number of steps is reached (See [`HarnessBuilder::with_max_steps`]) + /// + /// Returns the number of steps that were run. + /// + /// # Errors + /// Returns an error if the maximum number of steps is exceeded. + /// + /// See also: + /// - [`Harness::run`]. + /// - [`Harness::run_ok`]. + /// - [`Harness::step`]. + /// - [`Harness::run_steps`]. + /// - [`Harness::try_run`]. + pub fn try_run_async(&mut self) -> Result { + self._try_run(true) + } + /// Run a number of steps. /// Equivalent to calling [`Harness::step`] x times. pub fn run_steps(&mut self, steps: usize) { diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png b/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png deleted file mode 100644 index c1937b4b395..00000000000 --- a/tests/egui_tests/tests/snapshots/button_image_shortcut_selected_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:809bdd9df1f5482bb4bc52ca3a430a909b3cfc8ccd5336538735e4be0612a161 -size 12850 diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png b/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png deleted file mode 100644 index d9452bccbb7..00000000000 --- a/tests/egui_tests/tests/snapshots/button_image_shortcut_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc5767d06d62d4d0eab6b5e3fc869c7cd7692cbc5930aa676bd629fd22e16249 -size 13004 diff --git a/tests/egui_tests/tests/snapshots/button_image_visuals.png b/tests/egui_tests/tests/snapshots/button_image_visuals.png deleted file mode 100644 index 9f87853b82d..00000000000 --- a/tests/egui_tests/tests/snapshots/button_image_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0220683ddc2fc85b7dffd55dd33bdacaf34f2967e260399c0ba7424085a56034 -size 10588 diff --git a/tests/egui_tests/tests/snapshots/button_visuals.png b/tests/egui_tests/tests/snapshots/button_visuals.png deleted file mode 100644 index 8f2f99600a4..00000000000 --- a/tests/egui_tests/tests/snapshots/button_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4637d90b1205fdf78f4a29dfaca58f62e90b8510f92a0e4ed3173cd43c77ffb -size 9545 diff --git a/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png b/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png deleted file mode 100644 index 8625bcfb158..00000000000 --- a/tests/egui_tests/tests/snapshots/checkbox_checked_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4447383f700e90b02562506cdf65c9d11700bf76e57cb8e3e9f6bc31c2fc1643 -size 13182 diff --git a/tests/egui_tests/tests/snapshots/checkbox_visuals.png b/tests/egui_tests/tests/snapshots/checkbox_visuals.png deleted file mode 100644 index 67e1521ae1e..00000000000 --- a/tests/egui_tests/tests/snapshots/checkbox_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8305059365106b4364064139372b05cb3f5ebeb75f0316be06929b95d2ab549a -size 12138 diff --git a/tests/egui_tests/tests/snapshots/button_layout.png b/tests/egui_tests/tests/snapshots/layout/button.png similarity index 100% rename from tests/egui_tests/tests/snapshots/button_layout.png rename to tests/egui_tests/tests/snapshots/layout/button.png diff --git a/tests/egui_tests/tests/snapshots/button_image_layout.png b/tests/egui_tests/tests/snapshots/layout/button_image.png similarity index 100% rename from tests/egui_tests/tests/snapshots/button_image_layout.png rename to tests/egui_tests/tests/snapshots/layout/button_image.png diff --git a/tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png similarity index 100% rename from tests/egui_tests/tests/snapshots/button_image_shortcut_layout.png rename to tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png diff --git a/tests/egui_tests/tests/snapshots/checkbox_layout.png b/tests/egui_tests/tests/snapshots/layout/checkbox.png similarity index 100% rename from tests/egui_tests/tests/snapshots/checkbox_layout.png rename to tests/egui_tests/tests/snapshots/layout/checkbox.png diff --git a/tests/egui_tests/tests/snapshots/checkbox_checked_layout.png b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png similarity index 100% rename from tests/egui_tests/tests/snapshots/checkbox_checked_layout.png rename to tests/egui_tests/tests/snapshots/layout/checkbox_checked.png diff --git a/tests/egui_tests/tests/snapshots/drag_value_layout.png b/tests/egui_tests/tests/snapshots/layout/drag_value.png similarity index 100% rename from tests/egui_tests/tests/snapshots/drag_value_layout.png rename to tests/egui_tests/tests/snapshots/layout/drag_value.png diff --git a/tests/egui_tests/tests/snapshots/radio_layout.png b/tests/egui_tests/tests/snapshots/layout/radio.png similarity index 100% rename from tests/egui_tests/tests/snapshots/radio_layout.png rename to tests/egui_tests/tests/snapshots/layout/radio.png diff --git a/tests/egui_tests/tests/snapshots/radio_checked_layout.png b/tests/egui_tests/tests/snapshots/layout/radio_checked.png similarity index 100% rename from tests/egui_tests/tests/snapshots/radio_checked_layout.png rename to tests/egui_tests/tests/snapshots/layout/radio_checked.png diff --git a/tests/egui_tests/tests/snapshots/selectable_value_layout.png b/tests/egui_tests/tests/snapshots/layout/selectable_value.png similarity index 100% rename from tests/egui_tests/tests/snapshots/selectable_value_layout.png rename to tests/egui_tests/tests/snapshots/layout/selectable_value.png diff --git a/tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png similarity index 100% rename from tests/egui_tests/tests/snapshots/selectable_value_selected_layout.png rename to tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png diff --git a/tests/egui_tests/tests/snapshots/slider_layout.png b/tests/egui_tests/tests/snapshots/layout/slider.png similarity index 100% rename from tests/egui_tests/tests/snapshots/slider_layout.png rename to tests/egui_tests/tests/snapshots/layout/slider.png diff --git a/tests/egui_tests/tests/snapshots/text_edit_layout.png b/tests/egui_tests/tests/snapshots/layout/text_edit.png similarity index 100% rename from tests/egui_tests/tests/snapshots/text_edit_layout.png rename to tests/egui_tests/tests/snapshots/layout/text_edit.png diff --git a/tests/egui_tests/tests/snapshots/radio_checked_visuals.png b/tests/egui_tests/tests/snapshots/radio_checked_visuals.png deleted file mode 100644 index 430ff0842fd..00000000000 --- a/tests/egui_tests/tests/snapshots/radio_checked_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ee407f5f0d72fd17dcb684eb74fe30b4c18dedfdb29633343eddbd43cee138a -size 11239 diff --git a/tests/egui_tests/tests/snapshots/radio_visuals.png b/tests/egui_tests/tests/snapshots/radio_visuals.png deleted file mode 100644 index 55a86131d22..00000000000 --- a/tests/egui_tests/tests/snapshots/radio_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2baeda9d22b9b49f0f39cb116f763e9e0752e0740de0df180bbc612355a0a236 -size 10630 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png b/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png deleted file mode 100644 index 6252e354782..00000000000 --- a/tests/egui_tests/tests/snapshots/selectable_value_selected_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34f6d0903380068be7acc58b093eb5c5019d503e46ee2cfdc59557b6839bf0d5 -size 12366 diff --git a/tests/egui_tests/tests/snapshots/selectable_value_visuals.png b/tests/egui_tests/tests/snapshots/selectable_value_visuals.png deleted file mode 100644 index 92d21c9cd8d..00000000000 --- a/tests/egui_tests/tests/snapshots/selectable_value_visuals.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c508716359b61b70f11752e37b34be7999daf12c46d59af0930a25d00e89ebe0 -size 12111 diff --git a/tests/egui_tests/tests/snapshots/visuals/button.png b/tests/egui_tests/tests/snapshots/visuals/button.png new file mode 100644 index 00000000000..8c8e9630c73 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99f64e581b97df6694cb7c85ee7728a955e3c1a851ab660e8b6091eee1885bbe +size 9719 diff --git a/tests/egui_tests/tests/snapshots/visuals/button_image.png b/tests/egui_tests/tests/snapshots/visuals/button_image.png new file mode 100644 index 00000000000..c71c2aeb09d --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/button_image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d39ec25b91f5f5d68305d2cb7cc0285d715fe30ccbd66369efbe7327d1899b52 +size 10753 diff --git a/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut.png b/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut.png new file mode 100644 index 00000000000..42f8ff02a55 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46d86987ba895ead9b28efcc37e1b4374f34eedebac83d1db9eaa8e5a3202ee3 +size 13203 diff --git a/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut_selected.png b/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut_selected.png new file mode 100644 index 00000000000..3ff34c6be99 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/button_image_shortcut_selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09c5904877c8895d3ad41b7082019ef87db40c6a91ad47401bb9b8ac79a62bdc +size 12914 diff --git a/tests/egui_tests/tests/snapshots/visuals/checkbox.png b/tests/egui_tests/tests/snapshots/visuals/checkbox.png new file mode 100644 index 00000000000..a0e6e18d75c --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/checkbox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cd5e9ad416c3a0b6824debc343f196e6db90509fd201c60c7c1f9b022f37c1d +size 12322 diff --git a/tests/egui_tests/tests/snapshots/visuals/checkbox_checked.png b/tests/egui_tests/tests/snapshots/visuals/checkbox_checked.png new file mode 100644 index 00000000000..40852f3c239 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/checkbox_checked.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e03cf99a3d28f73d4a72c0e616dc54198663b94bf5cffda694cf4eb4dee01be8 +size 13445 diff --git a/tests/egui_tests/tests/snapshots/drag_value_visuals.png b/tests/egui_tests/tests/snapshots/visuals/drag_value.png similarity index 100% rename from tests/egui_tests/tests/snapshots/drag_value_visuals.png rename to tests/egui_tests/tests/snapshots/visuals/drag_value.png diff --git a/tests/egui_tests/tests/snapshots/visuals/radio.png b/tests/egui_tests/tests/snapshots/visuals/radio.png new file mode 100644 index 00000000000..9c14f303284 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/radio.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:583fa78f79b39522a44c871642114ead9ed1d177bb8a3807d2c9e2cd89bf0b44 +size 11076 diff --git a/tests/egui_tests/tests/snapshots/visuals/radio_checked.png b/tests/egui_tests/tests/snapshots/visuals/radio_checked.png new file mode 100644 index 00000000000..a42ad5012e7 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/radio_checked.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1a172cfadc91467529e5546e686673be73ba0071a55d55abc7a41fb1d07214d +size 11700 diff --git a/tests/egui_tests/tests/snapshots/visuals/selectable_value.png b/tests/egui_tests/tests/snapshots/visuals/selectable_value.png new file mode 100644 index 00000000000..c2cbd733488 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/selectable_value.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eed80e11dd3ba478217cf004654934214b522ea666074e023dda9a323473615a +size 12452 diff --git a/tests/egui_tests/tests/snapshots/visuals/selectable_value_selected.png b/tests/egui_tests/tests/snapshots/visuals/selectable_value_selected.png new file mode 100644 index 00000000000..81f99551541 --- /dev/null +++ b/tests/egui_tests/tests/snapshots/visuals/selectable_value_selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ef91dfedc74cae59099bce32b2e42cb04649e84442e8010282a9c1ff2a7f2c8 +size 12469 diff --git a/tests/egui_tests/tests/snapshots/slider_visuals.png b/tests/egui_tests/tests/snapshots/visuals/slider.png similarity index 100% rename from tests/egui_tests/tests/snapshots/slider_visuals.png rename to tests/egui_tests/tests/snapshots/visuals/slider.png diff --git a/tests/egui_tests/tests/snapshots/text_edit_visuals.png b/tests/egui_tests/tests/snapshots/visuals/text_edit.png similarity index 100% rename from tests/egui_tests/tests/snapshots/text_edit_visuals.png rename to tests/egui_tests/tests/snapshots/visuals/text_edit.png diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 985954b2bf4..8b9e41190df 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -6,7 +6,6 @@ use egui::{ }; use egui_kittest::kittest::{by, Node, Queryable}; use egui_kittest::Harness; -use std::time::Duration; #[test] fn widget_tests() { @@ -156,7 +155,7 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { }); harness.fit_contents(); - harness.snapshot(&format!("{name}_layout")); + harness.snapshot(&format!("layout/{name}")); } /// Utility to create a snapshot test of the different states of a egui widget. @@ -209,20 +208,21 @@ impl<'a> VisualTests<'a> { } fn single_test(&mut self, f: impl FnOnce(&mut Harness<'_>), enabled: bool) -> ColorImage { - let mut harness = Harness::new_ui(|ui| { + let mut harness = Harness::builder().with_step_dt(0.05).build_ui(|ui| { egui_extras::install_image_loaders(ui.ctx()); ui.add_enabled_ui(enabled, |ui| { (self.w)(ui); }); }); - f(&mut harness); - harness.fit_contents(); - while harness.run_ok().is_none() { - std::thread::sleep(Duration::from_millis(10)); - } + /// Wait for images to load + harness.try_run_async().ok(); + + f(&mut harness); + + harness.step(); let image = harness.render().expect("Failed to render harness"); @@ -285,7 +285,7 @@ impl<'a> VisualTests<'a> { harness.fit_contents(); - harness.snapshot(&format!("{}_visuals", self.name)); + harness.snapshot(&format!("visuals/{}", self.name)); } } From 0f574312003709cfd7137ad5d7017332eae3163c Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 11:26:51 +0200 Subject: [PATCH 03/10] Fix comment --- tests/egui_tests/tests/test_widgets.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 8b9e41190df..f0e1da96fa3 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -217,7 +217,7 @@ impl<'a> VisualTests<'a> { harness.fit_contents(); - /// Wait for images to load + // Wait for images to load harness.try_run_async().ok(); f(&mut harness); From 491342d337d91564564a5c6390507209c2bfbe44 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 11:51:25 +0200 Subject: [PATCH 04/10] Add test for wrapping --- .../tests/snapshots/layout/button.png | 4 +- .../tests/snapshots/layout/button_image.png | 4 +- .../layout/button_image_shortcut.png | 4 +- .../tests/snapshots/layout/checkbox.png | 4 +- .../snapshots/layout/checkbox_checked.png | 4 +- .../tests/snapshots/layout/drag_value.png | 4 +- .../tests/snapshots/layout/radio.png | 4 +- .../tests/snapshots/layout/radio_checked.png | 4 +- .../snapshots/layout/selectable_value.png | 4 +- .../layout/selectable_value_selected.png | 4 +- .../tests/snapshots/layout/slider.png | 4 +- .../tests/snapshots/layout/text_edit.png | 4 +- tests/egui_tests/tests/test_widgets.rs | 47 +++++++++++++++++-- 13 files changed, 68 insertions(+), 27 deletions(-) diff --git a/tests/egui_tests/tests/snapshots/layout/button.png b/tests/egui_tests/tests/snapshots/layout/button.png index 0f6b246988c..244e1409e49 100644 --- a/tests/egui_tests/tests/snapshots/layout/button.png +++ b/tests/egui_tests/tests/snapshots/layout/button.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5094e58c93eb18c9edcb14216c36a47fa1aea25ba9a9810187e543342f70681 -size 305512 +oid sha256:52f468fdc9d2ed199c72163fc3f857cb016d285a8c53e13a6f72452566701dd6 +size 316539 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image.png b/tests/egui_tests/tests/snapshots/layout/button_image.png index 7efd857fbd7..adf5e21af92 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8631e8522e77389f5e726f15ba13f562f82ac5eb4b2c4daabacc520f70776fe1 -size 331063 +oid sha256:24e68ef31ee3bd6bced15963fcf49a95c16d50eb24300c6a88f31dc4233c2cba +size 341761 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png index 3d581ebbb48..25e17c7e1d7 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aeaf22b0c031f6970f5d9d576f8ff9cdacaea099cc7ce2b16d13bfb32a9ee49 -size 396606 +oid sha256:fcd0d5c40835b7f7f9f4c7d2f1bfa532706778d8660146d5a7fee151f8ef49fe +size 410096 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox.png b/tests/egui_tests/tests/snapshots/layout/checkbox.png index 03e83a1fdbb..f19eb86182c 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5246ef7d59bc9a7c064da73f7e6014f79aab0d9ffb6d9e8834908b389e6ae95 -size 374977 +oid sha256:1db05cf1d910629e6016f0307a7d1df471c5956e32f35a49628b43bcf1f4c1d6 +size 389014 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png index bb701df387c..680d43a7b7c 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db9d00abd0f054422911cbdc6bbc0cb563257b9b5deeb795af852e85f195eec2 -size 404141 +oid sha256:1562e840169c1b0875935cb990207cc0f21a9920e1ba60183cc35763329476ec +size 419684 diff --git a/tests/egui_tests/tests/snapshots/layout/drag_value.png b/tests/egui_tests/tests/snapshots/layout/drag_value.png index 659c53442aa..5038c636bfa 100644 --- a/tests/egui_tests/tests/snapshots/layout/drag_value.png +++ b/tests/egui_tests/tests/snapshots/layout/drag_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acbecc3212814745bac866e33d428ca7839468a6d21bc7f8a5d260ab3f141340 -size 230688 +oid sha256:2694e70a9a240c8155ccd87d794073ad2cfb9b9be2be6645c6061d98183c6900 +size 240582 diff --git a/tests/egui_tests/tests/snapshots/layout/radio.png b/tests/egui_tests/tests/snapshots/layout/radio.png index 460ea1ebab6..d4465a29ff6 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio.png +++ b/tests/egui_tests/tests/snapshots/layout/radio.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa88195c48639572902cd92eebebad48a5f0bdd2e22fef177a5e4f93474aed1c -size 326037 +oid sha256:6429889b4c2e1e8b7b5796ae11d922ed531cfdad4f18b16086ac62312bdc4ac9 +size 336822 diff --git a/tests/egui_tests/tests/snapshots/layout/radio_checked.png b/tests/egui_tests/tests/snapshots/layout/radio_checked.png index 5311ed19be0..e6fb721c0e6 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/radio_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4b2cc7d6d2c6c2d84f6ad89aa6d977b5993f1548c83cc6ee8ffb754d52eda1b -size 345185 +oid sha256:beaccc313f5a41a96f54343f4a7ef6ed37aa0ff4e12f7c8f10afcab5519305e5 +size 356590 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value.png b/tests/egui_tests/tests/snapshots/layout/selectable_value.png index 6fd4ce695cf..d6e64706b41 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdc33d431c37e38b7994595680a0907a4c92dd873ddff466d967be3ff30b25b8 -size 377371 +oid sha256:a7f9652a612f18b0f1f36759389b545bbfd6781397cb2e0c9b8dcd3353983eea +size 389964 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png index d77617acdd3..b80d7896811 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83ea0864af3db46d7e0833500a7a0c1660480f830da8667223bad82872d6c347 -size 390547 +oid sha256:fccde916d18952f15841c9ce1e7cb50bddfe60b95cb42ef6f9da844bf79b8b51 +size 403747 diff --git a/tests/egui_tests/tests/snapshots/layout/slider.png b/tests/egui_tests/tests/snapshots/layout/slider.png index 31b540d7381..dd7d61289ad 100644 --- a/tests/egui_tests/tests/snapshots/layout/slider.png +++ b/tests/egui_tests/tests/snapshots/layout/slider.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d30349bb8ff38a3f33ba4ca7dd2d189401d402c7ff70ede3b703a9e3520c782 -size 325085 +oid sha256:3bfa0e98baf3fbac7e6f994436fa595dfadd93ffeaed8f9f863f4ef2e9953b94 +size 337780 diff --git a/tests/egui_tests/tests/snapshots/layout/text_edit.png b/tests/egui_tests/tests/snapshots/layout/text_edit.png index 386525ac285..22d9eed868c 100644 --- a/tests/egui_tests/tests/snapshots/layout/text_edit.png +++ b/tests/egui_tests/tests/snapshots/layout/text_edit.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e02ee9e6c53018dcad31366720fccb5f8864263662cf456f278b0ee6b048f5d -size 224890 +oid sha256:86c85ef8715dc6b60dbaaa5e3cc94dfbb77e4b5db19a9793f9aefd39fa46c015 +size 234074 diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index f0e1da96fa3..d5a4ab62664 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -1,8 +1,8 @@ use egui::load::SizedTexture; use egui::{ include_image, Align, Button, Color32, ColorImage, Direction, DragValue, Event, Grid, Layout, - PointerButton, Pos2, Rect, Response, Slider, Stroke, StrokeKind, TextureHandle, TextureOptions, - Ui, UiBuilder, Vec2, Widget, + PointerButton, Pos2, Rect, Response, Sense, Slider, Stroke, StrokeKind, TextWrapMode, + TextureHandle, TextureOptions, Ui, UiBuilder, Vec2, Widget, }; use egui_kittest::kittest::{by, Node, Queryable}; use egui_kittest::Harness; @@ -110,6 +110,43 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { let mut harness = Harness::builder().build_ui(|ui| { egui_extras::install_image_loaders(ui.ctx()); + + { + let mut wrap_test_size = test_size; + wrap_test_size.x /= 3.0; + ui.heading("Wrapping"); + + let modes = [ + TextWrapMode::Extend, + TextWrapMode::Truncate, + TextWrapMode::Wrap, + ]; + Grid::new("wrapping").show(ui, |ui| { + for mode in &modes { + ui.label(format!("{mode:?}")); + } + ui.end_row(); + + for mode in &modes { + let (_, rect) = ui.allocate_space(wrap_test_size); + + ui.scope_builder(UiBuilder::new().max_rect(rect), |ui| { + ui.style_mut().wrap_mode = Some(*mode); + + w(ui); + }); + + ui.painter().rect_stroke( + rect, + 0.0, + Stroke::new(1.0, Color32::WHITE), + StrokeKind::Outside, + ); + } + }); + } + + ui.heading("Layout"); Grid::new("layout").striped(true).show(ui, |ui| { ui.label(""); for col in &cols { @@ -136,7 +173,11 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { }; let rect = Rect::from_min_size(ui.cursor().min, test_size); - ui.scope_builder(UiBuilder::new().layout(layout).max_rect(rect), |ui| w(ui)); + ui.scope_builder(UiBuilder::new().layout(layout).max_rect(rect), |ui| { + w(ui); + // Ensure we always take the full height + ui.allocate_rect(rect, Sense::hover()); + }); ui.painter().rect_stroke( rect, 0.0, From b5565e66f8c40b2a4d1a9f46107e6208e5d69380 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 11:56:37 +0200 Subject: [PATCH 05/10] Remove add_space workaround --- tests/egui_tests/tests/snapshots/layout/button.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/button_image.png | 4 ++-- .../tests/snapshots/layout/button_image_shortcut.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/checkbox.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/checkbox_checked.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/drag_value.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/radio.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/radio_checked.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/selectable_value.png | 4 ++-- .../tests/snapshots/layout/selectable_value_selected.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/slider.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/text_edit.png | 4 ++-- tests/egui_tests/tests/test_widgets.rs | 4 ---- 13 files changed, 24 insertions(+), 28 deletions(-) diff --git a/tests/egui_tests/tests/snapshots/layout/button.png b/tests/egui_tests/tests/snapshots/layout/button.png index 244e1409e49..ec06204f7ed 100644 --- a/tests/egui_tests/tests/snapshots/layout/button.png +++ b/tests/egui_tests/tests/snapshots/layout/button.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52f468fdc9d2ed199c72163fc3f857cb016d285a8c53e13a6f72452566701dd6 -size 316539 +oid sha256:15409240d95016b665b5e0c79f374c45e951a6a93b1a3939b519dea50bbcd07c +size 315466 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image.png b/tests/egui_tests/tests/snapshots/layout/button_image.png index adf5e21af92..e5a54914923 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24e68ef31ee3bd6bced15963fcf49a95c16d50eb24300c6a88f31dc4233c2cba -size 341761 +oid sha256:fcad6108ffc3d176d390952d602935773dedd79414d45ae251c856ea21a13456 +size 340688 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png index 25e17c7e1d7..13406d04e74 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcd0d5c40835b7f7f9f4c7d2f1bfa532706778d8660146d5a7fee151f8ef49fe -size 410096 +oid sha256:bd312471618889ec6703cd3b0d5a573b923725a767b19c77845d12c52f73c303 +size 409023 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox.png b/tests/egui_tests/tests/snapshots/layout/checkbox.png index f19eb86182c..5d7f8c91f72 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1db05cf1d910629e6016f0307a7d1df471c5956e32f35a49628b43bcf1f4c1d6 -size 389014 +oid sha256:16f54abe11302da7665f2930ce76870cce32b4791aa4c5dd08bdb8ddbdb6a853 +size 387943 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png index 680d43a7b7c..63e9d25c3fb 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1562e840169c1b0875935cb990207cc0f21a9920e1ba60183cc35763329476ec -size 419684 +oid sha256:53e5acc06155194a201c57ec12e77c1c85c57f4810825ca5c1af41d6d7e60a54 +size 418613 diff --git a/tests/egui_tests/tests/snapshots/layout/drag_value.png b/tests/egui_tests/tests/snapshots/layout/drag_value.png index 5038c636bfa..aa042f52077 100644 --- a/tests/egui_tests/tests/snapshots/layout/drag_value.png +++ b/tests/egui_tests/tests/snapshots/layout/drag_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2694e70a9a240c8155ccd87d794073ad2cfb9b9be2be6645c6061d98183c6900 -size 240582 +oid sha256:c412f32dd41a23ff32581122451ad301d91210ec2f04790f3eb8ab2148b984a8 +size 239509 diff --git a/tests/egui_tests/tests/snapshots/layout/radio.png b/tests/egui_tests/tests/snapshots/layout/radio.png index d4465a29ff6..3602f40f8a6 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio.png +++ b/tests/egui_tests/tests/snapshots/layout/radio.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6429889b4c2e1e8b7b5796ae11d922ed531cfdad4f18b16086ac62312bdc4ac9 -size 336822 +oid sha256:4196b671a32bb0d099ac4483dc8ace63ecaa4fc1d88a7b2ba45c2e26f023d420 +size 335751 diff --git a/tests/egui_tests/tests/snapshots/layout/radio_checked.png b/tests/egui_tests/tests/snapshots/layout/radio_checked.png index e6fb721c0e6..87bd8f576a6 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/radio_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:beaccc313f5a41a96f54343f4a7ef6ed37aa0ff4e12f7c8f10afcab5519305e5 -size 356590 +oid sha256:6d16d33e5a6930c6050713d6bd3a1188ab5e40f24439915b35af2c730943bef4 +size 355519 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value.png b/tests/egui_tests/tests/snapshots/layout/selectable_value.png index d6e64706b41..72f3c7fb64b 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7f9652a612f18b0f1f36759389b545bbfd6781397cb2e0c9b8dcd3353983eea -size 389964 +oid sha256:3d290f9f4d89668f3859a05e3ccc06ce4879b5c6da814e1df1628441869c85dc +size 388893 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png index b80d7896811..4a3caf026ed 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fccde916d18952f15841c9ce1e7cb50bddfe60b95cb42ef6f9da844bf79b8b51 -size 403747 +oid sha256:3f04c7a0c7b8229e5d62e0cc5b25bac19f26e220c4df9586af09ae7570595a59 +size 402675 diff --git a/tests/egui_tests/tests/snapshots/layout/slider.png b/tests/egui_tests/tests/snapshots/layout/slider.png index dd7d61289ad..05528245323 100644 --- a/tests/egui_tests/tests/snapshots/layout/slider.png +++ b/tests/egui_tests/tests/snapshots/layout/slider.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3bfa0e98baf3fbac7e6f994436fa595dfadd93ffeaed8f9f863f4ef2e9953b94 -size 337780 +oid sha256:56a07f606f74003866beca873d98a82a97dbf6c636295d610f4c02c6189c7764 +size 336709 diff --git a/tests/egui_tests/tests/snapshots/layout/text_edit.png b/tests/egui_tests/tests/snapshots/layout/text_edit.png index 22d9eed868c..6c8af7ab7d1 100644 --- a/tests/egui_tests/tests/snapshots/layout/text_edit.png +++ b/tests/egui_tests/tests/snapshots/layout/text_edit.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86c85ef8715dc6b60dbaaa5e3cc94dfbb77e4b5db19a9793f9aefd39fa46c015 -size 234074 +oid sha256:699995d3fc24308d273122e7e8de6abc8ba4f40ec7bb2ab361f635e36ac095f1 +size 233003 diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index d5a4ab62664..5cfdbe99b9d 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -189,10 +189,6 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { ui.end_row(); } }); - - // For some reason the bottom is cut off otherwise... - // TODO: Figure out why fit_contents doesn't work as expected - ui.add_space(50.0); }); harness.fit_contents(); From 2517deb6c2344e2e8cc1c57d6f94e4c86965fbdc Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 12:09:33 +0200 Subject: [PATCH 06/10] Fix wrapping labels --- tests/egui_tests/tests/snapshots/layout/button.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/button_image.png | 4 ++-- .../tests/snapshots/layout/button_image_shortcut.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/checkbox.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/checkbox_checked.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/drag_value.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/radio.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/radio_checked.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/selectable_value.png | 4 ++-- .../tests/snapshots/layout/selectable_value_selected.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/slider.png | 4 ++-- tests/egui_tests/tests/snapshots/layout/text_edit.png | 4 ++-- tests/egui_tests/tests/test_widgets.rs | 5 ++++- 13 files changed, 28 insertions(+), 25 deletions(-) diff --git a/tests/egui_tests/tests/snapshots/layout/button.png b/tests/egui_tests/tests/snapshots/layout/button.png index ec06204f7ed..454067ea6c3 100644 --- a/tests/egui_tests/tests/snapshots/layout/button.png +++ b/tests/egui_tests/tests/snapshots/layout/button.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15409240d95016b665b5e0c79f374c45e951a6a93b1a3939b519dea50bbcd07c -size 315466 +oid sha256:4150044eb9f846535c079931304db203cac6d07e67583822ef372dded2f30118 +size 315454 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image.png b/tests/egui_tests/tests/snapshots/layout/button_image.png index e5a54914923..4d302caa7a0 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcad6108ffc3d176d390952d602935773dedd79414d45ae251c856ea21a13456 -size 340688 +oid sha256:19a385feaa5cc9d074461c56fac1383e97f5df7bdcaf5ae556946125cfc9091e +size 341321 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png index 13406d04e74..f49fb93b438 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd312471618889ec6703cd3b0d5a573b923725a767b19c77845d12c52f73c303 -size 409023 +oid sha256:158da8fc978456091ee0c919a89b175f1ab6400a2fae7b0ef41602fc71ca1e92 +size 407990 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox.png b/tests/egui_tests/tests/snapshots/layout/checkbox.png index 5d7f8c91f72..9e291ef3247 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16f54abe11302da7665f2930ce76870cce32b4791aa4c5dd08bdb8ddbdb6a853 -size 387943 +oid sha256:e45d92b3e06bd5379a8d5c50a1c92b95d27c58eae93c166d8daa383fe38efccc +size 385335 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png index 63e9d25c3fb..44b0e2cd34b 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53e5acc06155194a201c57ec12e77c1c85c57f4810825ca5c1af41d6d7e60a54 -size 418613 +oid sha256:ea19625f6eb3002d7a3da95f90897182884211230c58d7ba07b7e74df3fc8e81 +size 415212 diff --git a/tests/egui_tests/tests/snapshots/layout/drag_value.png b/tests/egui_tests/tests/snapshots/layout/drag_value.png index aa042f52077..f6d20dcdd2b 100644 --- a/tests/egui_tests/tests/snapshots/layout/drag_value.png +++ b/tests/egui_tests/tests/snapshots/layout/drag_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c412f32dd41a23ff32581122451ad301d91210ec2f04790f3eb8ab2148b984a8 -size 239509 +oid sha256:1a2e1ca8281d5a45bde6a3ea51bc426be89828ba99b0b506d0bec0b5cf0cc956 +size 239506 diff --git a/tests/egui_tests/tests/snapshots/layout/radio.png b/tests/egui_tests/tests/snapshots/layout/radio.png index 3602f40f8a6..23f08a6dfda 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio.png +++ b/tests/egui_tests/tests/snapshots/layout/radio.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4196b671a32bb0d099ac4483dc8ace63ecaa4fc1d88a7b2ba45c2e26f023d420 -size 335751 +oid sha256:c5df66ca5880748e30d1e3c5a192a1b8c82dcdaf9fd20f2bda9b460cb24c8ea6 +size 335782 diff --git a/tests/egui_tests/tests/snapshots/layout/radio_checked.png b/tests/egui_tests/tests/snapshots/layout/radio_checked.png index 87bd8f576a6..f329fd373c6 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/radio_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d16d33e5a6930c6050713d6bd3a1188ab5e40f24439915b35af2c730943bef4 -size 355519 +oid sha256:1452d9aa8f4cb88a365f387a0624e777482c7245f96389df83e8857f61067045 +size 355577 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value.png b/tests/egui_tests/tests/snapshots/layout/selectable_value.png index 72f3c7fb64b..e16333e0141 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d290f9f4d89668f3859a05e3ccc06ce4879b5c6da814e1df1628441869c85dc -size 388893 +oid sha256:bb9b27611d349831fd78635644d0860010c011bdd3da9f4629ea5201933c425b +size 388900 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png index 4a3caf026ed..091ecd7ff06 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f04c7a0c7b8229e5d62e0cc5b25bac19f26e220c4df9586af09ae7570595a59 -size 402675 +oid sha256:4fd3efce019e7cdf018ce9acdf327c8282c6d7a23393882041990404bd323882 +size 402686 diff --git a/tests/egui_tests/tests/snapshots/layout/slider.png b/tests/egui_tests/tests/snapshots/layout/slider.png index 05528245323..7a39a28c15b 100644 --- a/tests/egui_tests/tests/snapshots/layout/slider.png +++ b/tests/egui_tests/tests/snapshots/layout/slider.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56a07f606f74003866beca873d98a82a97dbf6c636295d610f4c02c6189c7764 -size 336709 +oid sha256:379f4c7d556b6edfe618ec032349e4d1d8188f5837b4cacf369879170d105261 +size 336716 diff --git a/tests/egui_tests/tests/snapshots/layout/text_edit.png b/tests/egui_tests/tests/snapshots/layout/text_edit.png index 6c8af7ab7d1..8b4e3057a15 100644 --- a/tests/egui_tests/tests/snapshots/layout/text_edit.png +++ b/tests/egui_tests/tests/snapshots/layout/text_edit.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:699995d3fc24308d273122e7e8de6abc8ba4f40ec7bb2ab361f635e36ac095f1 -size 233003 +oid sha256:d9aad08171fbe4e947f2d5cb1bca94fa3e990444f95d1d7b56669a480febb4b6 +size 233000 diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 5cfdbe99b9d..9d58a91657f 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -128,12 +128,15 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { ui.end_row(); for mode in &modes { - let (_, rect) = ui.allocate_space(wrap_test_size); + let rect = Rect::from_min_size(ui.cursor().min, wrap_test_size); ui.scope_builder(UiBuilder::new().max_rect(rect), |ui| { ui.style_mut().wrap_mode = Some(*mode); w(ui); + + // Ensure we always take the full height + ui.allocate_rect(rect, Sense::hover()); }); ui.painter().rect_stroke( From bf0ee2e9035026eb5cd80f89efcfadcdef1fb7d6 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 12:36:49 +0200 Subject: [PATCH 07/10] Use SnapshotResults --- tests/egui_tests/tests/test_widgets.rs | 134 ++++++++++++++++--------- 1 file changed, 84 insertions(+), 50 deletions(-) diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 9d58a91657f..152ff3d7868 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -5,27 +5,37 @@ use egui::{ TextureHandle, TextureOptions, Ui, UiBuilder, Vec2, Widget, }; use egui_kittest::kittest::{by, Node, Queryable}; -use egui_kittest::Harness; +use egui_kittest::{Harness, SnapshotResult, SnapshotResults}; #[test] fn widget_tests() { - test_widget("button", |ui| ui.button("Button")); - test_widget("button_image", |ui| { - Button::image_and_text( - include_image!("../../../crates/eframe/data/icon.png"), - "Button", - ) - .ui(ui) - }); - test_widget("button_image_shortcut", |ui| { - Button::image_and_text( - include_image!("../../../crates/eframe/data/icon.png"), - "Open", - ) - .shortcut_text("⌘O") - .ui(ui) - }); - VisualTests::test("button_image_shortcut_selected", |ui| { + let mut results = SnapshotResults::new(); + + test_widget("button", |ui| ui.button("Button"), &mut results); + test_widget( + "button_image", + |ui| { + Button::image_and_text( + include_image!("../../../crates/eframe/data/icon.png"), + "Button", + ) + .ui(ui) + }, + &mut results, + ); + test_widget( + "button_image_shortcut", + |ui| { + Button::image_and_text( + include_image!("../../../crates/eframe/data/icon.png"), + "Open", + ) + .shortcut_text("⌘O") + .ui(ui) + }, + &mut results, + ); + results.add(VisualTests::test("button_image_shortcut_selected", |ui| { Button::image_and_text( include_image!("../../../crates/eframe/data/icon.png"), "Open", @@ -33,39 +43,63 @@ fn widget_tests() { .shortcut_text("⌘O") .selected(true) .ui(ui) - }); - - test_widget("selectable_value", |ui| { - ui.selectable_label(false, "Selectable") - }); - test_widget("selectable_value_selected", |ui| { - ui.selectable_label(true, "Selectable") - }); - - test_widget("checkbox", |ui| ui.checkbox(&mut false, "Checkbox")); - test_widget("checkbox_checked", |ui| ui.checkbox(&mut true, "Checkbox")); - test_widget("radio", |ui| ui.radio(false, "Radio")); - test_widget("radio_checked", |ui| ui.radio(true, "Radio")); - - test_widget("drag_value", |ui| DragValue::new(&mut 12.0).ui(ui)); - - test_widget("text_edit", |ui| { - ui.spacing_mut().text_edit_width = 45.0; - ui.text_edit_singleline(&mut "Hi!".to_owned()) - }); - - test_widget("slider", |ui| { - ui.spacing_mut().slider_width = 45.0; - Slider::new(&mut 12.0, 0.0..=100.0).ui(ui) - }); + })); + + test_widget( + "selectable_value", + |ui| ui.selectable_label(false, "Selectable"), + &mut results, + ); + test_widget( + "selectable_value_selected", + |ui| ui.selectable_label(true, "Selectable"), + &mut results, + ); + + test_widget( + "checkbox", + |ui| ui.checkbox(&mut false, "Checkbox"), + &mut results, + ); + test_widget( + "checkbox_checked", + |ui| ui.checkbox(&mut true, "Checkbox"), + &mut results, + ); + test_widget("radio", |ui| ui.radio(false, "Radio"), &mut results); + test_widget("radio_checked", |ui| ui.radio(true, "Radio"), &mut results); + + test_widget( + "drag_value", + |ui| DragValue::new(&mut 12.0).ui(ui), + &mut results, + ); + + test_widget( + "text_edit", + |ui| { + ui.spacing_mut().text_edit_width = 45.0; + ui.text_edit_singleline(&mut "Hi!".to_owned()) + }, + &mut results, + ); + + test_widget( + "slider", + |ui| { + ui.spacing_mut().slider_width = 45.0; + Slider::new(&mut 12.0, 0.0..=100.0).ui(ui) + }, + &mut results, + ); } -fn test_widget(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { +fn test_widget(name: &str, mut w: impl FnMut(&mut Ui) -> Response, results: &mut SnapshotResults) { test_widget_layout(name, &mut w); VisualTests::test(name, &mut w); } -fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { +fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) -> SnapshotResult { let test_size = Vec2::new(110.0, 45.0); struct Row { @@ -195,7 +229,7 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { }); harness.fit_contents(); - harness.snapshot(&format!("layout/{name}")); + harness.try_snapshot(&format!("layout/{name}")) } /// Utility to create a snapshot test of the different states of a egui widget. @@ -208,10 +242,10 @@ struct VisualTests<'a> { } impl<'a> VisualTests<'a> { - pub fn test(name: &str, mut w: impl FnMut(&mut Ui) -> Response) { + pub fn test(name: &str, mut w: impl FnMut(&mut Ui) -> Response) -> SnapshotResult { let mut vis = VisualTests::new(name, &mut w); vis.add_default_states(); - vis.render(); + vis.render() } pub fn new(name: &str, w: &'a mut dyn FnMut(&mut Ui) -> Response) -> Self { @@ -289,7 +323,7 @@ impl<'a> VisualTests<'a> { }); } - pub fn render(self) { + pub fn render(self) -> SnapshotResult { let mut results = Some(self.results); let mut images: Option> = None; @@ -325,7 +359,7 @@ impl<'a> VisualTests<'a> { harness.fit_contents(); - harness.snapshot(&format!("visuals/{}", self.name)); + harness.try_snapshot(&format!("visuals/{}", self.name)) } } From 5847b77d248cbcb097e913ed4b170a6ef321b256 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 12:44:58 +0200 Subject: [PATCH 08/10] Thank you, clippy! --- tests/egui_tests/tests/test_widgets.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 152ff3d7868..592390106fb 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -95,8 +95,8 @@ fn widget_tests() { } fn test_widget(name: &str, mut w: impl FnMut(&mut Ui) -> Response, results: &mut SnapshotResults) { - test_widget_layout(name, &mut w); - VisualTests::test(name, &mut w); + results.add(test_widget_layout(name, &mut w)); + results.add(VisualTests::test(name, &mut w)); } fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) -> SnapshotResult { From 5865777171c06563e26f46c5b960a93c013a08b5 Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 14:02:37 +0200 Subject: [PATCH 09/10] Make test image size independent of tests --- .../tests/snapshots/layout/button.png | 4 +- .../tests/snapshots/layout/button_image.png | 4 +- .../layout/button_image_shortcut.png | 4 +- .../tests/snapshots/layout/checkbox.png | 4 +- .../snapshots/layout/checkbox_checked.png | 4 +- .../tests/snapshots/layout/drag_value.png | 4 +- .../tests/snapshots/layout/radio.png | 4 +- .../tests/snapshots/layout/radio_checked.png | 4 +- .../snapshots/layout/selectable_value.png | 4 +- .../layout/selectable_value_selected.png | 4 +- .../tests/snapshots/layout/slider.png | 4 +- .../tests/snapshots/layout/text_edit.png | 4 +- tests/egui_tests/tests/test_widgets.rs | 58 +++++++++---------- 13 files changed, 51 insertions(+), 55 deletions(-) diff --git a/tests/egui_tests/tests/snapshots/layout/button.png b/tests/egui_tests/tests/snapshots/layout/button.png index 454067ea6c3..7232c72c834 100644 --- a/tests/egui_tests/tests/snapshots/layout/button.png +++ b/tests/egui_tests/tests/snapshots/layout/button.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4150044eb9f846535c079931304db203cac6d07e67583822ef372dded2f30118 -size 315454 +oid sha256:ccd7bdd86e587bcf0577c92e10ed7c3c35195e37df109a84554ceb30a434768d +size 315482 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image.png b/tests/egui_tests/tests/snapshots/layout/button_image.png index 4d302caa7a0..737f0670cd7 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19a385feaa5cc9d074461c56fac1383e97f5df7bdcaf5ae556946125cfc9091e -size 341321 +oid sha256:975c279d6da2a2cb000df72bf5d9f3bdd200bb20adc00e29e8fd9ed4d2c6f6b1 +size 340923 diff --git a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png index f49fb93b438..7dbda11d974 100644 --- a/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png +++ b/tests/egui_tests/tests/snapshots/layout/button_image_shortcut.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:158da8fc978456091ee0c919a89b175f1ab6400a2fae7b0ef41602fc71ca1e92 -size 407990 +oid sha256:ad14068e60fa678ee749925dd3713ee2b12a83ec1bca9c413bdeb9bc27d8ac20 +size 407795 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox.png b/tests/egui_tests/tests/snapshots/layout/checkbox.png index 9e291ef3247..b8c014727d5 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e45d92b3e06bd5379a8d5c50a1c92b95d27c58eae93c166d8daa383fe38efccc -size 385335 +oid sha256:996e02c1c10a0c76fa295160d117aceb764ef506608b151bafbdf263106dbe57 +size 385129 diff --git a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png index 44b0e2cd34b..66ae8115fc6 100644 --- a/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/checkbox_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea19625f6eb3002d7a3da95f90897182884211230c58d7ba07b7e74df3fc8e81 -size 415212 +oid sha256:aaf9b032037d0708894e568cc8e256b32be9cfb586eaffdc6167143b85562b37 +size 415016 diff --git a/tests/egui_tests/tests/snapshots/layout/drag_value.png b/tests/egui_tests/tests/snapshots/layout/drag_value.png index f6d20dcdd2b..a9a64c55860 100644 --- a/tests/egui_tests/tests/snapshots/layout/drag_value.png +++ b/tests/egui_tests/tests/snapshots/layout/drag_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a2e1ca8281d5a45bde6a3ea51bc426be89828ba99b0b506d0bec0b5cf0cc956 -size 239506 +oid sha256:043be3ece0697ea7114b7bd743e5c958610ae38ac359b6f8120886edff8541d8 +size 239522 diff --git a/tests/egui_tests/tests/snapshots/layout/radio.png b/tests/egui_tests/tests/snapshots/layout/radio.png index 23f08a6dfda..1e1a1faf37a 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio.png +++ b/tests/egui_tests/tests/snapshots/layout/radio.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5df66ca5880748e30d1e3c5a192a1b8c82dcdaf9fd20f2bda9b460cb24c8ea6 -size 335782 +oid sha256:0f7fbeeba8ae9e34c5400727690ac7941e2711f72f2dc23e3342cb06904e4a35 +size 335775 diff --git a/tests/egui_tests/tests/snapshots/layout/radio_checked.png b/tests/egui_tests/tests/snapshots/layout/radio_checked.png index f329fd373c6..323426ee9de 100644 --- a/tests/egui_tests/tests/snapshots/layout/radio_checked.png +++ b/tests/egui_tests/tests/snapshots/layout/radio_checked.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1452d9aa8f4cb88a365f387a0624e777482c7245f96389df83e8857f61067045 -size 355577 +oid sha256:96ae7be40161b0b42959b44c8f72b62fd2cd4b3b463fc7d5bcd02ead445edca1 +size 355550 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value.png b/tests/egui_tests/tests/snapshots/layout/selectable_value.png index e16333e0141..42794b19e09 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb9b27611d349831fd78635644d0860010c011bdd3da9f4629ea5201933c425b -size 388900 +oid sha256:4991fdf58542ca14162cbd7f59b6a30d6c3d752a1215cc1890359bc3a1eb23c9 +size 388912 diff --git a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png index 091ecd7ff06..554bbbf4134 100644 --- a/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png +++ b/tests/egui_tests/tests/snapshots/layout/selectable_value_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fd3efce019e7cdf018ce9acdf327c8282c6d7a23393882041990404bd323882 -size 402686 +oid sha256:4ac8cbcdeed098d52009be77c8815931553d979f5aaf0baf0a9296daf6373605 +size 402699 diff --git a/tests/egui_tests/tests/snapshots/layout/slider.png b/tests/egui_tests/tests/snapshots/layout/slider.png index 7a39a28c15b..9017347f217 100644 --- a/tests/egui_tests/tests/snapshots/layout/slider.png +++ b/tests/egui_tests/tests/snapshots/layout/slider.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:379f4c7d556b6edfe618ec032349e4d1d8188f5837b4cacf369879170d105261 -size 336716 +oid sha256:605091767a73a934981d10d0ed59ff561772ed61e7691303b75b35ae01163ecc +size 336722 diff --git a/tests/egui_tests/tests/snapshots/layout/text_edit.png b/tests/egui_tests/tests/snapshots/layout/text_edit.png index 8b4e3057a15..fae07202c6f 100644 --- a/tests/egui_tests/tests/snapshots/layout/text_edit.png +++ b/tests/egui_tests/tests/snapshots/layout/text_edit.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9aad08171fbe4e947f2d5cb1bca94fa3e990444f95d1d7b56669a480febb4b6 -size 233000 +oid sha256:465e34d94bf734a2a7a1e8e4a71ce64c908c737a7c4fa2a6f812351f2aaa6808 +size 233018 diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index 592390106fb..b5938ca90bb 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -1,8 +1,8 @@ use egui::load::SizedTexture; use egui::{ include_image, Align, Button, Color32, ColorImage, Direction, DragValue, Event, Grid, Layout, - PointerButton, Pos2, Rect, Response, Sense, Slider, Stroke, StrokeKind, TextWrapMode, - TextureHandle, TextureOptions, Ui, UiBuilder, Vec2, Widget, + PointerButton, Pos2, Response, Slider, Stroke, StrokeKind, TextWrapMode, TextureHandle, + TextureOptions, Ui, UiBuilder, Vec2, Widget, }; use egui_kittest::kittest::{by, Node, Queryable}; use egui_kittest::{Harness, SnapshotResult, SnapshotResults}; @@ -155,32 +155,29 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) -> Sna TextWrapMode::Truncate, TextWrapMode::Wrap, ]; - Grid::new("wrapping").show(ui, |ui| { - for mode in &modes { - ui.label(format!("{mode:?}")); - } - ui.end_row(); - - for mode in &modes { - let rect = Rect::from_min_size(ui.cursor().min, wrap_test_size); + Grid::new("wrapping") + .spacing(Vec2::new(test_size.x / 2.0, 4.0)) + .show(ui, |ui| { + for mode in &modes { + ui.label(format!("{mode:?}")); + } + ui.end_row(); - ui.scope_builder(UiBuilder::new().max_rect(rect), |ui| { - ui.style_mut().wrap_mode = Some(*mode); + for mode in &modes { + let (_, rect) = ui.allocate_space(wrap_test_size); - w(ui); + let mut child_ui = ui.new_child(UiBuilder::new().max_rect(rect)); + child_ui.style_mut().wrap_mode = Some(*mode); + w(&mut child_ui); - // Ensure we always take the full height - ui.allocate_rect(rect, Sense::hover()); - }); - - ui.painter().rect_stroke( - rect, - 0.0, - Stroke::new(1.0, Color32::WHITE), - StrokeKind::Outside, - ); - } - }); + ui.painter().rect_stroke( + rect, + 0.0, + Stroke::new(1.0, Color32::WHITE), + StrokeKind::Outside, + ); + } + }); } ui.heading("Layout"); @@ -209,12 +206,11 @@ fn test_widget_layout(name: &str, mut w: impl FnMut(&mut Ui) -> Response) -> Sna main_wrap: false, }; - let rect = Rect::from_min_size(ui.cursor().min, test_size); - ui.scope_builder(UiBuilder::new().layout(layout).max_rect(rect), |ui| { - w(ui); - // Ensure we always take the full height - ui.allocate_rect(rect, Sense::hover()); - }); + let (_, rect) = ui.allocate_space(test_size); + + let mut child_ui = ui.new_child(UiBuilder::new().layout(layout).max_rect(rect)); + w(&mut child_ui); + ui.painter().rect_stroke( rect, 0.0, From 6f7ab41d55d43e2f6a51a9df011e4003f76ae61e Mon Sep 17 00:00:00 2001 From: lucasmerlin Date: Wed, 16 Apr 2025 18:29:35 +0200 Subject: [PATCH 10/10] Rename run_async to run_realtime --- crates/egui_kittest/src/lib.rs | 8 ++++---- tests/egui_tests/tests/test_widgets.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/egui_kittest/src/lib.rs b/crates/egui_kittest/src/lib.rs index 544e4f7beb0..38521d1016a 100644 --- a/crates/egui_kittest/src/lib.rs +++ b/crates/egui_kittest/src/lib.rs @@ -274,7 +274,7 @@ impl<'a, State> Harness<'a, State> { /// /// See also: /// - [`Harness::try_run`]. - /// - [`Harness::try_run_async`]. + /// - [`Harness::try_run_realtime`]. /// - [`Harness::run_ok`]. /// - [`Harness::step`]. /// - [`Harness::run_steps`]. @@ -324,7 +324,7 @@ impl<'a, State> Harness<'a, State> { /// - [`Harness::run_ok`]. /// - [`Harness::step`]. /// - [`Harness::run_steps`]. - /// - [`Harness::try_run_async`]. + /// - [`Harness::try_run_realtime`]. pub fn try_run(&mut self) -> Result { self._try_run(false) } @@ -341,7 +341,7 @@ impl<'a, State> Harness<'a, State> { /// - [`Harness::try_run`]. /// - [`Harness::step`]. /// - [`Harness::run_steps`]. - /// - [`Harness::try_run_async`]. + /// - [`Harness::try_run_realtime`]. pub fn run_ok(&mut self) -> Option { self.try_run().ok() } @@ -365,7 +365,7 @@ impl<'a, State> Harness<'a, State> { /// - [`Harness::step`]. /// - [`Harness::run_steps`]. /// - [`Harness::try_run`]. - pub fn try_run_async(&mut self) -> Result { + pub fn try_run_realtime(&mut self) -> Result { self._try_run(true) } diff --git a/tests/egui_tests/tests/test_widgets.rs b/tests/egui_tests/tests/test_widgets.rs index b5938ca90bb..264b0052f65 100644 --- a/tests/egui_tests/tests/test_widgets.rs +++ b/tests/egui_tests/tests/test_widgets.rs @@ -288,7 +288,7 @@ impl<'a> VisualTests<'a> { harness.fit_contents(); // Wait for images to load - harness.try_run_async().ok(); + harness.try_run_realtime().ok(); f(&mut harness);