diff options
Diffstat (limited to 'src/layout/tests.rs')
| -rw-r--r-- | src/layout/tests.rs | 113 |
1 files changed, 93 insertions, 20 deletions
diff --git a/src/layout/tests.rs b/src/layout/tests.rs index 349f95d7..4ac5aaf7 100644 --- a/src/layout/tests.rs +++ b/src/layout/tests.rs @@ -473,9 +473,9 @@ enum Op { #[proptest(strategy = "0..=4usize")] workspace_idx: usize, }, - MoveColumnToWorkspaceDown, - MoveColumnToWorkspaceUp, - MoveColumnToWorkspace(#[proptest(strategy = "0..=4usize")] usize), + MoveColumnToWorkspaceDown(bool), + MoveColumnToWorkspaceUp(bool), + MoveColumnToWorkspace(#[proptest(strategy = "0..=4usize")] usize, bool), MoveWorkspaceDown, MoveWorkspaceUp, MoveWorkspaceToIndex { @@ -508,7 +508,13 @@ enum Op { #[proptest(strategy = "proptest::option::of(0..=4usize)")] target_ws_idx: Option<usize>, }, - MoveColumnToOutput(#[proptest(strategy = "1..=5usize")] usize), + MoveColumnToOutput { + #[proptest(strategy = "1..=5usize")] + output_id: usize, + #[proptest(strategy = "proptest::option::of(0..=4usize)")] + target_ws_idx: Option<usize>, + activate: bool, + }, SwitchPresetColumnWidth, SwitchPresetWindowWidth { #[proptest(strategy = "proptest::option::of(1..=5usize)")] @@ -1074,9 +1080,9 @@ impl Op { let window_id = window_id.filter(|id| layout.has_window(id)); layout.move_to_workspace(window_id.as_ref(), workspace_idx, ActivateWindow::Smart); } - Op::MoveColumnToWorkspaceDown => layout.move_column_to_workspace_down(), - Op::MoveColumnToWorkspaceUp => layout.move_column_to_workspace_up(), - Op::MoveColumnToWorkspace(idx) => layout.move_column_to_workspace(idx), + Op::MoveColumnToWorkspaceDown(focus) => layout.move_column_to_workspace_down(focus), + Op::MoveColumnToWorkspaceUp(focus) => layout.move_column_to_workspace_up(focus), + Op::MoveColumnToWorkspace(idx, focus) => layout.move_column_to_workspace(idx, focus), Op::MoveWindowToOutput { window_id, output_id: id, @@ -1097,13 +1103,17 @@ impl Op { ActivateWindow::Smart, ); } - Op::MoveColumnToOutput(id) => { + Op::MoveColumnToOutput { + output_id: id, + target_ws_idx, + activate, + } => { let name = format!("output{id}"); let Some(output) = layout.outputs().find(|o| o.name() == name).cloned() else { return; }; - layout.move_column_to_output(&output); + layout.move_column_to_output(&output, target_ws_idx, activate); } Op::MoveWorkspaceDown => layout.move_workspace_down(), Op::MoveWorkspaceUp => layout.move_workspace_up(), @@ -1560,10 +1570,10 @@ fn operations_dont_panic() { window_id: None, workspace_idx: 2, }, - Op::MoveColumnToWorkspaceDown, - Op::MoveColumnToWorkspaceUp, - Op::MoveColumnToWorkspace(1), - Op::MoveColumnToWorkspace(2), + Op::MoveColumnToWorkspaceDown(true), + Op::MoveColumnToWorkspaceUp(true), + Op::MoveColumnToWorkspace(1, true), + Op::MoveColumnToWorkspace(2, true), Op::MoveWindowDown, Op::MoveWindowDownOrToWorkspaceDown, Op::MoveWindowUp, @@ -1735,11 +1745,11 @@ fn operations_from_starting_state_dont_panic() { window_id: None, workspace_idx: 3, }, - Op::MoveColumnToWorkspaceDown, - Op::MoveColumnToWorkspaceUp, - Op::MoveColumnToWorkspace(1), - Op::MoveColumnToWorkspace(2), - Op::MoveColumnToWorkspace(3), + Op::MoveColumnToWorkspaceDown(true), + Op::MoveColumnToWorkspaceUp(true), + Op::MoveColumnToWorkspace(1, true), + Op::MoveColumnToWorkspace(2, true), + Op::MoveColumnToWorkspace(3, true), Op::MoveWindowDown, Op::MoveWindowDownOrToWorkspaceDown, Op::MoveWindowUp, @@ -2058,8 +2068,8 @@ fn workspace_transfer_during_switch_gets_cleaned_up() { }, Op::RemoveOutput(1), Op::AddOutput(2), - Op::MoveColumnToWorkspaceDown, - Op::MoveColumnToWorkspaceDown, + Op::MoveColumnToWorkspaceDown(true), + Op::MoveColumnToWorkspaceDown(true), Op::AddOutput(1), ]; @@ -3355,6 +3365,69 @@ fn interactive_resize_on_pending_unfullscreen_column() { } #[test] +fn move_column_to_workspace_unfocused_with_multiple_monitors() { + let ops = [ + Op::AddOutput(1), + Op::SetWorkspaceName { + new_ws_name: 101, + ws_name: None, + }, + Op::AddWindow { + params: TestWindowParams::new(1), + }, + Op::FocusWorkspaceDown, + Op::SetWorkspaceName { + new_ws_name: 102, + ws_name: None, + }, + Op::AddWindow { + params: TestWindowParams::new(2), + }, + Op::AddOutput(2), + Op::FocusOutput(2), + Op::SetWorkspaceName { + new_ws_name: 201, + ws_name: None, + }, + Op::AddWindow { + params: TestWindowParams::new(3), + }, + Op::AddWindow { + params: TestWindowParams::new(4), + }, + Op::MoveColumnToOutput { + output_id: 1, + target_ws_idx: Some(0), + activate: false, + }, + Op::FocusOutput(1), + ]; + + let layout = check_ops(&ops); + + assert_eq!(layout.active_workspace().unwrap().name().unwrap(), "ws102"); + + for (mon, win) in layout.windows() { + let mon = mon.unwrap(); + let ws = mon + .workspaces + .iter() + .find(|w| w.has_window(win.id())) + .unwrap(); + + assert_eq!( + ws.name().unwrap(), + match win.id() { + 1 | 4 => "ws101", + 2 => "ws102", + 3 => "ws201", + _ => unreachable!(), + } + ); + } +} + +#[test] fn interactive_move_unfullscreen_to_floating_stops_dnd_scroll() { let ops = [ Op::AddOutput(3), |
