1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
use crate::{
components::confirm::{Confirm, Confirmed},
input::EventHandler,
process::{exit_status::ExitStatus, process_module::ProcessModule, process_result::ProcessResult, state::State},
todo_file::TodoFile,
view::{render_context::RenderContext, view_data::ViewData, ViewSender},
};
pub struct ConfirmRebase {
dialog: Confirm,
}
impl ProcessModule for ConfirmRebase {
fn build_view_data(&mut self, _: &RenderContext, _: &TodoFile) -> &ViewData {
self.dialog.get_view_data()
}
fn handle_events(&mut self, event_handler: &EventHandler, _: &ViewSender, _: &mut TodoFile) -> ProcessResult {
let (confirmed, event) = self.dialog.handle_event(event_handler);
let mut result = ProcessResult::from(event);
match confirmed {
Confirmed::Yes => {
result = result.exit_status(ExitStatus::Good);
},
Confirmed::No => {
result = result.state(State::List);
},
Confirmed::Other => {},
}
result
}
}
impl ConfirmRebase {
pub(crate) fn new(confirm_yes: &[String], confirm_no: &[String]) -> Self {
Self {
dialog: Confirm::new("Are you sure you want to rebase", confirm_yes, confirm_no),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{
assert_process_result,
assert_rendered_output,
input::{Event, KeyCode, MetaEvent},
process::testutil::{process_module_test, TestContext},
};
#[test]
fn build_view_data() {
process_module_test(&["pick aaa comment"], &[], |test_context: TestContext<'_>| {
let mut module = ConfirmRebase::new(
&test_context.config.key_bindings.confirm_yes,
&test_context.config.key_bindings.confirm_no,
);
let view_data = test_context.build_view_data(&mut module);
assert_rendered_output!(
view_data,
"{TITLE}",
"{BODY}",
"{Normal}Are you sure you want to rebase (y/n)? "
);
});
}
#[test]
fn handle_event_yes() {
process_module_test(
&["pick aaa comment"],
&[Event::from(MetaEvent::Yes)],
|mut test_context: TestContext<'_>| {
let mut module = ConfirmRebase::new(
&test_context.config.key_bindings.confirm_yes,
&test_context.config.key_bindings.confirm_no,
);
assert_process_result!(
test_context.handle_event(&mut module),
event = Event::from(MetaEvent::Yes),
exit_status = ExitStatus::Good
);
assert!(!test_context.rebase_todo_file.is_empty());
},
);
}
#[test]
fn handle_event_no() {
process_module_test(
&["pick aaa comment"],
&[Event::from(MetaEvent::No)],
|mut test_context: TestContext<'_>| {
let mut module = ConfirmRebase::new(
&test_context.config.key_bindings.confirm_yes,
&test_context.config.key_bindings.confirm_no,
);
assert_process_result!(
test_context.handle_event(&mut module),
event = Event::from(MetaEvent::No),
state = State::List
);
},
);
}
#[test]
fn handle_event_no_match_key() {
process_module_test(
&["pick aaa comment"],
&[Event::from(KeyCode::Null)],
|mut test_context: TestContext<'_>| {
let mut module = ConfirmRebase::new(
&test_context.config.key_bindings.confirm_yes,
&test_context.config.key_bindings.confirm_no,
);
assert_process_result!(
test_context.handle_event(&mut module),
event = Event::from(KeyCode::Null)
);
},
);
}
}
|