aboutsummaryrefslogtreecommitdiff
path: root/src/tests/layer_shell.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-06-15 12:37:42 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-07-13 12:59:01 +0300
commitce501bca9e753093170123ed62ae7bb6796a8255 (patch)
tree73652e63a8d1c00fe1cd49cedfd8133573c03720 /src/tests/layer_shell.rs
parent45e9bb769d7bc1db89a0867484c6b560a7b25cf9 (diff)
downloadniri-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.rs90
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");
+}