aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/integration/basic.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2020-09-15 11:05:56 +0200
committerAram Drevekenin <aram@poor.dev>2020-09-15 11:05:56 +0200
commitbee097f4e635133f781b1490f4273009c4e5615c (patch)
tree9199b80012849d006cb4b008802e5df79a9d0b5e /src/tests/integration/basic.rs
parenttests(resize): resize right (diff)
downloadsl0ppij-bee097f4e635133f781b1490f4273009c4e5615c.tar.gz
sl0ppij-bee097f4e635133f781b1490f4273009c4e5615c.tar.xz
sl0ppij-bee097f4e635133f781b1490f4273009c4e5615c.zip
tests(restructure): integration folder
Diffstat (limited to 'src/tests/integration/basic.rs')
-rw-r--r--src/tests/integration/basic.rs135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/tests/integration/basic.rs b/src/tests/integration/basic.rs
new file mode 100644
index 00000000..cea78fe2
--- /dev/null
+++ b/src/tests/integration/basic.rs
@@ -0,0 +1,135 @@
+use ::nix::pty::Winsize;
+use ::insta::assert_snapshot;
+
+use crate::{start, TerminalOutput};
+use crate::tests::fakes::{FakeInputOutput};
+
+fn get_fake_os_input (fake_win_size: &Winsize) -> FakeInputOutput {
+ FakeInputOutput::new(fake_win_size.clone())
+}
+
+#[test]
+pub fn starts_with_one_terminal () {
+ let fake_win_size = Winsize { // TODO: combine with above
+ ws_col: 121,
+ ws_row: 20,
+ ws_xpixel: 0,
+ ws_ypixel: 0,
+ };
+ let mut fake_input_output = get_fake_os_input(&fake_win_size);
+ fake_input_output.add_terminal_input(&[17]); // quit (ctrl-q)
+ start(Box::new(fake_input_output.clone()));
+
+ let output_frames = fake_input_output.stdout_writer.output_frames.lock().unwrap();
+ let mut vte_parser = vte::Parser::new();
+ let main_pid = 0;
+ let x = 0;
+ let y = 0;
+ let mut terminal_output = TerminalOutput::new(main_pid, fake_win_size, x, y);
+
+ for frame in output_frames.iter() {
+ for byte in frame.iter() {
+ vte_parser.advance(&mut terminal_output, *byte);
+ }
+ let output_lines = terminal_output.read_buffer_as_lines();
+ let cursor_position_in_last_line = terminal_output.cursor_position_in_last_line();
+ let mut snapshot = String::new();
+ for (line_index, line) in output_lines.iter().enumerate() {
+ for (character_index, terminal_character) in line.iter().enumerate() {
+ if line_index == output_lines.len() - 1 && character_index == cursor_position_in_last_line {
+ snapshot.push('█');
+ } else {
+ snapshot.push(terminal_character.character);
+ }
+ }
+ if line_index != output_lines.len() - 1 {
+ snapshot.push('\n');
+ }
+ }
+ assert_snapshot!(snapshot);
+ }
+}
+
+#[test]
+pub fn split_terminals_vertically() {
+ let fake_win_size = Winsize { // TODO: combine with above
+ ws_col: 121,
+ ws_row: 20,
+ ws_xpixel: 0,
+ ws_ypixel: 0,
+ };
+ let mut fake_input_output = get_fake_os_input(&fake_win_size);
+ fake_input_output.add_terminal_input(&[14, 17]); // split-vertically and quit (ctrl-n + ctrl-q)
+ start(Box::new(fake_input_output.clone()));
+
+ let output_frames = fake_input_output.stdout_writer.output_frames.lock().unwrap();
+ let mut vte_parser = vte::Parser::new();
+ let main_pid = 0;
+ let x = 0;
+ let y = 0;
+ let mut terminal_output = TerminalOutput::new(main_pid, fake_win_size, x, y);
+
+ for frame in output_frames.iter() {
+ for byte in frame.iter() {
+ vte_parser.advance(&mut terminal_output, *byte);
+ }
+ let output_lines = terminal_output.read_buffer_as_lines();
+ let cursor_position_in_last_line = terminal_output.cursor_position_in_last_line();
+ let mut snapshot = String::new();
+ for (line_index, line) in output_lines.iter().enumerate() {
+ for (character_index, terminal_character) in line.iter().enumerate() {
+ if line_index == output_lines.len() - 1 && character_index == cursor_position_in_last_line {
+ snapshot.push('█');
+ } else {
+ snapshot.push(terminal_character.character);
+ }
+ }
+ if line_index != output_lines.len() - 1 {
+ snapshot.push('\n');
+ }
+ }
+ assert_snapshot!(snapshot);
+ }
+}
+
+#[test]
+pub fn split_terminals_horizontally() {
+ let fake_win_size = Winsize { // TODO: combine with above
+ ws_col: 121,
+ ws_row: 20,
+ ws_xpixel: 0,
+ ws_ypixel: 0,
+ };
+ let mut fake_input_output = get_fake_os_input(&fake_win_size);
+ fake_input_output.add_terminal_input(&[2, 17]); // split-horizontally and quit (ctrl-b + ctrl-q)
+ start(Box::new(fake_input_output.clone()));
+
+ let output_frames = fake_input_output.stdout_writer.output_frames.lock().unwrap();
+ let mut vte_parser = vte::Parser::new();
+ let main_pid = 0;
+ let x = 0;
+ let y = 0;
+ let mut terminal_output = TerminalOutput::new(main_pid, fake_win_size, x, y);
+
+ for frame in output_frames.iter() {
+ for byte in frame.iter() {
+ vte_parser.advance(&mut terminal_output, *byte);
+ }
+ let output_lines = terminal_output.read_buffer_as_lines();
+ let cursor_position_in_last_line = terminal_output.cursor_position_in_last_line();
+ let mut snapshot = String::new();
+ for (line_index, line) in output_lines.iter().enumerate() {
+ for (character_index, terminal_character) in line.iter().enumerate() {
+ if line_index == output_lines.len() - 1 && character_index == cursor_position_in_last_line {
+ snapshot.push('█');
+ } else {
+ snapshot.push(terminal_character.character);
+ }
+ }
+ if line_index != output_lines.len() - 1 {
+ snapshot.push('\n');
+ }
+ }
+ assert_snapshot!(snapshot);
+ }
+}