diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-06-15 12:37:42 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-07-13 12:59:01 +0300 |
| commit | ce501bca9e753093170123ed62ae7bb6796a8255 (patch) | |
| tree | 73652e63a8d1c00fe1cd49cedfd8133573c03720 /src/tests/layer_shell.rs | |
| parent | 45e9bb769d7bc1db89a0867484c6b560a7b25cf9 (diff) | |
| download | niri-ce501bca9e753093170123ed62ae7bb6796a8255.tar.gz niri-ce501bca9e753093170123ed62ae7bb6796a8255.tar.bz2 niri-ce501bca9e753093170123ed62ae7bb6796a8255.zip | |
tests: Add layer-shell scaffolding and an overflow test
Diffstat (limited to 'src/tests/layer_shell.rs')
| -rw-r--r-- | src/tests/layer_shell.rs | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/tests/layer_shell.rs b/src/tests/layer_shell.rs new file mode 100644 index 00000000..65014942 --- /dev/null +++ b/src/tests/layer_shell.rs @@ -0,0 +1,90 @@ +use insta::assert_snapshot; +use smithay::reexports::wayland_protocols_wlr::layer_shell::v1::client::zwlr_layer_shell_v1::Layer; +use smithay::reexports::wayland_protocols_wlr::layer_shell::v1::client::zwlr_layer_surface_v1::Anchor; + +use super::*; +use crate::tests::client::{LayerConfigureProps, LayerMargin}; + +#[test] +fn simple_top_anchor() { + let mut f = Fixture::new(); + f.add_output(1, (1920, 1080)); + let id = f.add_client(); + + let layer = f.client(id).create_layer(None, Layer::Top, ""); + let surface = layer.surface.clone(); + layer.set_configure_props(LayerConfigureProps { + anchor: Some(Anchor::Left | Anchor::Right | Anchor::Top), + size: Some((0, 50)), + ..Default::default() + }); + layer.commit(); + f.roundtrip(id); + + let layer = f.client(id).layer(&surface); + layer.attach_new_buffer(); + layer.set_size(100, 100); + layer.ack_last_and_commit(); + f.double_roundtrip(id); + + let layer = f.client(id).layer(&surface); + assert_snapshot!(layer.format_recent_configures(), @"size: 1920 × 50"); +} + +#[test] +fn margin_overflow() { + let mut f = Fixture::new(); + f.add_output(1, (1920, 1080)); + let id = f.add_client(); + + let layer = f.client(id).create_layer(None, Layer::Top, ""); + let surface = layer.surface.clone(); + layer.set_configure_props(LayerConfigureProps { + anchor: Some(Anchor::Left | Anchor::Right | Anchor::Top | Anchor::Bottom), + margin: Some(LayerMargin { + top: i32::MAX, + right: i32::MAX, + bottom: i32::MAX, + left: i32::MAX, + }), + exclusive_zone: Some(i32::MAX), + ..Default::default() + }); + layer.commit(); + f.roundtrip(id); + + let layer = f.client(id).layer(&surface); + layer.attach_new_buffer(); + layer.set_size(100, 100); + layer.ack_last_and_commit(); + f.double_roundtrip(id); + + let layer = f.client(id).layer(&surface); + assert_snapshot!(layer.format_recent_configures(), @"size: 0 × 0"); + + // Add a second one for good measure. + let layer = f.client(id).create_layer(None, Layer::Top, ""); + let surface = layer.surface.clone(); + layer.set_configure_props(LayerConfigureProps { + anchor: Some(Anchor::Left | Anchor::Right | Anchor::Top | Anchor::Bottom), + margin: Some(LayerMargin { + top: i32::MAX, + right: i32::MAX, + bottom: i32::MAX, + left: i32::MAX, + }), + exclusive_zone: Some(i32::MAX), + ..Default::default() + }); + layer.commit(); + f.roundtrip(id); + + let layer = f.client(id).layer(&surface); + layer.attach_new_buffer(); + layer.set_size(100, 100); + layer.ack_last_and_commit(); + f.double_roundtrip(id); + + let layer = f.client(id).layer(&surface); + assert_snapshot!(layer.format_recent_configures(), @"size: 0 × 0"); +} |
