diff options
| author | Aram Drevekenin <aram@poor.dev> | 2024-12-16 16:03:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-16 16:03:20 +0100 |
| commit | dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7 (patch) | |
| tree | 0ae41e8175d2a3fd260b3c510a30502f6386ac7f /src/tests | |
| parent | docs(changelog): multiplayer cursor fix (diff) | |
| download | sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.tar.gz sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.tar.xz sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.zip | |
feat(ux): pin floating panes (#3876)
* working
* ui indication
* add keybinding
* add to plugin panes
* fix with multiple cursors
* toggle with the mouse
* fix e2e tests and add new one
* some cleanups
* add to layouts
* make mouse click more lenient
* allow setting a new floating pane as pinned
* make toggle work throughthe command line
* add to plugin api
* get tests to pass
* style(fmt): rustfmt
Diffstat (limited to 'src/tests')
7 files changed, 157 insertions, 10 deletions
diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs index bb652ef9..e8e30dd7 100644 --- a/src/tests/e2e/cases.rs +++ b/src/tests/e2e/cases.rs @@ -2423,3 +2423,100 @@ pub fn load_plugins_in_background_on_startup() { ); assert_snapshot!(last_snapshot); } + +#[test] +#[ignore] +pub fn pin_floating_panes() { + let fake_win_size = Size { + cols: 120, + rows: 24, + }; + let mut test_attempts = 10; + let last_snapshot = loop { + RemoteRunner::kill_running_sessions(fake_win_size); + let mut runner = RemoteRunner::new(fake_win_size) + .add_step(Step { + name: "Toggle floating panes", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.status_bar_appears() + && remote_terminal.cursor_position_is(3, 2) + { + remote_terminal.send_key(&PANE_MODE); + std::thread::sleep(std::time::Duration::from_millis(100)); + remote_terminal.send_key(&TOGGLE_FLOATING_PANES); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Pin floating pane", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.snapshot_contains("PIN [ ]") { + remote_terminal.send_key(&sgr_mouse_report(Position::new(8, 87), 0)); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Focus underlying pane", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.snapshot_contains("PIN [+]") { + remote_terminal.send_key(&PANE_MODE); + std::thread::sleep(std::time::Duration::from_millis(100)); + remote_terminal.send_key(&TOGGLE_FLOATING_PANES); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Fill tiled pane with text", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(3, 2) { + remote_terminal.load_fixture("e2e/fill_for_pinned_pane"); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Move cursor behind pinned pane", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.snapshot_contains("line") { + remote_terminal + .send_key(&format!(" hide_me").as_bytes().to_vec()); + step_is_complete = true; + } + step_is_complete + }, + }); + + runner.run_all_steps(); + let last_snapshot = runner.take_snapshot_after(Step { + name: "Wait for cursor to be behind pinned pane", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.snapshot_contains("hide") { + // terminal has been filled with fixture text + step_is_complete = true; + } + step_is_complete + }, + }); + if runner.test_timed_out && test_attempts > 0 { + test_attempts -= 1; + continue; + } else { + break last_snapshot; + } + }; + let last_snapshot = account_for_races_in_snapshot(last_snapshot); + assert_snapshot!(last_snapshot); +} diff --git a/src/tests/e2e/remote_runner.rs b/src/tests/e2e/remote_runner.rs index 6b702f01..c2b94cc6 100644 --- a/src/tests/e2e/remote_runner.rs +++ b/src/tests/e2e/remote_runner.rs @@ -456,6 +456,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij(&mut channel); @@ -492,6 +493,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_mirrored_session(&mut channel); @@ -528,6 +530,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_mirrored_session_with_layout(&mut channel, layout_file_name); @@ -567,6 +570,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_mirrored_session_with_layout_and_viewport_serialization( @@ -613,6 +617,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_in_session(&mut channel, session_name, mirrored); @@ -649,6 +654,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); attach_to_existing_session(&mut channel, session_name); @@ -685,6 +691,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_without_frames(&mut channel); @@ -722,6 +729,7 @@ impl RemoteRunner { rows, cols, is_stacked: false, + is_pinned: false, }; setup_remote_environment(&mut channel, win_size); start_zellij_with_config(&mut channel, &remote_path.to_string_lossy()); diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__pin_floating_panes.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__pin_floating_panes.snap new file mode 100644 index 00000000..91233bb1 --- /dev/null +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__pin_floating_panes.snap @@ -0,0 +1,29 @@ +--- +source: src/tests/e2e/cases.rs +assertion_line: 2524 +expression: last_snapshot +--- + Zellij (e2e-test) Tab #1 +┌ Pane #1 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│$ cat /usr/src/zellij/fixtures/e2e/fill_for_pinned_pane │ +│line1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line5aaaaaaaaaaaaaaaaaaaaaaaa┌ Pane #2 ──────────────────────────────────────── PIN [+] ┐aaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line6aaaaaaaaaaaaaaaaaaaaaaaa│$ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line7aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line8aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line9aaaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaa │ +│line10aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│ +│line11aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│ +│line12aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│ +│line13aaaaaaaaaaaaaaaaaaaaaaa│ │aaaaaaaaaaaaaaaaaaaaaaaaaaaaa│ +│$ hide_m│ │ │ +│ └──────────────────────────────────────────────────────────┘ │ +│ │ +│ │ +│ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Ctrl + <g> LOCK <p> PANE <t> TAB <n> RESIZE <h> MOVE <s> SEARCH <o> SESSION <q> QUIT diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session.snap index 857f417d..2cc662bb 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session.snap @@ -1,6 +1,6 @@ --- source: src/tests/e2e/cases.rs -assertion_line: 1191 +assertion_line: 1212 expression: last_snapshot --- Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4 @@ -9,11 +9,11 @@ expression: last_snapshot │ ││ │ │ ││ │ │ ││ │ -│ ┌ Pane #4 ───────────────────────────────────────────────┐ │ +│ ┌ Pane #4 ────────────────────────────────────── PIN [ ] ┐ │ │ │$ │ │ -│ │ ┌ top ───────────────────────────────────────────────────┐ │ +│ │ ┌ top ────────────────────────────────────────── PIN [ ] ┐ │ │ │ │ │ │ -│ │ │ │─┐ │ +│ │ │ │ ┐ │ │ │ │ │ │────────────────────────────┘ │ │ │ Waiting to run: top │ │────────────────────────────┐ │ │ │ │ │ │ diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session_with_viewport_serialization.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session_with_viewport_serialization.snap index dff8858b..0897618d 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session_with_viewport_serialization.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session_with_viewport_serialization.snap @@ -1,6 +1,6 @@ --- source: src/tests/e2e/cases.rs -assertion_line: 1252 +assertion_line: 1273 expression: last_snapshot --- Zellij (e2e-test) Tab #1 Tab #2 Tab #3 Tab #4 @@ -9,11 +9,11 @@ expression: last_snapshot │$ ││$ │ │$ ││$ │ │ ││ │ -│ ┌ Pane #4 ───────────────────────────────────────────────┐ │ +│ ┌ Pane #4 ────────────────────────────────────── PIN [ ] ┐ │ │ │ │ │ -│ │$┌ top ───────────────────────────────────────────────────┐ │ +│ │$┌ top ────────────────────────────────────────── PIN [ ] ┐ │ │ │$│ │ │ -│ │ │ │─┐ │ +│ │ │ │ ┐ │ │ │ │ │ │────────────────────────────┘ │ │ │ Waiting to run: top │ │────────────────────────────┐ │ │ │ │ │ │ diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_floating_panes.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_floating_panes.snap index d5231a04..81bf5771 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_floating_panes.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_floating_panes.snap @@ -1,6 +1,6 @@ --- source: src/tests/e2e/cases.rs -assertion_line: 2027 +assertion_line: 2049 expression: last_snapshot --- Zellij (e2e-test) Tab #1 Alt <[]> STAGGERED @@ -10,7 +10,7 @@ expression: last_snapshot │ │ │ │ │ │ -│ ┌ Pane #2 ─────────────────────────────────────────────────┐ │ +│ ┌ Pane #2 ──────────────────────────────────────── PIN [ ] ┐ │ │ │$ █ │ │ │ │ │ │ │ │ │ │ diff --git a/src/tests/fixtures/e2e/fill_for_pinned_pane b/src/tests/fixtures/e2e/fill_for_pinned_pane new file mode 100644 index 00000000..41b373c2 --- /dev/null +++ b/src/tests/fixtures/e2e/fill_for_pinned_pane @@ -0,0 +1,13 @@ +line1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line10aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line11aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +line13aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
