summaryrefslogtreecommitdiffstats
path: root/src/tests/e2e/cases.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/e2e/cases.rs')
-rw-r--r--src/tests/e2e/cases.rs312
1 files changed, 296 insertions, 16 deletions
diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs
index 0585c373b..1457c0a91 100644
--- a/src/tests/e2e/cases.rs
+++ b/src/tests/e2e/cases.rs
@@ -178,7 +178,6 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() {
name: "Make sure only one pane appears",
instruction: |remote_terminal: RemoteTerminal| -> bool {
let mut step_is_complete = false;
- // if remote_terminal.cursor_position_is(3, 2) && remote_terminal.snapshot_contains("...")
if remote_terminal.cursor_position_is(3, 2) {
// ... is the truncated tip line
step_is_complete = true;
@@ -928,7 +927,7 @@ pub fn detach_and_attach_session() {
let last_snapshot = loop {
RemoteRunner::kill_running_sessions(fake_win_size);
drop(());
- let mut runner = RemoteRunner::new(fake_win_size)
+ let mut runner = RemoteRunner::new_mirrored_session(fake_win_size)
.add_step(Step {
name: "Split pane to the right",
instruction: |mut remote_terminal: RemoteTerminal| -> bool {
@@ -1261,20 +1260,21 @@ pub fn mirrored_sessions() {
// then make sure they were also reflected (mirrored) in the first runner afterwards
RemoteRunner::kill_running_sessions(fake_win_size);
drop(());
- let mut first_runner = RemoteRunner::new_with_session_name(fake_win_size, session_name)
- .dont_panic()
- .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(3, 2)
- {
- step_is_complete = true;
- }
- step_is_complete
- },
- });
+ let mut first_runner =
+ RemoteRunner::new_with_session_name(fake_win_size, session_name, true)
+ .dont_panic()
+ .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(3, 2)
+ {
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
first_runner.run_all_steps();
let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name)
@@ -1398,6 +1398,286 @@ pub fn mirrored_sessions() {
#[test]
#[ignore]
+pub fn multiple_users_in_same_pane_and_tab() {
+ let fake_win_size = Size {
+ cols: 120,
+ rows: 24,
+ };
+ let mut test_attempts = 10;
+ let session_name = "multiple_users_in_same_pane_and_tab";
+ let (first_runner_snapshot, second_runner_snapshot) = loop {
+ // here we connect with one runner, then connect with another, perform some actions and
+ // then make sure they were also reflected (mirrored) in the first runner afterwards
+ RemoteRunner::kill_running_sessions(fake_win_size);
+ drop(());
+ let mut first_runner =
+ RemoteRunner::new_with_session_name(fake_win_size, session_name, false)
+ .dont_panic()
+ .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(3, 2)
+ {
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ first_runner.run_all_steps();
+
+ let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name)
+ .dont_panic()
+ .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(3, 2)
+ {
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ second_runner.run_all_steps();
+
+ if first_runner.test_timed_out || second_runner.test_timed_out {
+ test_attempts -= 1;
+ continue;
+ }
+ let second_runner_snapshot = second_runner.take_snapshot_after(Step {
+ name: "take snapshot after",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2)
+ && remote_terminal.snapshot_contains("MY FOCUS")
+ {
+ // cursor is back in the first tab
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ let first_runner_snapshot = first_runner.take_snapshot_after(Step {
+ name: "take snapshot after",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2)
+ && remote_terminal.snapshot_contains("MY FOCUS")
+ {
+ // cursor is back in the first tab
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+
+ if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 {
+ test_attempts -= 1;
+ continue;
+ } else {
+ break (first_runner_snapshot, second_runner_snapshot);
+ }
+ };
+ assert_snapshot!(first_runner_snapshot);
+ assert_snapshot!(second_runner_snapshot);
+}
+
+#[test]
+#[ignore]
+pub fn multiple_users_in_different_panes_and_same_tab() {
+ let fake_win_size = Size {
+ cols: 120,
+ rows: 24,
+ };
+ let mut test_attempts = 10;
+ let session_name = "multiple_users_in_same_pane_and_tab";
+ let (first_runner_snapshot, second_runner_snapshot) = loop {
+ // here we connect with one runner, then connect with another, perform some actions and
+ // then make sure they were also reflected (mirrored) in the first runner afterwards
+ RemoteRunner::kill_running_sessions(fake_win_size);
+ drop(());
+ let mut first_runner =
+ RemoteRunner::new_with_session_name(fake_win_size, session_name, false)
+ .dont_panic()
+ .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(3, 2)
+ {
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ first_runner.run_all_steps();
+
+ let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name)
+ .dont_panic()
+ .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
+ },
+ });
+ second_runner.run_all_steps();
+
+ if first_runner.test_timed_out || second_runner.test_timed_out {
+ test_attempts -= 1;
+ continue;
+ }
+
+ let second_runner_snapshot = second_runner.take_snapshot_after(Step {
+ name: "take snapshot after",
+ instruction: |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
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+
+ let first_runner_snapshot = first_runner.take_snapshot_after(Step {
+ name: "take snapshot after",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2)
+ && remote_terminal.snapshot_contains("││$")
+ {
+ // cursor is back in the first tab
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+
+ if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 {
+ test_attempts -= 1;
+ continue;
+ } else {
+ break (first_runner_snapshot, second_runner_snapshot);
+ }
+ };
+ assert_snapshot!(first_runner_snapshot);
+ assert_snapshot!(second_runner_snapshot);
+}
+
+#[test]
+#[ignore]
+pub fn multiple_users_in_different_tabs() {
+ let fake_win_size = Size {
+ cols: 120,
+ rows: 24,
+ };
+ let mut test_attempts = 10;
+ let session_name = "multiple_users_in_different_tabs";
+ let (first_runner_snapshot, second_runner_snapshot) = loop {
+ // here we connect with one runner, then connect with another, perform some actions and
+ // then make sure they were also reflected (mirrored) in the first runner afterwards
+ RemoteRunner::kill_running_sessions(fake_win_size);
+ drop(());
+ let mut first_runner =
+ RemoteRunner::new_with_session_name(fake_win_size, session_name, false)
+ .dont_panic()
+ .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(3, 2)
+ {
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ first_runner.run_all_steps();
+
+ let mut second_runner = RemoteRunner::new_existing_session(fake_win_size, session_name)
+ .dont_panic()
+ .add_step(Step {
+ name: "Open new tab",
+ instruction: |mut remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2) && remote_terminal.tip_appears() {
+ // cursor is in the newly opened second pane
+ remote_terminal.send_key(&TAB_MODE);
+ remote_terminal.send_key(&NEW_TAB_IN_TAB_MODE);
+ // back to normal mode after split
+ remote_terminal.send_key(&ENTER);
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+ second_runner.run_all_steps();
+
+ if first_runner.test_timed_out || second_runner.test_timed_out {
+ test_attempts -= 1;
+ continue;
+ }
+
+ let second_runner_snapshot = second_runner.take_snapshot_after(Step {
+ name: "Wait for new tab to open",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2)
+ && remote_terminal.tip_appears()
+ && remote_terminal.snapshot_contains("Tab #2")
+ && remote_terminal.status_bar_appears()
+ {
+ // cursor is in the newly opened second tab
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+
+ let first_runner_snapshot = first_runner.take_snapshot_after(Step {
+ name: "Wait for new tab to open",
+ instruction: |remote_terminal: RemoteTerminal| -> bool {
+ let mut step_is_complete = false;
+ if remote_terminal.cursor_position_is(3, 2)
+ && remote_terminal.tip_appears()
+ && remote_terminal.snapshot_contains("Tab #2")
+ && remote_terminal.status_bar_appears()
+ {
+ // cursor is in the newly opened second tab
+ step_is_complete = true;
+ }
+ step_is_complete
+ },
+ });
+
+ if (first_runner.test_timed_out || second_runner.test_timed_out) && test_attempts >= 0 {
+ test_attempts -= 1;
+ continue;
+ } else {
+ break (first_runner_snapshot, second_runner_snapshot);
+ }
+ };
+ assert_snapshot!(first_runner_snapshot);
+ assert_snapshot!(second_runner_snapshot);
+}
+
+#[test]
+#[ignore]
pub fn bracketed_paste() {
let fake_win_size = Size {
cols: 120,