aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2020-12-21 11:52:49 +0100
committerGitHub <noreply@github.com>2020-12-21 11:52:49 +0100
commit4436c8923068ad0d3edd42172514aabd006b169a (patch)
tree7778ca58b6b056ffc51904066ff1457a8ab2546a /src
parentrefactor(tabs): lay down infrastructure for status bar (#116) (diff)
downloadsl0ppij-4436c8923068ad0d3edd42172514aabd006b169a.tar.gz
sl0ppij-4436c8923068ad0d3edd42172514aabd006b169a.tar.xz
sl0ppij-4436c8923068ad0d3edd42172514aabd006b169a.zip
fix(compatibility): git log and git diff with scrollup (#118)
* fix(compatibility): git log and git diff with scrollup * style(formatting): make rustfmt happy
Diffstat (limited to 'src')
-rw-r--r--src/terminal_pane/scroll.rs46
-rw-r--r--src/tests/fixtures/git_diff_scrollupbin0 -> 5174 bytes
-rw-r--r--src/tests/fixtures/git_logbin0 -> 2196 bytes
-rw-r--r--src/tests/integration/compatibility.rs48
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-2.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-3.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-2.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-3.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-2.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-3.snap32
-rw-r--r--src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log.snap32
13 files changed, 364 insertions, 18 deletions
diff --git a/src/terminal_pane/scroll.rs b/src/terminal_pane/scroll.rs
index 20f98da0..6301c7c1 100644
--- a/src/terminal_pane/scroll.rs
+++ b/src/terminal_pane/scroll.rs
@@ -661,7 +661,7 @@ impl Scroll {
pub fn move_current_buffer_to_alternative_buffer(&mut self) {
self.alternative_buffer = Some(self.canonical_lines.drain(..).collect());
self.alternative_cursor_position = Some(self.cursor_position);
- self.cursor_position.reset();
+ self.clear_all();
}
pub fn override_current_buffer_with_alternative_buffer(&mut self) {
if let Some(alternative_buffer) = self.alternative_buffer.as_mut() {
@@ -691,6 +691,19 @@ impl Scroll {
Some((self.scroll_region.unwrap().0, self.scroll_region.unwrap().1))
}
}
+ fn scroll_region_absolute_indices_or_screen_edges(&mut self) -> (usize, usize) {
+ match self.scroll_region {
+ Some(_scroll_region) => self.scroll_region_absolute_indices().unwrap(),
+ None => {
+ // indices of screen top and bottom edge
+ // TODO: what if we don't have enough lines?
+ // let absolute_top = self.canonical_lines.len() - 1 - self.lines_in_view;
+ let absolute_top = self.canonical_lines.len() - self.lines_in_view;
+ let absolute_bottom = self.canonical_lines.len() - 1;
+ (absolute_top, absolute_bottom)
+ }
+ }
+ }
pub fn delete_lines_in_scroll_region(&mut self, count: usize) {
if let Some((scroll_region_top, scroll_region_bottom)) =
self.scroll_region_absolute_indices()
@@ -732,23 +745,20 @@ impl Scroll {
}
}
pub fn move_cursor_up_in_scroll_region(&mut self, count: usize) {
- if let Some((scroll_region_top, scroll_region_bottom)) =
- self.scroll_region_absolute_indices()
- {
- // the scroll region indices start at 1, so we need to adjust them
- for _ in 0..count {
- let current_canonical_line_index = self.cursor_position.line_index.0;
- if current_canonical_line_index == scroll_region_top {
- // if we're at the top line, we create a new line and remove the last line that
- // would otherwise overflow
- self.canonical_lines.remove(scroll_region_bottom);
- self.canonical_lines
- .insert(current_canonical_line_index, CanonicalLine::new());
- } else if current_canonical_line_index > scroll_region_top
- && current_canonical_line_index <= scroll_region_bottom
- {
- self.move_cursor_up(count);
- }
+ let (scroll_region_top, scroll_region_bottom) =
+ self.scroll_region_absolute_indices_or_screen_edges();
+ for _ in 0..count {
+ let current_canonical_line_index = self.cursor_position.line_index.0;
+ if current_canonical_line_index == scroll_region_top {
+ // if we're at the top line, we create a new line and remove the last line that
+ // would otherwise overflow
+ self.canonical_lines.remove(scroll_region_bottom);
+ self.canonical_lines
+ .insert(current_canonical_line_index, CanonicalLine::new());
+ } else if current_canonical_line_index > scroll_region_top
+ && current_canonical_line_index <= scroll_region_bottom
+ {
+ self.move_cursor_up(count);
}
}
}
diff --git a/src/tests/fixtures/git_diff_scrollup b/src/tests/fixtures/git_diff_scrollup
new file mode 100644
index 00000000..98d06baa
--- /dev/null
+++ b/src/tests/fixtures/git_diff_scrollup
Binary files differ
diff --git a/src/tests/fixtures/git_log b/src/tests/fixtures/git_log
new file mode 100644
index 00000000..9b5bca62
--- /dev/null
+++ b/src/tests/fixtures/git_log
Binary files differ
diff --git a/src/tests/integration/compatibility.rs b/src/tests/integration/compatibility.rs
index 578e8fd2..e42a26fb 100644
--- a/src/tests/integration/compatibility.rs
+++ b/src/tests/integration/compatibility.rs
@@ -413,3 +413,51 @@ pub fn fish_paste_multiline() {
assert_snapshot!(snapshot);
}
}
+
+#[test]
+pub fn git_log() {
+ let fake_win_size = PositionAndSize {
+ columns: 149,
+ rows: 28,
+ x: 0,
+ y: 0,
+ };
+ let fixture_name = "git_log";
+ let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
+ fake_input_output.add_terminal_input(&[&COMMAND_TOGGLE, &COMMAND_TOGGLE, &QUIT]);
+ start(Box::new(fake_input_output.clone()), Opt::default());
+ let output_frames = fake_input_output
+ .stdout_writer
+ .output_frames
+ .lock()
+ .unwrap();
+ let snapshots = get_output_frame_snapshots(&output_frames, &fake_win_size);
+ for snapshot in snapshots {
+ assert_snapshot!(snapshot);
+ }
+}
+
+#[test]
+pub fn git_diff_scrollup() {
+ // this tests makes sure that when we have a git diff that exceeds the screen size
+ // we are able to scroll up
+ let fake_win_size = PositionAndSize {
+ columns: 149,
+ rows: 28,
+ x: 0,
+ y: 0,
+ };
+ let fixture_name = "git_diff_scrollup";
+ let mut fake_input_output = get_fake_os_input(&fake_win_size, fixture_name);
+ fake_input_output.add_terminal_input(&[&COMMAND_TOGGLE, &COMMAND_TOGGLE, &QUIT]);
+ start(Box::new(fake_input_output.clone()), Opt::default());
+ let output_frames = fake_input_output
+ .stdout_writer
+ .output_frames
+ .lock()
+ .unwrap();
+ let snapshots = get_output_frame_snapshots(&output_frames, &fake_win_size);
+ for snapshot in snapshots {
+ assert_snapshot!(snapshot);
+ }
+}
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-2.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-2.snap
new file mode 100644
index 00000000..53a568d5
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-2.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+
+ * wip: doesn't render when new tab is created?
+
+ * wip: doesnt re-render when a new tab is spawned for now
+
+ * wip: tabs now are a BTreeMap and we can switch between them in both directions
+
+ * wip: I think that should also be here
+
+ * wip: cleanup
+
+ * Spawn a new terminal simultaneously with a new tab
+
+ * Ensure proper Opening and Closing of tabs
+
+ * cleanup
+
+ * more cleanup
+
+ * tests(snapshots): add 'loading' snapshot to each scenario
+
+ * fix(tests): update snapshots
+
+ * Add tests for tabs implementation
+
+ * wip: added tests, moved tab related stuff to a separate file
+
+:█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-3.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-3.snap
new file mode 100644
index 00000000..e50d9493
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff-3.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+ * wip: doesn't render when new tab is created?
+
+ * wip: doesnt re-render when a new tab is spawned for now
+
+ * wip: tabs now are a BTreeMap and we can switch between them in both directions
+
+ * wip: I think that should also be here
+
+ * wip: cleanup
+
+ * Spawn a new terminal simultaneously with a new tab
+
+ * Ensure proper Opening and Closing of tabs
+
+ * cleanup
+
+ * more cleanup
+
+ * tests(snapshots): add 'loading' snapshot to each scenario
+
+ * fix(tests): update snapshots
+
+ * Add tests for tabs implementation
+
+ * wip: added tests, moved tab related stuff to a separate file
+
+:
+Bye from Mosaic!█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff.snap
new file mode 100644
index 00000000..739c38e6
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+█
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-2.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-2.snap
new file mode 100644
index 00000000..e1f541c2
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-2.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+
+src/terminal_pane/scroll.rs
+───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────┐
+use crate::terminal_pane::terminal_character::{ │
+────────────────────────────────────────────────┘
+5
+ CharacterStyles, TerminalCharacter, EMPTY_TERMINAL_CHARACTER,
+};
+
+use crate::utils::logging::debug_log_to_file;
+
+/*
+ * Scroll
+ *
+
+──────────────┐
+impl Scroll { │
+──────────────┘
+663
+ pub fn move_current_buffer_to_alternative_buffer(&mut self) {
+ self.alternative_buffer = Some(self.canonical_lines.drain(..).collect());
+ self.alternative_cursor_position = Some(self.cursor_position);
+ self.cursor_position.reset();
+ self.clear_all();
+ }
+:█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-3.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-3.snap
new file mode 100644
index 00000000..ba0e26d4
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup-3.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+src/terminal_pane/scroll.rs
+───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────┐
+use crate::terminal_pane::terminal_character::{ │
+────────────────────────────────────────────────┘
+5
+ CharacterStyles, TerminalCharacter, EMPTY_TERMINAL_CHARACTER,
+};
+
+use crate::utils::logging::debug_log_to_file;
+
+/*
+ * Scroll
+ *
+
+──────────────┐
+impl Scroll { │
+──────────────┘
+663
+ pub fn move_current_buffer_to_alternative_buffer(&mut self) {
+ self.alternative_buffer = Some(self.canonical_lines.drain(..).collect());
+ self.alternative_cursor_position = Some(self.cursor_position);
+ self.cursor_position.reset();
+ self.clear_all();
+ }
+:
+Bye from Mosaic!█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup.snap
new file mode 100644
index 00000000..739c38e6
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_diff_scrollup.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+█
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-2.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-2.snap
new file mode 100644
index 00000000..53a568d5
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-2.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+
+ * wip: doesn't render when new tab is created?
+
+ * wip: doesnt re-render when a new tab is spawned for now
+
+ * wip: tabs now are a BTreeMap and we can switch between them in both directions
+
+ * wip: I think that should also be here
+
+ * wip: cleanup
+
+ * Spawn a new terminal simultaneously with a new tab
+
+ * Ensure proper Opening and Closing of tabs
+
+ * cleanup
+
+ * more cleanup
+
+ * tests(snapshots): add 'loading' snapshot to each scenario
+
+ * fix(tests): update snapshots
+
+ * Add tests for tabs implementation
+
+ * wip: added tests, moved tab related stuff to a separate file
+
+:█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-3.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-3.snap
new file mode 100644
index 00000000..e50d9493
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log-3.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+ * wip: doesn't render when new tab is created?
+
+ * wip: doesnt re-render when a new tab is spawned for now
+
+ * wip: tabs now are a BTreeMap and we can switch between them in both directions
+
+ * wip: I think that should also be here
+
+ * wip: cleanup
+
+ * Spawn a new terminal simultaneously with a new tab
+
+ * Ensure proper Opening and Closing of tabs
+
+ * cleanup
+
+ * more cleanup
+
+ * tests(snapshots): add 'loading' snapshot to each scenario
+
+ * fix(tests): update snapshots
+
+ * Add tests for tabs implementation
+
+ * wip: added tests, moved tab related stuff to a separate file
+
+:
+Bye from Mosaic!█
diff --git a/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log.snap b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log.snap
new file mode 100644
index 00000000..739c38e6
--- /dev/null
+++ b/src/tests/integration/snapshots/mosaic__tests__integration__compatibility__git_log.snap
@@ -0,0 +1,32 @@
+---
+source: src/tests/integration/compatibility.rs
+expression: snapshot
+---
+█
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+