diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-09-02 16:46:38 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-09-17 22:04:23 +0300 |
| commit | 5357db39cde8fc04bcc88042e7b4933a5f1ed483 (patch) | |
| tree | db85fbccaf1823ea98a14ce972e261f7b884b521 /src/layout | |
| parent | 08f5c6fecb3c5c81d63a0bf7248c85ae3299a4a5 (diff) | |
| download | niri-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.rs | 397 | ||||
| -rw-r--r-- | src/layout/tests/fullscreen.rs | 397 |
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); +} |
