vim_binding_test_context.rs

 1use std::ops::{Deref, DerefMut};
 2
 3use crate::*;
 4
 5use super::VimTestContext;
 6
 7pub struct VimBindingTestContext<'a, const COUNT: usize> {
 8    cx: VimTestContext<'a>,
 9    keystrokes_under_test: [&'static str; COUNT],
10    mode_before: Mode,
11    mode_after: Mode,
12}
13
14impl<'a, const COUNT: usize> VimBindingTestContext<'a, COUNT> {
15    pub fn new(
16        keystrokes_under_test: [&'static str; COUNT],
17        mode_before: Mode,
18        mode_after: Mode,
19        cx: VimTestContext<'a>,
20    ) -> Self {
21        Self {
22            cx,
23            keystrokes_under_test,
24            mode_before,
25            mode_after,
26        }
27    }
28
29    pub fn binding<const NEW_COUNT: usize>(
30        self,
31        keystrokes_under_test: [&'static str; NEW_COUNT],
32    ) -> VimBindingTestContext<'a, NEW_COUNT> {
33        VimBindingTestContext {
34            keystrokes_under_test,
35            cx: self.cx,
36            mode_before: self.mode_before,
37            mode_after: self.mode_after,
38        }
39    }
40
41    pub fn assert(&mut self, initial_state: &str, state_after: &str) {
42        self.cx.assert_binding(
43            self.keystrokes_under_test,
44            initial_state,
45            self.mode_before,
46            state_after,
47            self.mode_after,
48        )
49    }
50}
51
52impl<'a, const COUNT: usize> Deref for VimBindingTestContext<'a, COUNT> {
53    type Target = VimTestContext<'a>;
54
55    fn deref(&self) -> &Self::Target {
56        &self.cx
57    }
58}
59
60impl<'a, const COUNT: usize> DerefMut for VimBindingTestContext<'a, COUNT> {
61    fn deref_mut(&mut self) -> &mut Self::Target {
62        &mut self.cx
63    }
64}