summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2020-11-20 23:35:52 -0330
committerTim Oram <dev@mitmaro.ca>2020-11-23 20:46:37 -0330
commit0418e52163277965dbce1fc32a2fada9353422c1 (patch)
treec65a29d14cceeb960f7d327bdfbab9d257ddf4af
parent6346092d82c484c9dc27ea27c1a5f1f07c57b6c7 (diff)
Add tests for process module
-rw-r--r--src/process/mod.rs17
-rw-r--r--src/process/tests.rs220
-rw-r--r--src/process/testutil.rs9
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,