diff options
author | Tim Oram <dev@mitmaro.ca> | 2020-11-20 23:35:52 -0330 |
---|---|---|
committer | Tim Oram <dev@mitmaro.ca> | 2020-11-23 20:46:37 -0330 |
commit | 0418e52163277965dbce1fc32a2fada9353422c1 (patch) | |
tree | c65a29d14cceeb960f7d327bdfbab9d257ddf4af | |
parent | 6346092d82c484c9dc27ea27c1a5f1f07c57b6c7 (diff) |
Add tests for process module
-rw-r--r-- | src/process/mod.rs | 17 | ||||
-rw-r--r-- | src/process/tests.rs | 220 | ||||
-rw-r--r-- | src/process/testutil.rs | 9 |
3 files changed, 231 insertions, 15 deletions
diff --git a/src/process/mod.rs b/src/process/mod.rs index f097dd0..fe39147 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -5,11 +5,14 @@ pub mod modules; pub mod process_module; pub mod process_result; pub mod state; -#[cfg(test)] -pub mod testutil; pub mod util; pub mod window_size_error; +#[cfg(test)] +mod tests; +#[cfg(test)] +pub mod testutil; + use crate::input::input_handler::InputHandler; use crate::input::Input; use crate::process::exit_status::ExitStatus; @@ -52,7 +55,7 @@ impl<'r> Process<'r> { let result = modules.handle_input(self.state, self.input_handler, &mut self.rebase_todo, self.view); self.handle_process_result(&mut modules, &result); } - self.exit_end()?; + self.rebase_todo.write_file()?; Ok(self.exit_status) } @@ -105,12 +108,4 @@ impl<'r> Process<'r> { let result = modules.activate(self.state, &self.rebase_todo, previous_state); self.handle_process_result(modules, &result); } - - fn exit_end(&mut self) -> Result<()> { - let result = self.rebase_todo.write_file(); - if result.is_err() { - self.exit_status = Some(ExitStatus::FileWriteError); - } - result - } } diff --git a/src/process/tests.rs b/src/process/tests.rs new file mode 100644 index 0000000..b27ed19 --- /dev/null +++ b/src/process/tests.rs @@ -0,0 +1,220 @@ +use super::*; +// use crate::assert_process_result; +// use crate::assert_rendered_output; +use crate::process::testutil::{process_module_test, TestContext, ViewState}; +use crate::todo_file::line::Line; +use anyhow::anyhow; + +#[test] +#[serial_test::serial] +fn window_too_small() { + process_module_test( + &["pick aaa comment"], + ViewState { + size: (1, 1), + ..ViewState::default() + }, + &[Input::Exit], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let modules = Modules::new(test_context.display, test_context.config); + assert_eq!(process.run(modules).unwrap().unwrap(), ExitStatus::Abort); + }, + ); +} + +#[test] +#[serial_test::serial] +fn force_abort() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[Input::ForceAbort], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let modules = Modules::new(test_context.display, test_context.config); + assert_eq!(process.run(modules).unwrap().unwrap(), ExitStatus::Good); + process.rebase_todo.load_file().unwrap(); + assert_eq!(process.rebase_todo.get_lines(), &vec![]); + }, + ); +} + +#[test] +#[serial_test::serial] +fn force_rebase() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[Input::ForceRebase], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let modules = Modules::new(test_context.display, test_context.config); + assert_eq!(process.run(modules).unwrap().unwrap(), ExitStatus::Good); + process.rebase_todo.load_file().unwrap(); + assert_eq!(process.rebase_todo.get_lines(), &vec![ + Line::new("pick aaa comment").unwrap() + ]); + }, + ); +} + +#[test] +#[serial_test::serial] +fn error_write_todo() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[Input::ForceRebase], + |test_context: TestContext<'_>| { + let todo_path = test_context.get_todo_file_path(); + test_context.set_todo_file_readonly(); + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let modules = Modules::new(test_context.display, test_context.config); + assert_eq!( + process.run(modules).unwrap_err().to_string(), + format!("Error opening file: {}", todo_path) + ); + }, + ); +} + +#[test] +#[serial_test::serial] +fn resize_window_size_okay() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[Input::Resize, Input::Exit], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let modules = Modules::new(test_context.display, test_context.config); + assert_eq!(process.run(modules).unwrap().unwrap(), ExitStatus::Abort); + }, + ); +} + +#[test] +#[serial_test::serial] +fn resize_window_size_too_small() { + process_module_test( + &["pick aaa comment"], + ViewState { + size: (1, 1), + ..ViewState::default() + }, + &[], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let mut modules = Modules::new(test_context.display, test_context.config); + process.state = State::List; + let result = ProcessResult::new().input(Input::Resize); + process.handle_process_result(&mut modules, &result); + }, + ); +} + +#[test] +#[serial_test::serial] +fn error() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let mut modules = Modules::new(test_context.display, test_context.config); + let result = ProcessResult::new().error(anyhow!("Test error")); + process.handle_process_result(&mut modules, &result); + }, + ); +} + +#[test] +#[serial_test::serial] +fn help_start() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let mut modules = Modules::new(test_context.display, test_context.config); + let result = ProcessResult::new().input(Input::Help); + process.handle_process_result(&mut modules, &result); + }, + ); +} + +#[test] +#[serial_test::serial] +fn help_exit() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let mut modules = Modules::new(test_context.display, test_context.config); + process.state = State::Help; + let result = ProcessResult::new().input(Input::Help); + process.handle_process_result(&mut modules, &result); + }, + ); +} + +#[test] +#[serial_test::serial] +fn other_input() { + process_module_test( + &["pick aaa comment"], + ViewState::default(), + &[], + |test_context: TestContext<'_>| { + let mut process = Process::new( + test_context.rebase_todo_file, + test_context.view, + test_context.input_handler, + ); + let mut modules = Modules::new(test_context.display, test_context.config); + let result = ProcessResult::new().input(Input::Character('a')); + process.handle_process_result(&mut modules, &result); + }, + ); +} diff --git a/src/process/testutil.rs b/src/process/testutil.rs index f6ea84f..9078ee9 100644 --- a/src/process/testutil.rs +++ b/src/process/testutil.rs @@ -431,7 +431,8 @@ where C: for<'p> FnOnce(TestContext<'p>) { .to_string(); set_var("GIT_DIR", git_repo_dir.as_str()); - let config = Config::new().unwrap(); + let mut config = Config::new().unwrap(); + config.git.editor = String::from("true"); let mut curses = Curses::new(); curses.mv(view_state.position.1, view_state.position.0); curses.resize_term(view_state.size.1, view_state.size.0); @@ -446,13 +447,13 @@ where C: for<'p> FnOnce(TestContext<'p>) { .tempfile_in(git_repo_dir.as_str()) .unwrap(); - let mut rebsae_todo_file = TodoFile::new(todo_file.path().to_str().unwrap(), "#"); - rebsae_todo_file.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect()); + let mut rebase_todo_file = TodoFile::new(todo_file.path().to_str().unwrap(), "#"); + rebase_todo_file.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect()); let input_handler = InputHandler::new(&display, &config.key_bindings); callback(TestContext { config: &config, - rebase_todo_file: rebsae_todo_file, + rebase_todo_file, todo_file: Cell::new(todo_file), view: &view, input_handler: &input_handler, |