diff options
| author | Brooks Rady <b.j.rady@gmail.com> | 2021-08-28 17:46:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-28 17:46:24 +0100 |
| commit | 76a5bc8a05c33fb3f46cff1ce95aa1af694b9927 (patch) | |
| tree | aa0c9e4b317d9d01906d11817b3b57f0047d7be8 /src | |
| parent | fix(plugin): fix set_timeout() host function (diff) | |
| download | sl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.tar.gz sl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.tar.xz sl0ppij-76a5bc8a05c33fb3f46cff1ce95aa1af694b9927.zip | |
feat(ui): overhauled resize and layout systems
* refactor(panes): move to parametric pane sizes
* Fixed the simpler errors by casting to usize
* The least I can do is pass the formatting check...
* Move to stable toolchain
* Well, it compiles?
* And now it doesn't! ;)
* Baseline functionality with the new Dimension type
* Working POC for percent-based resizing
* REVERT THIS COMMIT β DELETES TESTS
* Perfected the discrete resize algorithm
* Fixed fixed-size panes
* Basic bidirectional resize
* feat(resize): finalised parametric resize algorithm
* Reduce the logging level a bit
* Fixed nested layouts using percents
* Bug squishing for implicit sizing
* Here is a funky (read: rubbish) rounding approach
* And now it's gone again!
* Improve discretisation algorithm to fix rounding errors
* Fix the last layout bug (maybe?)
* Mixed explicit and implied percents work now
* Let's pretend that didn't happen...
* Make things a bit less crashy
* Crash slightly more for now (to find bugs)
* Manaually splitting of panes works now
* Start moving to percent-based resizes
* Everything but fullscreen seems to be working
* Fix compilatation errors
* Culled a massive amount of border code
* Why not pause to please rustfmt?
* Turns out I was still missing a few tests...
* Bringing back even more tests!
* Fix tests and pane boarders
* Fix the resize system without gaps
* Fix content offset
* Fixed a bug with pane closing
* Add a hack to fix setting of the viewport
* Fix toggling between shared borders and frames
* fix(tests): make e2e properly use PaneGeom
* style(fmt): make rustfmt happy
* Revert unintentional rounding of borders
* Purge some old borderless stuff
* Fix busted tab-bar shrinking
* Update E2E tests
* Finish implementing fullscreen!
* Don't crash anymore?
* Fix (almost) all tests
* Fix a lack of tab-stops
* All tests passing
* I really can't be bothered to debug a CI issue
* Tie up loose ends
* Knock out some lingering FIXMEs
* Continue to clean things up
* Change some naming and address FIXMEs
* Cull more code + FIXMEs
* Refactor of the resize system + polish
* Only draw frames when absolutely necessary
* Fix the tab-bar crash
* Fix rendering of boarders on reattach
* Fix resizing at small pane sizes
* Deduplicate code in the layout system
* Update tab-bar WASM
* Fixed the pinching of panes during resize
* Unexpose needlessly public type
* Add back a lost test
* Re-add tab tests and get them to compile
* All tabs need layouts
* Start fixing tests + bug in main
* Stabilize the resize algorithm rounding
* All tests from main are now passing
* Cull more dead code
Diffstat (limited to 'src')
16 files changed, 451 insertions, 526 deletions
diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs index d28ae2f7..2e09b53f 100644 --- a/src/tests/e2e/cases.rs +++ b/src/tests/e2e/cases.rs @@ -1,7 +1,7 @@ #![allow(unused)] use ::insta::assert_snapshot; -use zellij_utils::{pane_size::PositionAndSize, position::Position}; +use zellij_utils::{pane_size::Size, position::Position}; use rand::Rng; @@ -71,19 +71,16 @@ pub fn normal_mouse_report(position: Position, button: u8) -> Vec<u8> { #[test] #[ignore] pub fn starts_with_one_terminal() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("starts_with_one_terminal", fake_win_size, None) + let last_snapshot = RemoteRunner::new("starts_with_one_terminal", fake_win_size) .add_step(Step { name: "Wait for app to load", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { step_is_complete = true; } @@ -97,20 +94,17 @@ pub fn starts_with_one_terminal() { #[test] #[ignore] pub fn split_terminals_vertically() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size, None) + let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -139,23 +133,16 @@ pub fn split_terminals_vertically() { #[test] #[ignore] pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() { - let fake_win_size = PositionAndSize { - cols: 8, - rows: 20, - x: 0, - y: 0, - ..Default::default() - }; + let fake_win_size = Size { cols: 8, rows: 20 }; let last_snapshot = RemoteRunner::new( "cannot_split_terminals_vertically_when_active_terminal_is_too_small", fake_win_size, - None, ) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) { + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); // back to normal mode after split @@ -178,7 +165,7 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() { name: "Wait for text to appear", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(5, 2) && remote_terminal.snapshot_contains("Hi!") + if remote_terminal.cursor_position_is(6, 2) && remote_terminal.snapshot_contains("Hi!") { step_is_complete = true; } @@ -192,19 +179,16 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() { #[test] #[ignore] pub fn scrolling_inside_a_pane() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane", fake_win_size, None) + let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -279,19 +263,16 @@ pub fn scrolling_inside_a_pane() { #[test] #[ignore] pub fn toggle_pane_fullscreen() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("toggle_pane_fullscreen", fake_win_size, None) + let last_snapshot = RemoteRunner::new("toggle_pane_fullscreen", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -321,7 +302,7 @@ pub fn toggle_pane_fullscreen() { name: "Wait for pane to become fullscreen", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(2, 2) { + if remote_terminal.cursor_position_is(3, 2) { // cursor is in full screen pane now step_is_complete = true; } @@ -335,19 +316,16 @@ pub fn toggle_pane_fullscreen() { #[test] #[ignore] pub fn open_new_tab() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("open_new_tab", fake_win_size, None) + let last_snapshot = RemoteRunner::new("open_new_tab", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -377,7 +355,7 @@ pub fn open_new_tab() { name: "Wait for new tab to open", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(2, 2) + if remote_terminal.cursor_position_is(3, 2) && remote_terminal.tip_appears() && remote_terminal.snapshot_contains("Tab #2") && remote_terminal.status_bar_appears() @@ -395,19 +373,16 @@ pub fn open_new_tab() { #[test] #[ignore] pub fn close_pane() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("close_pane", fake_win_size, None) + let last_snapshot = RemoteRunner::new("close_pane", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -437,7 +412,7 @@ pub fn close_pane() { name: "Wait for pane to close", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(2, 2) && remote_terminal.tip_appears() { + if remote_terminal.cursor_position_is(3, 2) && remote_terminal.tip_appears() { // cursor is in the original pane step_is_complete = true; } @@ -451,19 +426,16 @@ pub fn close_pane() { #[test] #[ignore] pub fn exit_zellij() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("exit_zellij", fake_win_size, None) + let last_snapshot = RemoteRunner::new("exit_zellij", fake_win_size) .add_step(Step { name: "Wait for app to load", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&QUIT); step_is_complete = true; @@ -490,19 +462,16 @@ pub fn exit_zellij() { #[test] #[ignore] pub fn closing_last_pane_exits_zellij() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("closing_last_pane_exits_zellij", fake_win_size, None) + let last_snapshot = RemoteRunner::new("closing_last_pane_exits_zellij", fake_win_size) .add_step(Step { name: "Close pane", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&CLOSE_PANE_IN_PANE_MODE); @@ -528,19 +497,16 @@ pub fn closing_last_pane_exits_zellij() { #[test] #[ignore] pub fn resize_pane() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("resize_pane", fake_win_size, None) + let last_snapshot = RemoteRunner::new("resize_pane", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -570,7 +536,7 @@ pub fn resize_pane() { name: "Wait for pane to be resized", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(53, 2) && remote_terminal.tip_appears() { + if remote_terminal.cursor_position_is(57, 2) && remote_terminal.tip_appears() { // pane has been resized step_is_complete = true; } @@ -584,19 +550,16 @@ pub fn resize_pane() { #[test] #[ignore] pub fn lock_mode() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("lock_mode", fake_win_size, None) + let last_snapshot = RemoteRunner::new("lock_mode", fake_win_size) .add_step(Step { name: "Enter lock mode", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&LOCK_MODE); step_is_complete = true; @@ -621,7 +584,7 @@ pub fn lock_mode() { name: "Wait for terminal to render sent keys", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(6, 2) { + if remote_terminal.cursor_position_is(7, 2) { // text has been entered into the only terminal pane step_is_complete = true; } @@ -636,19 +599,16 @@ pub fn lock_mode() { #[ignore] pub fn resize_terminal_window() { // this checks the resizing of the whole terminal window (reaction to SIGWINCH) and not just one pane - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("resize_terminal_window", fake_win_size, None) + let last_snapshot = RemoteRunner::new("resize_terminal_window", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -675,7 +635,7 @@ pub fn resize_terminal_window() { name: "wait for terminal to be resized and app to be re-rendered", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(43, 2) && remote_terminal.tip_appears() { + if remote_terminal.cursor_position_is(53, 2) && remote_terminal.tip_appears() { // size has been changed step_is_complete = true; } @@ -689,98 +649,87 @@ pub fn resize_terminal_window() { #[test] #[ignore] pub fn detach_and_attach_session() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let session_id = rand::thread_rng().gen_range(0..10000); - let session_name = format!("session_{}", session_id); - let last_snapshot = RemoteRunner::new( - "detach_and_attach_session", - fake_win_size, - Some(session_name), - ) - .add_step(Step { - name: "Split pane to the right", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) { - remote_terminal.send_key(&PANE_MODE); - remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); - // back to normal mode after split - remote_terminal.send_key(&ENTER); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Send some text to the active pane", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { - // new pane has been opened and focused - remote_terminal.send_key(&"I am some text".as_bytes()); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Detach session", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(77, 2) { - remote_terminal.send_key(&SESSION_MODE); - remote_terminal.send_key(&DETACH_IN_SESSION_MODE); - // text has been entered - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Reattach session", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if !remote_terminal.status_bar_appears() { - // we don't see the toolbar, so we can assume we've already detached - remote_terminal.attach_to_original_session(); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Wait for session to be attached", - instruction: |remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(77, 2) { - // we're back inside the session - step_is_complete = true; - } - step_is_complete - }, - }) - .run_all_steps(); + let last_snapshot = RemoteRunner::new("detach_and_attach_session", fake_win_size) + .add_step(Step { + name: "Split pane to the right", + 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); + remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); + // back to normal mode after split + remote_terminal.send_key(&ENTER); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Send some text to the active pane", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { + // new pane has been opened and focused + remote_terminal.send_key(&"I am some text".as_bytes()); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Detach session", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(77, 2) { + remote_terminal.send_key(&SESSION_MODE); + remote_terminal.send_key(&DETACH_IN_SESSION_MODE); + // text has been entered + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Reattach session", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if !remote_terminal.status_bar_appears() { + // we don't see the toolbar, so we can assume we've already detached + remote_terminal.attach_to_original_session(); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Wait for session to be attached", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(77, 2) { + // we're back inside the session + step_is_complete = true; + } + step_is_complete + }, + }) + .run_all_steps(); assert_snapshot!(last_snapshot); } #[test] #[ignore] pub fn accepts_basic_layout() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; let layout_file_name = "three-panes-with-nesting.yaml"; - let last_snapshot = RemoteRunner::new_with_layout("accepts_basic_layout", fake_win_size, layout_file_name, None) + let last_snapshot = RemoteRunner::new_with_layout("accepts_basic_layout", fake_win_size, layout_file_name) .add_step(Step { name: "Wait for app to load", instruction: |remote_terminal: RemoteTerminal| -> bool { @@ -800,20 +749,17 @@ pub fn accepts_basic_layout() { #[test] #[ignore] fn focus_pane_with_mouse() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size, None) + let last_snapshot = RemoteRunner::new("split_terminals_vertically", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(2, 2) + if remote_terminal.status_bar_appears() && remote_terminal.cursor_position_is(3, 2) { remote_terminal.send_key(&PANE_MODE); remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); @@ -853,103 +799,95 @@ fn focus_pane_with_mouse() { #[test] #[ignore] pub fn scrolling_inside_a_pane_with_mouse() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = - RemoteRunner::new("scrolling_inside_a_pane_with_mouse", fake_win_size, None) - .add_step(Step { - name: "Split pane to the right", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.status_bar_appears() - && remote_terminal.cursor_position_is(2, 2) - { - remote_terminal.send_key(&PANE_MODE); - remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); - // back to normal mode after split - remote_terminal.send_key(&ENTER); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Fill terminal with text", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { - // cursor is in the newly opened second pane - remote_terminal.send_key(&format!("{:0<56}", "line1 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line2 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line3 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line4 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line5 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line6 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line7 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line8 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line9 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line10 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line11 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line12 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line13 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line14 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line15 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line16 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line17 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line18 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<58}", "line19 ").as_bytes()); - remote_terminal.send_key(&format!("{:0<57}", "line20 ").as_bytes()); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Scroll up inside pane", - instruction: |mut remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(118, 20) { - // all lines have been written to the pane - remote_terminal.send_key(&normal_mouse_report(Position::new(2, 64), 64)); - step_is_complete = true; - } - step_is_complete - }, - }) - .add_step(Step { - name: "Wait for scroll to finish", - instruction: |remote_terminal: RemoteTerminal| -> bool { - let mut step_is_complete = false; - if remote_terminal.cursor_position_is(118, 20) - && remote_terminal.snapshot_contains("line1 ") - { - // scrolled up one line - step_is_complete = true; - } - step_is_complete - }, - }) - .run_all_steps(); + let last_snapshot = RemoteRunner::new("scrolling_inside_a_pane_with_mouse", fake_win_size) + .add_step(Step { + name: "Split pane to the right", + 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); + remote_terminal.send_key(&SPLIT_RIGHT_IN_PANE_MODE); + // back to normal mode after split + remote_terminal.send_key(&ENTER); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Fill terminal with text", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { + // cursor is in the newly opened second pane + remote_terminal.send_key(&format!("{:0<56}", "line1 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line2 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line3 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line4 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line5 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line6 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line7 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line8 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line9 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line10 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line11 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line12 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line13 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line14 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line15 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line16 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line17 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line18 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<58}", "line19 ").as_bytes()); + remote_terminal.send_key(&format!("{:0<57}", "line20 ").as_bytes()); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Scroll up inside pane", + instruction: |mut remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(118, 20) { + // all lines have been written to the pane + remote_terminal.send_key(&normal_mouse_report(Position::new(2, 64), 64)); + step_is_complete = true; + } + step_is_complete + }, + }) + .add_step(Step { + name: "Wait for scroll to finish", + instruction: |remote_terminal: RemoteTerminal| -> bool { + let mut step_is_complete = false; + if remote_terminal.cursor_position_is(118, 20) + && remote_terminal.snapshot_contains("line1 ") + { + // scrolled up one line + step_is_complete = true; + } + step_is_complete + }, + }) + .run_all_steps(); assert_snapshot!(last_snapshot); } #[test] #[ignore] pub fn start_without_pane_frames() { - let fake_win_size = PositionAndSize { + let fake_win_size = Size { cols: 120, rows: 24, - x: 0, - y: 0, - ..Default::default() }; - let last_snapshot = RemoteRunner::new_without_frames("no_pane_frames", fake_win_size, None) + let last_snapshot = RemoteRunner::new_without_frames("no_pane_frames", fake_win_size) .add_step(Step { name: "Split pane to the right", instruction: |mut remote_terminal: RemoteTerminal| -> bool { diff --git a/src/tests/e2e/remote_runner.rs b/src/tests/e2e/remote_runner.rs index 819bee86..de9c35ed 100644 --- a/src/tests/e2e/remote_runner.rs +++ b/src/tests/e2e/remote_runner.rs @@ -1,7 +1,7 @@ use zellij_tile::data::Palette; -use zellij_utils::pane_size::PositionAndSize; use zellij_server::panes::TerminalPane; +use zellij_utils::pane_size::{Dimension, PaneGeom, Size}; use zellij_utils::{vte, zellij_tile}; use ssh2::Session; @@ -15,6 +15,7 @@ const ZELLIJ_LAYOUT_PATH: &str = "/usr/src/zellij/fixtures/layouts"; const CONNECTION_STRING: &str = "127.0.0.1:2222"; const CONNECTION_USERNAME: &str = "test"; const CONNECTION_PASSWORD: &str = "test"; +const SESSION_NAME: &str = "e2e-test"; fn ssh_connect() -> ssh2::Session { let tcp = TcpStream::connect(CONNECTION_STRING).unwrap(); @@ -27,7 +28,7 @@ fn ssh_connect() -> ssh2::Session { sess } -fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: PositionAndSize) { +fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: Size) { let (columns, rows) = (win_size.cols as u32, win_size.rows as u32); channel .request_pty("xterm", None, Some((columns, rows, 0, 0))) @@ -39,60 +40,51 @@ fn setup_remote_environment(channel: &mut ssh2::Channel, win_size: PositionAndSi channel.flush().unwrap(); } -fn start_zellij(channel: &mut ssh2::Channel, session_name: Option<&String>) { - match session_name.as_ref() { - Some(name) => { - channel - .write_all( - format!("{} --session {}\n", ZELLIJ_EXECUTABLE_LOCATION, name).as_bytes(), - ) - .unwrap(); - } - None => { - channel - .write_all(format!("{}\n", ZELLIJ_EXECUTABLE_LOCATION).as_bytes()) - .unwrap(); - } - }; +fn stop_zellij(channel: &mut ssh2::Channel) { + channel + .write_all("killall -KILL zellij\n".as_bytes()) + .unwrap(); +} + +fn start_zellij(channel: &mut ssh2::Channel) { + stop_zellij(channel); + channel + .write_all( + format!( + "{} --session {}\n", + ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME + ) + .as_bytes(), + ) + .unwrap(); channel.flush().unwrap(); } fn start_zellij_without_frames(channel: &mut ssh2::Channel) { + stop_zellij(channel); channel - .write_all(format!("{} options --no-pane-frames\n", ZELLIJ_EXECUTABLE_LOCATION).as_bytes()) + .write_all( + format!( + "{} --session {} options --no-pane-frames\n", + ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME + ) + .as_bytes(), + ) .unwrap(); channel.flush().unwrap(); } -fn start_zellij_with_layout( - channel: &mut ssh2::Channel, - layout_path: &str, - session_name: Option<&String>, -) { - match session_name.as_ref() { - Some(name) => { - channel - .write_all( - format!( - "{} --layout-path {} --session {}\n", - ZELLIJ_EXECUTABLE_LOCATION, layout_path, name - ) - .as_bytes(), - ) - .unwrap(); - } - None => { - channel - .write_all( - format!( - "{} --layout-path {}\n", - ZELLIJ_EXECUTABLE_LOCATION, layout_path - ) - .as_bytes(), - ) - .unwrap(); - } - }; +fn start_zellij_with_layout(channel: &mut ssh2::Channel, layout_path: &str) { + stop_zellij(channel); + channel + .write_all( + format!( + "{} --layout-path {} --session {}\n", + ZELLIJ_EXECUTABLE_LOCATION, layout_path, SESSION_NAME + ) + .as_bytes(), + ) + .unwrap(); channel.flush().unwrap(); } @@ -119,7 +111,6 @@ pub fn take_snapshot(terminal_output: &mut TerminalPane) -> String { pub struct RemoteTerminal<'a> { channel: &'a mut ssh2::Channel, - session_name: Option<&'a String>, cursor_x: usize, cursor_y: usize, current_snapshot: String, @@ -174,12 +165,7 @@ impl<'a> RemoteTerminal<'a> { pub fn attach_to_original_session(&mut self) { self.channel .write_all( - format!( - "{} attach {}\n", - ZELLIJ_EXECUTABLE_LOCATION, - self.session_name.unwrap() - ) - .as_bytes(), + format!("{} attach {}\n", ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME).as_bytes(), ) .unwrap(); self.channel.flush().unwrap(); @@ -198,33 +184,37 @@ pub struct RemoteRunner { vte_parser: vte::Parser, terminal_output: TerminalPane, channel: ssh2::Channel, - session_name: Option<String>, test_name: &'static str, currently_running_step: Option<String>, retries_left: usize, - win_size: PositionAndSize, + win_size: Size, layout_file_name: Option<&'static str>, without_frames: bool, } impl RemoteRunner { - pub fn new( - test_name: &'static str, - win_size: PositionAndSize, - session_name: Option<String>, - ) -> Self { + pub fn new(test_name: &'static str, win_size: Size) -> Self { let sess = ssh_connect(); let mut channel = sess.channel_session().unwrap(); let vte_parser = vte::Parser::new(); - let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index + let mut rows = Dimension::fixed(win_size.rows); + let mut cols = Dimension::fixed(win_size.cols); + rows.set_inner(win_size.rows); + cols.set_inner(win_size.cols); + let pane_geom = PaneGeom { + x: 0, + y: 0, + rows, + cols, + }; + let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index setup_remote_environment(&mut channel, win_size); - start_zellij(&mut channel, session_name.as_ref()); + start_zellij(&mut channel); RemoteRunner { steps: vec![], channel, terminal_output, vte_parser, - session_name, test_name, currently_running_step: None, current_step_index: 0, @@ -234,15 +224,21 @@ impl RemoteRunner { without_frames: false, } } - pub fn new_without_frames( - test_name: &'static str, - win_size: PositionAndSize, - session_name: Option<String>, - ) -> Self { + pub fn new_without_frames(test_name: &'static str, win_size: Size) -> Self { let sess = ssh_connect(); let mut channel = sess.channel_session().unwrap(); let vte_parser = vte::Parser::new(); - let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index + let mut rows = Dimension::fixed(win_size.rows); + let mut cols = Dimension::fixed(win_size.cols); + rows.set_inner(win_size.rows); + cols.set_inner(win_size.cols); + let pane_geom = PaneGeom { + x: 0, + y: 0, + rows, + cols, + }; + let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index setup_remote_environment(&mut channel, win_size); start_zellij_without_frames(&mut channel); RemoteRunner { @@ -250,7 +246,6 @@ impl RemoteRunner { channel, terminal_output, vte_parser, - session_name, test_name, currently_running_step: None, current_step_index: 0, @@ -262,27 +257,31 @@ impl RemoteRunner { } pub fn new_with_layout( test_name: &'static str, - win_size: PositionAndSize, + win_size: Size, layout_file_name: &'static str, - session_name: Option<String>, ) -> Self { let remote_path = Path::new(ZELLIJ_LAYOUT_PATH).join(layout_file_name); let sess = ssh_connect(); let mut channel = sess.channel_session().unwrap(); let vte_parser = vte::Parser::new(); - let terminal_output = TerminalPane::new(0, win_size, Palette::default(), 0); // 0 is the pane index + let mut rows = Dimension::fixed(win_size.rows); + let mut cols = Dimension::fixed(win_size.cols); + rows.set_inner(win_size.rows); + cols.set_inner(win_size.cols); + let pane_geom = PaneGeom { + x: 0, + y: 0, + rows, + cols, + }; + let terminal_output = TerminalPane::new(0, pane_geom, Palette::default(), 0); // 0 is the pane index setup_remote_environment(&mut channel, win_size); - start_zellij_with_layout( - &mut channel, - &remote_path.to_string_lossy(), - session_name.as_ref(), - ); + start_zellij_with_layout(&mut channel, &remote_path.to_string_lossy()); RemoteRunner { steps: vec![], channel, terminal_output, vte_parser, - session_name, test_name, currently_running_step: None, current_step_index: 0, @@ -307,7 +306,6 @@ impl RemoteRunner { cursor_y, current_snapshot, channel: &mut self.channel, - session_name: self.session_name.as_ref(), } } pub fn run_next_step(&mut self) { @@ -319,7 +317,6 @@ impl RemoteRunner { cursor_y, current_snapshot, channel: &mut self.channel, - session_name: self.session_name.as_ref(), }; let instruction = next_step.instruction; self.currently_running_step = Some(String::from(next_step.name)); @@ -332,32 +329,22 @@ impl RemoteRunner { self.steps.get(self.current_step_index).is_some() } fn restart_test(&mut self) -> String { - let session_name = self.session_name.as_ref().map(|name| { - // this is so that we don't try to connect to the previous session if it's still stuck - // inside the container - format!("{}_{}", name, self.retries_left) - }); if let Some(layout_file_name) = self.layout_file_name.as_ref() { // let mut new_runner = RemoteRunner::new_with_layout(self.test_name, self.win_size, Path::new(&local_layout_path), session_name); - let mut new_runner = RemoteRunner::new_with_layout( - self.test_name, - self.win_size, - layout_file_name, - session_name, - ); + let mut new_runner = + RemoteRunner::new_with_layout(self.test_name, self.win_size, layout_file_name); new_runner.retries_left = self.retries_left - 1; new_runner.replace_steps(self.steps.clone()); drop(std::mem::replace(self, new_runner)); self.run_all_steps() } else if self.without_frames { - let mut new_runner = - RemoteRunner::new_without_frames(self.test_name, self.win_size, session_name); + let mut new_runner = RemoteRunner::new_without_frames(self.test_name, self.win_size); new_runner.retries_left = self.retries_left - 1; new_runner.replace_steps(self.steps.clone()); drop(std::mem::replace(self, new_runner)); self.run_all_steps() } else { - let mut new_runner = RemoteRunner::new(self.test_name, self.win_size, session_name); + let mut new_runner = RemoteRunner::new(self.test_name, self.win_size); new_runner.retries_left = self.retries_left - 1; new_runner.replace_steps(self.steps.clone()); drop(std::mem::replace(self, new_runner)); diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap index 91c83a44..d37f23e3 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap @@ -3,23 +3,23 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - -ββββββββ -$ Hi!β - - - - - - - - - - - - - - - + Zellij +ββββββββ +β$ Hi!ββ +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββ Ctrl +ξ° diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap index e7487028..af676286 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -$ β - - - - - - - - - - - - - - - - - - - + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap index 92484dd6..65ebb338 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββ β$ ββ$ I am some textβ β β ββ β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap index 5a409760..3578cf5e 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββ β$ β ββ$ β β ββ β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap index 0796484c..cf59dc66 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -$ nabcβ - - - - - - - - - - - - - - - - - - - + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ nabcβ β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° -- INTERFACE LOCKED -- diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap index f9b84f68..ca19eb01 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ°ξ° Tab #2 ξ° -β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -$ β - - - - - - - - - - - - - - - - - - - + Zellij (e2e-test) ξ° Tab #1 ξ°ξ° Tab #2 ξ° +β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap index ae130ab5..4220c0c8 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #1 βββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -β$ ββ$ β β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ ββ$ β β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap index b329e8c6..6eea2929 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #1 βββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββ -β$ ββ$ β β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -β ββ β -ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #1 βββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββ +β$ ββ$ β β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +β ββ β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap index a33ab400..f9f23c1c 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββββββββ Pane #2 βββββββββββββββββββββββββββββββββββ SCROLL: 1/1 β β$ ββ$ line1 00000000000000000000000000000000000000000000000000β β ββline2 0000000000000000000000000000000000000000000000000000β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap index dfed0611..5ad40ae7 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββββββββ Pane #2 βββββββββββββββββββββββββββββββββββ SCROLL: 1/1 β β$ ββ$ line1 00000000000000000000000000000000000000000000000000β β ββline2 0000000000000000000000000000000000000000000000000000β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap index 36f0e6d8..b1f54404 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° β Pane #1 βββββββββββββββββββββββββββββββββββββββββββββββββββ Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββ β$ ββ$ β β β ββ β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap index 85c6db54..21f47e56 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap @@ -3,7 +3,7 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° + Zellij (e2e-test) ξ° Tab #1 ξ° $ β$ β β β diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap index e7487028..af676286 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -$ β - - - - - - - - - - - - - - - - - - - + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #1 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap index 9108099d..347b0a70 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap @@ -3,27 +3,27 @@ source: src/tests/e2e/cases.rs expression: last_snapshot --- - Zellij ξ° Tab #1 ξ° -β Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -$ β - - - - - - - - - - - - - - - - - - - + Zellij (e2e-test) ξ° Tab #1 ξ° +β Pane #2 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ +β$ β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +β β +ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Ctrl +ξ°ξ° <g> LOCK ξ°ξ° <p> PANE ξ°ξ° <t> TAB ξ°ξ° <r> RESIZE ξ°ξ° <s> SCROLL ξ°ξ° <o> SESSION ξ°ξ° <q> QUIT ξ° Tip: Alt + n => open new pane. Alt + [] or hjkl => navigate between panes. |
