aboutsummaryrefslogtreecommitdiff
path: root/src/layout/tests/fullscreen.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-09-02 16:46:38 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-09-17 22:04:23 +0300
commit5357db39cde8fc04bcc88042e7b4933a5f1ed483 (patch)
treedb85fbccaf1823ea98a14ce972e261f7b884b521 /src/layout/tests/fullscreen.rs
parent08f5c6fecb3c5c81d63a0bf7248c85ae3299a4a5 (diff)
downloadniri-5357db39cde8fc04bcc88042e7b4933a5f1ed483.tar.gz
niri-5357db39cde8fc04bcc88042e7b4933a5f1ed483.tar.bz2
niri-5357db39cde8fc04bcc88042e7b4933a5f1ed483.zip
layout/tests: Extract fullscreen tests to submodule
Diffstat (limited to 'src/layout/tests/fullscreen.rs')
-rw-r--r--src/layout/tests/fullscreen.rs397
1 files changed, 397 insertions, 0 deletions
diff --git a/src/layout/tests/fullscreen.rs b/src/layout/tests/fullscreen.rs
new file mode 100644
index 00000000..0586bb76
--- /dev/null
+++ b/src/layout/tests/fullscreen.rs
@@ -0,0 +1,397 @@
+use super::*;
+
+#[test]
+fn fullscreen() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::FullscreenWindow(1),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_window_in_column() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::AddWindow {
+ params: TestWindowParams::new(2),
+ },
+ Op::ConsumeOrExpelWindowLeft { id: None },
+ Op::SetFullscreenWindow {
+ window: 2,
+ is_fullscreen: false,
+ },
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_on_removal() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::ConsumeOrExpelWindowRight { id: None },
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_on_consume() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::ConsumeWindowIntoColumn,
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_on_quick_double_toggle() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::FullscreenWindow(0),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_set_on_fullscreening_inactive_tile_in_column() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::ConsumeOrExpelWindowLeft { id: None },
+ Op::FullscreenWindow(0),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_on_gesture() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::FullscreenWindow(1),
+ Op::ViewOffsetGestureBegin {
+ output_idx: 1,
+ workspace_idx: None,
+ is_touchpad: true,
+ },
+ Op::ViewOffsetGestureEnd {
+ is_touchpad: Some(true),
+ },
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn one_window_in_column_becomes_weight_1_after_fullscreen() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::ConsumeOrExpelWindowLeft { id: None },
+ Op::AddWindow {
+ params: TestWindowParams::new(2),
+ },
+ Op::ConsumeOrExpelWindowLeft { id: None },
+ Op::SetWindowHeight {
+ id: None,
+ change: SizeChange::SetFixed(100),
+ },
+ Op::Communicate(2),
+ Op::FocusWindowUp,
+ Op::SetWindowHeight {
+ id: None,
+ change: SizeChange::SetFixed(200),
+ },
+ Op::Communicate(1),
+ Op::CloseWindow(0),
+ Op::FullscreenWindow(1),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn disable_tabbed_mode_in_fullscreen() {
+ let ops = [
+ Op::AddOutput(0),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::ConsumeOrExpelWindowLeft { id: None },
+ Op::ToggleColumnTabbedDisplay,
+ Op::FullscreenWindow(0),
+ Op::ToggleColumnTabbedDisplay,
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_with_large_border() {
+ let ops = [
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::Communicate(0),
+ Op::FullscreenWindow(0),
+ ];
+
+ let options = Options {
+ border: niri_config::Border {
+ off: false,
+ width: niri_config::FloatOrInt(10000.),
+ ..Default::default()
+ },
+ ..Default::default()
+ };
+ check_ops_with_options(options, &ops);
+}
+
+#[test]
+fn fullscreen_to_windowed_fullscreen() {
+ let ops = [
+ Op::AddOutput(0),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::Communicate(0), // Make sure it goes into fullscreen.
+ Op::ToggleWindowedFullscreen(0),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn windowed_fullscreen_to_fullscreen() {
+ let ops = [
+ Op::AddOutput(0),
+ Op::AddWindow {
+ params: TestWindowParams::new(0),
+ },
+ Op::FullscreenWindow(0),
+ Op::Communicate(0), // Commit fullscreen state.
+ Op::ToggleWindowedFullscreen(0), // Switch is_fullscreen() to false.
+ Op::FullscreenWindow(0), // Switch is_fullscreen() back to true.
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn move_pending_unfullscreen_window_out_of_active_column() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::FullscreenWindow(1),
+ Op::Communicate(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(2),
+ },
+ Op::ConsumeWindowIntoColumn,
+ // Window 1 is now pending unfullscreen.
+ // Moving it out should reset view_offset_before_fullscreen.
+ Op::MoveWindowToWorkspaceDown(true),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn move_unfocused_pending_unfullscreen_window_out_of_active_column() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(1),
+ },
+ Op::FullscreenWindow(1),
+ Op::Communicate(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(2),
+ },
+ Op::ConsumeWindowIntoColumn,
+ // Window 1 is now pending unfullscreen.
+ // Moving it out should reset view_offset_before_fullscreen.
+ Op::FocusWindowDown,
+ Op::MoveWindowToWorkspace {
+ window_id: Some(1),
+ workspace_idx: 1,
+ },
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn interactive_resize_on_pending_unfullscreen_column() {
+ let ops = [
+ Op::AddWindow {
+ params: TestWindowParams::new(2),
+ },
+ Op::FullscreenWindow(2),
+ Op::Communicate(2),
+ Op::SetFullscreenWindow {
+ window: 2,
+ is_fullscreen: false,
+ },
+ Op::InteractiveResizeBegin {
+ window: 2,
+ edges: ResizeEdge::RIGHT,
+ },
+ Op::Communicate(2),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn interactive_move_unfullscreen_to_floating_stops_dnd_scroll() {
+ let ops = [
+ Op::AddOutput(3),
+ Op::AddWindow {
+ params: TestWindowParams {
+ is_floating: true,
+ ..TestWindowParams::new(4)
+ },
+ },
+ // This moves the window to tiling.
+ Op::SetFullscreenWindow {
+ window: 4,
+ is_fullscreen: true,
+ },
+ // This starts a DnD scroll since we're dragging a tiled window.
+ Op::InteractiveMoveBegin {
+ window: 4,
+ output_idx: 3,
+ px: 0.0,
+ py: 0.0,
+ },
+ // This will cause the window to unfullscreen to floating, and should stop the DnD scroll
+ // since we're no longer dragging a tiled window, but rather a floating one.
+ Op::InteractiveMoveUpdate {
+ window: 4,
+ dx: 0.0,
+ dy: 15035.31210741684,
+ output_idx: 3,
+ px: 0.0,
+ py: 0.0,
+ },
+ Op::InteractiveMoveEnd { window: 4 },
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_during_dnd_gesture() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(3),
+ },
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ Op::DndUpdate {
+ output_idx: 1,
+ px: 0.0,
+ py: 0.0,
+ },
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_during_gesture() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(3),
+ },
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ Op::ViewOffsetGestureBegin {
+ output_idx: 1,
+ workspace_idx: None,
+ is_touchpad: false,
+ },
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ ];
+
+ check_ops(&ops);
+}
+
+#[test]
+fn unfullscreen_view_offset_not_reset_during_ongoing_gesture() {
+ let ops = [
+ Op::AddOutput(1),
+ Op::AddWindow {
+ params: TestWindowParams::new(3),
+ },
+ Op::ViewOffsetGestureBegin {
+ output_idx: 1,
+ workspace_idx: None,
+ is_touchpad: false,
+ },
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ Op::FullscreenWindow(3),
+ Op::Communicate(3),
+ ];
+
+ check_ops(&ops);
+}