diff options
author | remgodow <remgodow@users.noreply.github.com> | 2020-09-14 15:57:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-14 15:57:41 +0200 |
commit | e8a3f31348d48bafaa2dbe818cf7bc850d4d3ec5 (patch) | |
tree | 9c1f08c179119b898a940eabcb679c8cb985477b /src/tests | |
parent | d993d070a319c164096e6a1dc7b81cf3d3f409a2 (diff) |
feat(ui): crossplatform terminal resize handling using crossterm Event::Resize (#186)
Diffstat (limited to 'src/tests')
-rw-r--r-- | src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap | 6 | ||||
-rw-r--r-- | src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap | 6 | ||||
-rw-r--r-- | src/tests/cases/test_utils.rs | 25 | ||||
-rw-r--r-- | src/tests/cases/ui.rs | 34 | ||||
-rw-r--r-- | src/tests/fakes/fake_input.rs | 18 |
5 files changed, 34 insertions, 55 deletions
diff --git a/src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap b/src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap index 9365740..7707702 100644 --- a/src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap +++ b/src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap @@ -2,9 +2,11 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- + 21Bps / 0Bps + 1 1 21Bps / 0Bps 1.1.1.1 1 21Bps / 0Bps @@ -28,9 +30,7 @@ expression: "&terminal_draw_events_mirror[1]" - - - + <interface_name>:443 => 1.1.1.1:12345 (tcp) 1 21Bps / 0Bps diff --git a/src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap b/src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap index e973e48..d710afb 100644 --- a/src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap +++ b/src/tests/cases/snapshots/ui__traffic_with_winch_event-3.snap @@ -2,11 +2,9 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[2]" --- - 21Bps / 0Bps - 1 1 21Bps / 0Bps 1.1.1.1 1 21Bps / 0Bps @@ -30,7 +28,9 @@ expression: "&terminal_draw_events_mirror[2]" - <interface_name>:443 => 1.1.1.1:12345 (tcp) 1 21Bps / 0Bps + + + diff --git a/src/tests/cases/test_utils.rs b/src/tests/cases/test_utils.rs index 7982a2d..bd90399 100644 --- a/src/tests/cases/test_utils.rs +++ b/src/tests/cases/test_utils.rs @@ -1,6 +1,6 @@ use crate::tests::fakes::{ - create_fake_dns_client, create_fake_on_winch, get_interfaces, get_open_sockets, KeyboardEvents, - NetworkFrames, TerminalEvent, TestBackend, + create_fake_dns_client, get_interfaces, get_open_sockets, NetworkFrames, TerminalEvent, + TerminalEvents, TestBackend, }; use std::iter; @@ -17,13 +17,23 @@ use packet_builder::payload::PayloadData; use pnet::packet::Packet; use pnet_base::MacAddr; -pub fn sleep_and_quit_events(sleep_num: usize) -> Box<KeyboardEvents> { +pub fn sleep_and_quit_events(sleep_num: usize) -> Box<TerminalEvents> { let mut events: Vec<Option<Event>> = iter::repeat(None).take(sleep_num).collect(); events.push(Some(Event::Key(KeyEvent { modifiers: KeyModifiers::CONTROL, code: KeyCode::Char('c'), }))); - Box::new(KeyboardEvents::new(events)) + Box::new(TerminalEvents::new(events)) +} + +pub fn sleep_resize_and_quit_events(sleep_num: usize) -> Box<TerminalEvents> { + let mut events: Vec<Option<Event>> = iter::repeat(None).take(sleep_num).collect(); + events.push(Some(Event::Resize(100, 100))); + events.push(Some(Event::Key(KeyEvent { + modifiers: KeyModifiers::CONTROL, + code: KeyCode::Char('c'), + }))); + Box::new(TerminalEvents::new(events)) } pub fn build_tcp_packet( @@ -114,9 +124,6 @@ pub fn os_input_output_factory( dns_client: Option<Client>, keyboard_events: Box<dyn Iterator<Item = Event> + Send>, ) -> OsInputOutput { - let on_winch = create_fake_on_winch(false); - let cleanup = Box::new(|| {}); - let write_to_stdout: Box<dyn FnMut(String) + Send> = match stdout { Some(stdout) => Box::new({ move |output: String| { @@ -131,10 +138,8 @@ pub fn os_input_output_factory( network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events, + terminal_events: keyboard_events, dns_client, - on_winch, - cleanup, write_to_stdout, } } diff --git a/src/tests/cases/ui.rs b/src/tests/cases/ui.rs index 1037a67..9bbcf86 100644 --- a/src/tests/cases/ui.rs +++ b/src/tests/cases/ui.rs @@ -1,6 +1,6 @@ use crate::tests::fakes::TerminalEvent::*; use crate::tests::fakes::{ - create_fake_dns_client, create_fake_on_winch, get_interfaces, get_open_sockets, NetworkFrames, + create_fake_dns_client, get_interfaces, get_open_sockets, NetworkFrames, }; use ::insta::assert_snapshot; @@ -10,13 +10,13 @@ use ::std::net::IpAddr; use crate::tests::cases::test_utils::{ build_tcp_packet, opts_ui, os_input_output, os_input_output_factory, sample_frames, - sleep_and_quit_events, test_backend_factory, + sleep_and_quit_events, sleep_resize_and_quit_events, test_backend_factory, }; use ::crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers}; use pnet::datalink::DataLinkReceiver; use std::iter; -use crate::tests::fakes::KeyboardEvents; +use crate::tests::fakes::TerminalEvents; use crate::{start, Opt, OsInputOutput, RenderOpts}; @@ -81,7 +81,7 @@ fn pause_by_space() { code: KeyCode::Char('c'), }))); - let events = Box::new(KeyboardEvents::new(events)); + let events = Box::new(TerminalEvents::new(events)); let os_input = os_input_output_factory(network_frames, None, None, events); let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); let opts = opts_ui(); @@ -136,7 +136,7 @@ fn rearranged_by_tab() { code: KeyCode::Char('c'), }))); - let events = Box::new(KeyboardEvents::new(events)); + let events = Box::new(TerminalEvents::new(events)); let os_input = os_input_output_factory(network_frames, None, None, events); let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); let opts = opts_ui(); @@ -1077,18 +1077,14 @@ fn traffic_with_host_names() { String::from("i-like-cheese.com"), ); let dns_client = create_fake_dns_client(ips_to_hostnames); - let on_winch = create_fake_on_winch(false); - let cleanup = Box::new(|| {}); let write_to_stdout = Box::new(move |_output: String| {}); let os_input = OsInputOutput { network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events: sleep_and_quit_events(3), + terminal_events: sleep_and_quit_events(3), dns_client, - on_winch, - cleanup, write_to_stdout, }; let opts = opts_ui(); @@ -1186,18 +1182,14 @@ fn truncate_long_hostnames() { String::from("i-like-cheese.com"), ); let dns_client = create_fake_dns_client(ips_to_hostnames); - let on_winch = create_fake_on_winch(false); - let cleanup = Box::new(|| {}); let write_to_stdout = Box::new(move |_output: String| {}); let os_input = OsInputOutput { network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events: sleep_and_quit_events(3), + terminal_events: sleep_and_quit_events(3), dns_client, - on_winch, - cleanup, write_to_stdout, }; let opts = opts_ui(); @@ -1294,18 +1286,14 @@ fn no_resolve_mode() { String::from("i-like-cheese.com"), ); let dns_client = None; - let on_winch = create_fake_on_winch(false); - let cleanup = Box::new(|| {}); let write_to_stdout = Box::new(move |_output: String| {}); let os_input = OsInputOutput { network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events: sleep_and_quit_events(3), + terminal_events: sleep_and_quit_events(3), dns_client, - on_winch, - cleanup, write_to_stdout, }; let opts = opts_ui(); @@ -1338,18 +1326,14 @@ fn traffic_with_winch_event() { let (terminal_events, terminal_draw_events, backend) = test_backend_factory(190, 50); let dns_client = create_fake_dns_client(HashMap::new()); - let on_winch = create_fake_on_winch(true); - let cleanup = Box::new(|| {}); let write_to_stdout = Box::new(move |_output: String| {}); let os_input = OsInputOutput { network_interfaces: get_interfaces(), network_frames, get_open_sockets, - keyboard_events: sleep_and_quit_events(2), + terminal_events: sleep_resize_and_quit_events(2), dns_client, - on_winch, - cleanup, write_to_stdout, }; let opts = opts_ui(); diff --git a/src/tests/fakes/fake_input.rs b/src/tests/fakes/fake_input.rs index 5e9e913..0fdf63a 100644 --- a/src/tests/fakes/fake_input.rs +++ b/src/tests/fakes/fake_input.rs @@ -13,21 +13,20 @@ use crate::{ dns::{self, Lookup}, Connection, Protocol, }, - os::OnSigWinch, OpenSockets, }; -pub struct KeyboardEvents { +pub struct TerminalEvents { pub events: Vec<Option<Event>>, } -impl KeyboardEvents { +impl TerminalEvents { pub fn new(mut events: Vec<Option<Event>>) -> Self { events.reverse(); // this is so that we do not have to shift the array - KeyboardEvents { events } + TerminalEvents { events } } } -impl Iterator for KeyboardEvents { +impl Iterator for TerminalEvents { type Item = Event; fn next(&mut self) -> Option<Event> { match self.events.pop() { @@ -157,15 +156,6 @@ pub fn get_interfaces() -> Vec<NetworkInterface> { }] } -pub fn create_fake_on_winch(should_send_winch_event: bool) -> Box<OnSigWinch> { - Box::new(move |cb| { - if should_send_winch_event { - thread::sleep(time::Duration::from_millis(900)); - cb() - } - }) -} - pub fn create_fake_dns_client(ips_to_hosts: HashMap<IpAddr, String>) -> Option<dns::Client> { let runtime = Runtime::new().unwrap(); let dns_client = dns::Client::new(FakeResolver(ips_to_hosts), runtime).unwrap(); |