summaryrefslogtreecommitdiffstats
path: root/src/process
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2021-06-08 19:25:06 -0230
committerTim Oram <dev@mitmaro.ca>2021-06-19 16:32:59 -0230
commit9762b02def3315b445436f19abf43d1f098c45e4 (patch)
treec7a04815564d3fc293d3e98be738584e56619a7f /src/process
parent81ee1c71dd38045b23f6582331b3a160aef15d2c (diff)
Move error to a module
Diffstat (limited to 'src/process')
-rw-r--r--src/process/error.rs209
-rw-r--r--src/process/mod.rs2
-rw-r--r--src/process/tests.rs3
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,
};