aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2021-02-17 15:55:38 +0100
committerGitHub <noreply@github.com>2021-02-17 15:55:38 +0100
commit831d26156eda9d8de24347d6f0d9751127580533 (patch)
treee979c79c9bd8b9d91cf01b746b183af7116a0f37 /src
parentdocs: first documentation step (#185) (diff)
downloadsl0ppij-831d26156eda9d8de24347d6f0d9751127580533.tar.gz
sl0ppij-831d26156eda9d8de24347d6f0d9751127580533.tar.xz
sl0ppij-831d26156eda9d8de24347d6f0d9751127580533.zip
fix(compatibility): get top not to break everything when exiting (#188)
Diffstat (limited to 'src')
-rw-r--r--src/client/panes/grid.rs14
-rw-r--r--src/tests/fixtures/top_and_quitbin0 -> 15909 bytes
-rw-r--r--src/tests/integration/basic.rs1
-rw-r--r--src/tests/integration/compatibility.rs23
-rw-r--r--src/tests/integration/snapshots/zellij__tests__integration__compatibility__top_and_quit.snap61
-rw-r--r--src/tests/utils.rs2
6 files changed, 94 insertions, 7 deletions
diff --git a/src/client/panes/grid.rs b/src/client/panes/grid.rs
index 062b5c3a..6dfc3140 100644
--- a/src/client/panes/grid.rs
+++ b/src/client/panes/grid.rs
@@ -164,7 +164,7 @@ impl Grid {
pub fn new(rows: usize, columns: usize) -> Self {
Grid {
lines_above: vec![],
- viewport: vec![],
+ viewport: vec![Row::new().canonical()],
lines_below: vec![],
cursor: Cursor::new(0, 0),
scroll_region: None,
@@ -553,14 +553,14 @@ impl Grid {
}
}
fn pad_lines_until(&mut self, position: usize) {
- for _ in self.viewport.len()..position {
+ for _ in self.viewport.len()..=position {
self.viewport.push(Row::new().canonical());
}
}
pub fn move_cursor_to(&mut self, x: usize, y: usize) {
- self.cursor.x = x;
- self.cursor.y = y;
- self.pad_lines_until(self.cursor.y + 1);
+ self.cursor.x = std::cmp::min(self.width - 1, x);
+ self.cursor.y = std::cmp::min(self.height - 1, y);
+ self.pad_lines_until(self.cursor.y);
self.pad_current_line_until(self.cursor.x);
}
pub fn move_cursor_up(&mut self, count: usize) {
@@ -664,8 +664,8 @@ impl Grid {
self.pad_current_line_until(self.cursor.x);
}
pub fn move_cursor_to_line(&mut self, line: usize) {
- self.cursor.y = line;
- self.pad_lines_until(self.cursor.y + 1);
+ self.cursor.y = std::cmp::min(self.height - 1, line);
+ self.pad_lines_until(self.cursor.y);
self.pad_current_line_until(self.cursor.x);
}
pub fn replace_with_empty_chars(&mut self, count: usize, empty_char_style: CharacterStyles) {
diff --git a/src/tests/fixtures/top_and_quit b/src/tests/fixtures/top_and_quit
new file mode 100644
index 00000000..4b710cc6
--- /dev/null
+++ b/src/tests/fixtures/top_and_quit
Binary files differ
diff --git a/src/tests/integration/basic.rs b/src/tests/integration/basic.rs
index bf932813..75108955 100644
--- a/src/tests/integration/basic.rs
+++ b/src/tests/integration/basic.rs
@@ -8,6 +8,7 @@ use crate::tests::utils::commands::{
SPLIT_RIGHT_IN_PANE_MODE, TOGGLE_ACTIVE_TERMINAL_FULLSCREEN_IN_PANE_MODE,
};
use crate::tests::utils::{get_next_to_last_snapshot, get_output_frame_snapshots};
+use crate::utils::logging::debug_log_to_file;
use crate::{start, CliArgs};
fn get_fake_os_input(fake_win_size: &PositionAndSize) -> FakeInputOutput {
diff --git a/src/tests/integration/compatibility.rs b/src/tests/integration/compatibility.rs
index 37149bc9..213d2bbb 100644
--- a/src/tests/integration/compatibility.rs
+++ b/src/tests/integration/compatibility.rs
@@ -484,3 +484,26 @@ pub fn emacs_longbuf() {
get_next_to_last_snapshot(snapshots).expect("could not find snapshot");
assert_snapshot!(snapshot_before_quit);
}
+
+#[test]
+pub fn top_and_quit() {
+ let fake_win_size = PositionAndSize {
+ columns: 235,
+ rows: 56,
+ x: 0,
+ y: 0,
+ };
+ let fixture_name = "top_and_quit";
+ let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
+ fake_input_output.add_terminal_input(&[&COMMAND_TOGGLE, &QUIT]);
+ start(Box::new(fake_input_output.clone()), CliArgs::default());
+ let output_frames = fake_input_output
+ .stdout_writer
+ .output_frames
+ .lock()
+ .unwrap();
+ let snapshots = get_output_frame_snapshots(&output_frames, &fake_win_size);
+ let snapshot_before_quit =
+ get_next_to_last_snapshot(snapshots).expect("could not find snapshot");
+ assert_snapshot!(snapshot_before_quit);
+}
diff --git a/src/tests/integration/snapshots/zellij__tests__integration__compatibility__top_and_quit.snap b/src/tests/integration/snapshots/zellij__tests__integration__compatibility__top_and_quit.snap
new file mode 100644
index 00000000..1c4e16df
--- /dev/null
+++ b/src/tests/integration/snapshots/zellij__tests__integration__compatibility__top_and_quit.snap
@@ -0,0 +1,61 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot_before_quit
+
+---
+Tasks: 158 total, 1 running, 157 sleeping, 0 stopped, 0 zombie
+%Cpu(s): 24.2 us, 1.6 sy, 0.0 ni, 74.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
+MiB Mem : 15715.1 total, 7001.4 free, 2163.7 used, 6549.9 buff/cache
+MiB Swap: 16384.0 total, 16384.0 free, 0.0 used. 12809.8 avail Mem
+
+ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
+ 15838 aram 20 0 7275240 56912 18964 S 73.3 0.4 0:17.79 zellij
+ 12653 aram 20 0 39032 22164 14372 S 20.0 0.1 0:00.63 urxvt
+ 1477 aram 20 0 3178660 301992 203236 S 6.7 1.9 3:49.82 Web Content
+ 1 root 20 0 175360 11532 8596 S 0.0 0.1 0:05.90 systemd
+ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
+ 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
+ 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
+ 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
+ 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
+ 9 root 20 0 0 0 0 S 0.0 0.0 0:01.24 ksoftirqd/0
+ 10 root -2 0 0 0 0 S 0.0 0.0 0:00.00 rcuc/0
+ 11 root -2 0 0 0 0 I 0.0 0.0 0:06.12 rcu_preempt
+ 12 root -2 0 0 0 0 S 0.0 0.0 0:00.00 rcub/0
+ 13 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
+ 14 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
+ 16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
+ 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
+ 18 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
+ 19 root rt 0 0 0 0 S 0.0 0.0 0:00.35 migration/1
+ 20 root -2 0 0 0 0 S 0.0 0.0 0:00.00 rcuc/1
+ 21 root 20 0 0 0 0 S 0.0 0.0 0:00.49 ksoftirqd/1
+ 23 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-kblockd
+ 24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
+ 25 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/2
+ 26 root rt 0 0 0 0 S 0.0 0.0 0:00.39 migration/2
+ 27 root -2 0 0 0 0 S 0.0 0.0 0:00.00 rcuc/2
+ 28 root 20 0 0 0 0 S 0.0 0.0 0:00.99 ksoftirqd/2
+ 30 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-kblockd
+ 31 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3
+ 32 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/3
+ 33 root rt 0 0 0 0 S 0.0 0.0 0:00.43 migration/3
+ 34 root -2 0 0 0 0 S 0.0 0.0 0:00.00 rcuc/3
+ 35 root 20 0 0 0 0 S 0.0 0.0 0:00.90 ksoftirqd/3
+ 37 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/3:0H-kblockd
+ 38 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
+ 39 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
+ 40 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_kthre
+ 41 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
+ 44 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
+ 45 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
+ 46 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
+ 47 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
+ 48 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
+ 49 root 39 19 0 0 0 S 0.0 0.0 0:00.00 khugepaged
+ 137 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
+ 138 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
+ 139 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio
+ 140 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ata_sff
+ 141 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 edac-poller
+⋊> ~/c/zellij on fix-top ⨯ █ 13:00:53
diff --git a/src/tests/utils.rs b/src/tests/utils.rs
index 587d36fd..08c87cbf 100644
--- a/src/tests/utils.rs
+++ b/src/tests/utils.rs
@@ -1,6 +1,8 @@
use crate::panes::PositionAndSize;
use crate::panes::TerminalPane;
+use crate::utils::logging::debug_log_to_file;
+
pub fn get_output_frame_snapshots(
output_frames: &[Vec<u8>],
win_size: &PositionAndSize,