summaryrefslogtreecommitdiffstats
path: root/src/process
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2021-06-19 12:54:55 -0230
committerTim Oram <dev@mitmaro.ca>2021-06-19 13:39:54 -0230
commit133d9b1193ce6d7b91df428267fd70942986d241 (patch)
tree2828300db85889d7a13332d1ed37dd0c1506ea3e /src/process
parent2b3f94268540ce8152b2d972b6bef0aa3e9160d9 (diff)
Refactor process module testutils
Break apart the process module test utils and some minor renaming.
Diffstat (limited to 'src/process')
-rw-r--r--src/process/modules.rs2
-rw-r--r--src/process/testutil/assert_process_result.rs (renamed from src/process/testutil.rs)128
-rw-r--r--src/process/testutil/handle_event_test.rs21
-rw-r--r--src/process/testutil/mod.rs9
-rw-r--r--src/process/testutil/process_module_test.rs136
5 files changed, 169 insertions, 127 deletions
diff --git a/src/process/modules.rs b/src/process/modules.rs
index da3a0c9..ee692a0 100644
--- a/src/process/modules.rs
+++ b/src/process/modules.rs
@@ -124,7 +124,7 @@ mod tests {
modules.handle_input(
State::List,
&context.event_handler_context.event_handler,
- &context.event_handler_context.view_sender,
+ &context.view_sender_context.sender,
&mut context.rebase_todo_file,
);
modules.build_view_data(State::List, &RenderContext::new(100, 100), &context.rebase_todo_file);
diff --git a/src/process/testutil.rs b/src/process/testutil/assert_process_result.rs
index 34cebe3..e5436ff 100644
--- a/src/process/testutil.rs
+++ b/src/process/testutil/assert_process_result.rs
@@ -1,105 +1,10 @@
-use std::{cell::Cell, path::Path};
-
use anyhow::Error;
-use tempfile::{Builder, NamedTempFile};
use crate::{
- config::{testutil::create_config, Config},
- input::{
- testutil::{with_event_handler, TestContext as EventHandlerTestContext},
- Event,
- },
- process::{ExitStatus, ProcessModule, ProcessResult, State},
- todo_file::{Line, TodoFile},
- view::{RenderContext, ViewData},
+ input::Event,
+ process::{exit_status::ExitStatus, process_result::ProcessResult, state::State},
};
-pub struct TestContext<'t> {
- pub config: &'t Config,
- pub event_handler_context: EventHandlerTestContext,
- pub rebase_todo_file: TodoFile,
- pub render_context: RenderContext,
- todo_file: Cell<NamedTempFile>,
-}
-
-impl<'t> TestContext<'t> {
- fn get_build_data<'tc>(&self, module: &'tc mut dyn ProcessModule) -> &'tc ViewData {
- module.build_view_data(&self.render_context, &self.rebase_todo_file)
- }
-
- pub fn activate(&self, module: &'_ mut dyn ProcessModule, state: State) -> ProcessResult {
- module.activate(&self.rebase_todo_file, state)
- }
-
- #[allow(clippy::unused_self)]
- pub fn deactivate(&mut self, module: &'_ mut dyn ProcessModule) {
- module.deactivate();
- }
-
- pub fn build_view_data<'tc>(&self, module: &'tc mut dyn ProcessModule) -> &'tc ViewData {
- self.get_build_data(module)
- }
-
- pub fn handle_event(&mut self, module: &'_ mut dyn ProcessModule) -> ProcessResult {
- module.handle_events(
- &self.event_handler_context.event_handler,
- &self.event_handler_context.view_sender,
- &mut self.rebase_todo_file,
- )
- }
-
- pub fn handle_n_events(&mut self, module: &'_ mut dyn ProcessModule, n: usize) -> Vec<ProcessResult> {
- let mut results = vec![];
- for _ in 0..n {
- results.push(module.handle_events(
- &self.event_handler_context.event_handler,
- &self.event_handler_context.view_sender,
- &mut self.rebase_todo_file,
- ));
- }
- results
- }
-
- pub fn handle_all_events(&mut self, module: &'_ mut dyn ProcessModule) -> Vec<ProcessResult> {
- let mut results = vec![];
- for _ in 0..self.event_handler_context.number_events {
- results.push(module.handle_events(
- &self.event_handler_context.event_handler,
- &self.event_handler_context.view_sender,
- &mut self.rebase_todo_file,
- ));
- }
- results
- }
-
- pub fn new_todo_file(&self) -> TodoFile {
- TodoFile::new(self.get_todo_file_path().as_str(), 1, "#")
- }
-
- pub fn get_todo_file_path(&self) -> String {
- let t = self.todo_file.replace(NamedTempFile::new().unwrap());
- let path = t.path().to_str().unwrap().to_owned();
- self.todo_file.replace(t);
- path
- }
-
- pub fn delete_todo_file(&self) {
- self.todo_file
- .replace(Builder::new().tempfile().unwrap())
- .close()
- .unwrap();
- }
-
- pub fn set_todo_file_readonly(&self) {
- let t = self.todo_file.replace(NamedTempFile::new().unwrap());
- let todo_file = t.as_file();
- let mut permissions = todo_file.metadata().unwrap().permissions();
- permissions.set_readonly(true);
- todo_file.set_permissions(permissions).unwrap();
- self.todo_file.replace(t);
- }
-}
-
fn format_process_result(
event: Option<Event>,
state: Option<State>,
@@ -246,32 +151,3 @@ macro_rules! assert_process_result {
crate::process::testutil::_assert_process_result(&$actual, None, None, None, &None, &Some($external_command))
};
}
-
-pub fn process_module_test<C>(lines: &[&str], events: &[Event], callback: C)
-where C: for<'p> FnOnce(TestContext<'p>) {
- with_event_handler(events, |event_handler_context| {
- let git_repo_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
- .join("test")
- .join("fixtures")
- .join("simple")
- .to_str()
- .unwrap()
- .to_owned();
- let todo_file = Builder::new()
- .prefix("git-rebase-todo-scratch")
- .suffix("")
- .tempfile_in(git_repo_dir.as_str())
- .unwrap();
-
- let mut rebase_todo_file = TodoFile::new(todo_file.path().to_str().unwrap(), 1, "#");
- rebase_todo_file.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect());
-
- callback(TestContext {
- config: &create_config(),
- event_handler_context,
- rebase_todo_file,
- todo_file: Cell::new(todo_file),
- render_context: RenderContext::new(300, 120),
- });
- });
-}
diff --git a/src/process/testutil/handle_event_test.rs b/src/process/testutil/handle_event_test.rs
new file mode 100644
index 0000000..268570e
--- /dev/null
+++ b/src/process/testutil/handle_event_test.rs
@@ -0,0 +1,21 @@
+use crate::{
+ input::{testutil::with_event_handler, Event, EventHandler},
+ view::{testutil::with_view_sender, ViewSender},
+};
+
+pub struct TestContext {
+ pub event_handler: EventHandler,
+ pub view_sender: ViewSender,
+}
+
+pub fn handle_event_test<C>(events: &[Event], callback: C)
+where C: FnOnce(TestContext) {
+ with_view_sender(|view_sender_context| {
+ with_event_handler(events, |event_handler_context| {
+ callback(TestContext {
+ event_handler: event_handler_context.event_handler,
+ view_sender: view_sender_context.sender,
+ });
+ });
+ });
+}
diff --git a/src/process/testutil/mod.rs b/src/process/testutil/mod.rs
new file mode 100644
index 0000000..0288d33
--- /dev/null
+++ b/src/process/testutil/mod.rs
@@ -0,0 +1,9 @@
+mod assert_process_result;
+mod handle_event_test;
+mod process_module_test;
+
+pub use self::{
+ assert_process_result::_assert_process_result,
+ handle_event_test::handle_event_test,
+ process_module_test::process_module_test,
+};
diff --git a/src/process/testutil/process_module_test.rs b/src/process/testutil/process_module_test.rs
new file mode 100644
index 0000000..fe2d63e
--- /dev/null
+++ b/src/process/testutil/process_module_test.rs
@@ -0,0 +1,136 @@
+use std::{cell::Cell, path::Path};
+
+use tempfile::{Builder, NamedTempFile};
+
+use crate::{
+ config::{testutil::create_config, Config},
+ input::{
+ testutil::{with_event_handler, TestContext as EventHandlerTestContext},
+ Event,
+ },
+ process::{process_module::ProcessModule, process_result::ProcessResult, state::State},
+ todo_file::{Line, TodoFile},
+ view::{
+ testutil::{with_view_sender, TestContext as ViewSenderContext},
+ RenderContext,
+ ViewData,
+ },
+};
+
+pub struct TestContext<'t> {
+ pub config: &'t Config,
+ pub event_handler_context: EventHandlerTestContext,
+ pub view_sender_context: ViewSenderContext,
+ pub rebase_todo_file: TodoFile,
+ pub render_context: RenderContext,
+ todo_file: Cell<NamedTempFile>,
+}
+
+impl<'t> TestContext<'t> {
+ fn get_build_data<'tc>(&self, module: &'tc mut dyn ProcessModule) -> &'tc ViewData {
+ module.build_view_data(&self.render_context, &self.rebase_todo_file)
+ }
+
+ pub fn activate(&self, module: &'_ mut dyn ProcessModule, state: State) -> ProcessResult {
+ module.activate(&self.rebase_todo_file, state)
+ }
+
+ #[allow(clippy::unused_self)]
+ pub fn deactivate(&mut self, module: &'_ mut dyn ProcessModule) {
+ module.deactivate();
+ }
+
+ pub fn build_view_data<'tc>(&self, module: &'tc mut dyn ProcessModule) -> &'tc ViewData {
+ self.get_build_data(module)
+ }
+
+ pub fn handle_event(&mut self, module: &'_ mut dyn ProcessModule) -> ProcessResult {
+ module.handle_events(
+ &self.event_handler_context.event_handler,
+ &self.view_sender_context.sender,
+ &mut self.rebase_todo_file,
+ )
+ }
+
+ pub fn handle_n_events(&mut self, module: &'_ mut dyn ProcessModule, n: usize) -> Vec<ProcessResult> {
+ let mut results = vec![];
+ for _ in 0..n {
+ results.push(module.handle_events(
+ &self.event_handler_context.event_handler,
+ &self.view_sender_context.sender,
+ &mut self.rebase_todo_file,
+ ));
+ }
+ results
+ }
+
+ pub fn handle_all_events(&mut self, module: &'_ mut dyn ProcessModule) -> Vec<ProcessResult> {
+ let mut results = vec![];
+ for _ in 0..self.event_handler_context.number_events {
+ results.push(module.handle_events(
+ &self.event_handler_context.event_handler,
+ &self.view_sender_context.sender,
+ &mut self.rebase_todo_file,
+ ));
+ }
+ results
+ }
+
+ pub fn new_todo_file(&self) -> TodoFile {
+ TodoFile::new(self.get_todo_file_path().as_str(), 1, "#")
+ }
+
+ pub fn get_todo_file_path(&self) -> String {
+ let t = self.todo_file.replace(NamedTempFile::new().unwrap());
+ let path = t.path().to_str().unwrap().to_owned();
+ self.todo_file.replace(t);
+ path
+ }
+
+ pub fn delete_todo_file(&self) {
+ self.todo_file
+ .replace(Builder::new().tempfile().unwrap())
+ .close()
+ .unwrap();
+ }
+
+ pub fn set_todo_file_readonly(&self) {
+ let t = self.todo_file.replace(NamedTempFile::new().unwrap());
+ let todo_file = t.as_file();
+ let mut permissions = todo_file.metadata().unwrap().permissions();
+ permissions.set_readonly(true);
+ todo_file.set_permissions(permissions).unwrap();
+ self.todo_file.replace(t);
+ }
+}
+
+pub fn process_module_test<C>(lines: &[&str], events: &[Event], callback: C)
+where C: for<'p> FnOnce(TestContext<'p>) {
+ with_event_handler(events, |event_handler_context| {
+ with_view_sender(|view_sender_context| {
+ let git_repo_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
+ .join("test")
+ .join("fixtures")
+ .join("simple")
+ .to_str()
+ .unwrap()
+ .to_owned();
+ let todo_file = Builder::new()
+ .prefix("git-rebase-todo-scratch")
+ .suffix("")
+ .tempfile_in(git_repo_dir.as_str())
+ .unwrap();
+
+ let mut rebase_todo_file = TodoFile::new(todo_file.path().to_str().unwrap(), 1, "#");
+ rebase_todo_file.set_lines(lines.iter().map(|l| Line::new(l).unwrap()).collect());
+ callback(TestContext {
+ config: &create_config(),
+ event_handler_context,
+ rebase_todo_file,
+ view_sender_context,
+ todo_file: Cell::new(todo_file),
+ render_context: RenderContext::new(300, 120),
+ });
+ });
+ });
+}