diff options
author | Tim Oram <dev@mitmaro.ca> | 2021-06-08 19:25:06 -0230 |
---|---|---|
committer | Tim Oram <dev@mitmaro.ca> | 2021-06-19 16:32:59 -0230 |
commit | 9762b02def3315b445436f19abf43d1f098c45e4 (patch) | |
tree | c7a04815564d3fc293d3e98be738584e56619a7f /src/process | |
parent | 81ee1c71dd38045b23f6582331b3a160aef15d2c (diff) |
Move error to a module
Diffstat (limited to 'src/process')
-rw-r--r-- | src/process/error.rs | 209 | ||||
-rw-r--r-- | src/process/mod.rs | 2 | ||||
-rw-r--r-- | src/process/tests.rs | 3 |
3 files changed, 2 insertions, 212 deletions
diff --git a/src/process/error.rs b/src/process/error.rs deleted file mode 100644 index 08e1e25..0000000 --- a/src/process/error.rs +++ /dev/null @@ -1,209 +0,0 @@ -use lazy_static::lazy_static; - -use crate::{ - display::DisplayColor, - input::{Event, EventHandler, InputOptions}, - process::{ProcessModule, ProcessResult, State}, - todo_file::TodoFile, - view::{handle_view_data_scroll, LineSegment, RenderContext, ViewData, ViewLine, ViewSender}, -}; - -lazy_static! { - static ref INPUT_OPTIONS: InputOptions = InputOptions::new().movement(true); -} - -pub struct Error { - return_state: State, - view_data: ViewData, -} - -impl ProcessModule for Error { - fn activate(&mut self, _: &TodoFile, previous_state: State) -> ProcessResult { - self.return_state = previous_state; - ProcessResult::new() - } - - fn build_view_data(&mut self, _: &RenderContext, _: &TodoFile) -> &ViewData { - &self.view_data - } - - fn handle_events( - &mut self, - event_handler: &EventHandler, - view_sender: &ViewSender, - _: &mut TodoFile, - ) -> ProcessResult { - let event = event_handler.read_event(&INPUT_OPTIONS, |event, _| event); - let mut result = ProcessResult::from(event); - if handle_view_data_scroll(event, view_sender).is_none() { - if let Event::Key(_) = event { - result = result.state(self.return_state); - } - } - result - } - - fn handle_error(&mut self, error: &anyhow::Error) { - self.view_data.update_view_data(|updater| { - updater.clear(); - for cause in error.chain() { - let error_text = format!("{:#}", cause); - for err in error_text.split('\n') { - updater.push_line(ViewLine::from(err)); - } - } - updater.push_trailing_line(ViewLine::from(LineSegment::new_with_color( - "Press any key to continue", - DisplayColor::IndicatorColor, - ))); - }); - } -} - -impl Error { - pub fn new() -> Self { - Self { - return_state: State::List, - view_data: ViewData::new(|updater| { - updater.set_show_title(true); - updater.set_retain_scroll_position(false); - }), - } - } -} - -#[cfg(test)] -mod tests { - use anyhow::anyhow; - - use super::*; - use crate::{ - assert_process_result, - assert_rendered_output, - input::{Event, MetaEvent}, - process::testutil::process_module_test, - }; - - #[test] - fn simple_error() { - process_module_test(&[], &[], |test_context| { - let mut module = Error::new(); - module.handle_error(&anyhow!("Test Error")); - let view_data = test_context.build_view_data(&mut module); - assert_rendered_output!( - view_data, - "{TITLE}", - "{BODY}", - "{Normal}Test Error", - "{TRAILING}", - "{IndicatorColor}Press any key to continue" - ); - }); - } - - #[test] - fn error_with_contest() { - process_module_test(&[], &[], |test_context| { - let mut module = Error::new(); - module.handle_error(&anyhow!("Test Error").context("Context")); - let view_data = test_context.build_view_data(&mut module); - assert_rendered_output!( - view_data, - "{TITLE}", - "{BODY}", - "{Normal}Context", - "{Normal}Test Error", - "{TRAILING}", - "{IndicatorColor}Press any key to continue" - ); - }); - } - - #[test] - fn error_with_newlines() { - process_module_test(&[], &[], |test_context| { - let mut module = Error::new(); - module.handle_error(&anyhow!("Test\nError").context("With\nContext")); - let view_data = test_context.build_view_data(&mut module); - assert_rendered_output!( - view_data, - "{TITLE}", - "{BODY}", - "{Normal}With", - "{Normal}Context", - "{Normal}Test", - "{Normal}Error", - "{TRAILING}", - "{IndicatorColor}Press any key to continue" - ); - }); - } - - #[test] - fn return_state() { - process_module_test(&[], &[Event::from('a')], |mut test_context| { - let mut module = Error::new(); - test_context.activate(&mut module, State::ConfirmRebase); - module.handle_error(&anyhow!("Test Error")); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from('a'), - state = State::ConfirmRebase - ); - }); - } - - #[test] - fn resize() { - process_module_test(&[], &[Event::Resize(100, 100)], |mut test_context| { - let mut module = Error::new(); - test_context.activate(&mut module, State::ConfirmRebase); - module.handle_error(&anyhow!("Test Error")); - assert_process_result!(test_context.handle_event(&mut module), event = Event::Resize(100, 100)); - }); - } - - #[test] - fn scroll_events() { - process_module_test( - &[], - &[ - Event::from(MetaEvent::ScrollLeft), - Event::from(MetaEvent::ScrollRight), - Event::from(MetaEvent::ScrollDown), - Event::from(MetaEvent::ScrollUp), - Event::from(MetaEvent::ScrollJumpDown), - Event::from(MetaEvent::ScrollJumpUp), - ], - |mut test_context| { - let mut module = Error::new(); - test_context.activate(&mut module, State::ConfirmRebase); - module.handle_error(&anyhow!("Test Error")); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollLeft) - ); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollRight) - ); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollDown) - ); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollUp) - ); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollJumpDown) - ); - assert_process_result!( - test_context.handle_event(&mut module), - event = Event::from(MetaEvent::ScrollJumpUp) - ); - }, - ); - } -} diff --git a/src/process/mod.rs b/src/process/mod.rs index 7614c95..721bf08 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -1,4 +1,3 @@ -mod error; mod exit_status; mod modules; mod process_module; @@ -15,7 +14,6 @@ use std::{process::Command, thread}; use anyhow::{anyhow, Result}; pub use self::{ - error::Error, exit_status::ExitStatus, modules::Modules, process_module::ProcessModule, diff --git a/src/process/tests.rs b/src/process/tests.rs index 093e71f..239cda5 100644 --- a/src/process/tests.rs +++ b/src/process/tests.rs @@ -6,8 +6,9 @@ use super::*; use crate::{ assert_rendered_output, display::{testutil::CrossTerm, Display, Size}, + error::Error, input::InputOptions, - process::{error::Error, testutil::process_module_test}, + process::testutil::process_module_test, view::ViewData, window_size_error::WindowSizeError, }; |