From c3c103eebd82fc729788694a9f3bfd4ded855cf8 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 5 Jun 2021 11:22:11 +0800 Subject: refactor --- src/interactive/app/eventloop.rs | 41 +++++++++++++++----------- src/interactive/app/tests/journeys_readonly.rs | 22 ++++++++++---- src/interactive/app/tests/utils.rs | 4 +-- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index 5585c90..43160dd 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -186,6 +186,21 @@ pub struct TerminalApp { type KeyboardInputAndApp = (std::sync::mpsc::Receiver, TerminalApp); impl TerminalApp { + pub fn refresh_view(&mut self, terminal: &mut Terminal) + where + B: Backend, + { + // Use an event that does nothing to trigger a refresh + self.state + .process_events( + &mut self.window, + &mut self.traversal, + &mut self.display, + terminal, + std::iter::once(Key::Alt('\r')), + ) + .ok(); + } pub fn process_events( &mut self, terminal: &mut Terminal, @@ -208,7 +223,7 @@ impl TerminalApp { pub fn initialize( terminal: &mut Terminal, options: WalkOptions, - input: Vec, + input_paths: Vec, mode: Interaction, ) -> Result> where @@ -237,7 +252,7 @@ impl TerminalApp { let mut state = None::; let mut received_events = false; - let traversal = Traversal::from_walk(options, input, |traversal| { + let traversal = Traversal::from_walk(options, input_paths, |traversal| { let s = match state.as_mut() { Some(s) => { s.entries = sorted_entries(&traversal.tree, s.root, s.sorting); @@ -279,14 +294,13 @@ impl TerminalApp { }; Ok(should_exit) })?; - let mut traversal = match traversal { + let traversal = match traversal { Some(t) => t, None => return Ok(None), }; - Ok(Some(( - keys_rx, - TerminalApp { + Ok(Some((keys_rx, { + let mut app = TerminalApp { state: { let mut s = state.unwrap_or_else(|| { let sorting = Default::default(); @@ -306,22 +320,15 @@ impl TerminalApp { } else { s.entries.get(0).map(|b| b.index) }; - // Force event processing with a key that doesn't do anything. - s.process_events( - &mut window, - &mut traversal, - &mut display, - terminal, - std::iter::once(Key::Alt('\r')), - ) - .ok(); s }, display, traversal, window, - }, - ))) + }; + app.refresh_view(terminal); + app + }))) } } diff --git a/src/interactive/app/tests/journeys_readonly.rs b/src/interactive/app/tests/journeys_readonly.rs index f704742..4633c1e 100644 --- a/src/interactive/app/tests/journeys_readonly.rs +++ b/src/interactive/app/tests/journeys_readonly.rs @@ -2,12 +2,24 @@ use anyhow::Result; use pretty_assertions::assert_eq; use std::ffi::OsString; -use crate::interactive::app::tests::utils::{ - fixture_str, index_by_name, initialized_app_and_terminal_from_fixture, into_keys, - node_by_index, node_by_name, +use crate::interactive::{ + app::tests::{ + utils::{ + fixture_str, index_by_name, initialized_app_and_terminal_from_fixture, into_keys, + node_by_index, node_by_name, + }, + FIXTURE_PATH, + }, + SortMode, }; -use crate::interactive::app::tests::FIXTURE_PATH; -use crate::interactive::SortMode; + +#[test] +fn init_from_pdu_results() -> Result<()> { + use crate::interactive::app::tests::utils::new_test_terminal; + let _terminal = new_test_terminal()?; + + Ok(()) +} #[test] fn simple_user_journey_read_only() -> Result<()> { diff --git a/src/interactive/app/tests/utils.rs b/src/interactive/app/tests/utils.rs index 26241d4..deea2c3 100644 --- a/src/interactive/app/tests/utils.rs +++ b/src/interactive/app/tests/utils.rs @@ -168,7 +168,7 @@ pub fn initialized_app_and_terminal_with_closure( let mut terminal = new_test_terminal()?; std::env::set_current_dir(Path::new(env!("CARGO_MANIFEST_DIR")))?; - let input = fixture_paths.iter().map(|c| convert(c.as_ref())).collect(); + let input_paths = fixture_paths.iter().map(|c| convert(c.as_ref())).collect(); let app = TerminalApp::initialize( &mut terminal, WalkOptions { @@ -179,7 +179,7 @@ pub fn initialized_app_and_terminal_with_closure( sorting: TraversalSorting::AlphabeticalByFileName, cross_filesystems: false, }, - input, + input_paths, Interaction::None, )? .map(|(_, app)| app); -- cgit v1.2.3