aboutsummaryrefslogtreecommitdiff
path: root/src/layout
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
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')
-rw-r--r--src/layout/tests.rs397
-rw-r--r--src/layout/tests/fullscreen.rs397
2 files changed, 398 insertions, 396 deletions
diff --git a/src/layout/tests.rs b/src/layout/tests.rs
index 83cb47c2..dc628198 100644
--- a/src/layout/tests.rs
+++ b/src/layout/tests.rs
@@ -12,6 +12,7 @@ use smithay::utils::Rectangle;
use super::*;
mod animations;
+mod fullscreen;
impl<W: LayoutElement> Default for Layout<W> {
fn default() -> Self {
@@ -2186,39 +2187,6 @@ fn move_workspace_to_output() {
}
#[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 open_right_of_on_different_workspace() {
let ops = [
Op::AddOutput(1),
@@ -2294,95 +2262,6 @@ fn open_right_of_on_different_workspace_ewaf() {
}
#[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 removing_all_outputs_preserves_empty_named_workspaces() {
let ops = [
Op::AddOutput(1),
@@ -2522,39 +2401,6 @@ fn one_window_in_column_becomes_weight_1() {
}
#[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 fixed_height_takes_max_non_auto_into_account() {
let ops = [
Op::AddOutput(1),
@@ -3365,146 +3211,6 @@ fn preset_column_width_reset_after_set_width() {
}
#[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 move_column_to_workspace_unfocused_with_multiple_monitors() {
let ops = [
Op::AddOutput(1),
@@ -3568,107 +3274,6 @@ fn move_column_to_workspace_unfocused_with_multiple_monitors() {
}
#[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);
-}
-
-#[test]
fn move_column_to_workspace_down_focus_false_on_floating_window() {
let ops = [
Op::AddOutput(1),
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);
+}