add tests for key bindings in interactive mode

This commit is contained in:
Jinzhou Zhang 2020-10-04 10:28:49 +08:00
parent 3c3638ac00
commit c462ca136a
3 changed files with 74 additions and 1 deletions

View file

@ -425,6 +425,7 @@ impl Model {
cmd: self.query.get_cmd(),
query: self.query.get_fz_query(),
cmd_query: self.query.get_cmd_query(),
in_query_mode: self.query.in_query_mode(),
clear_selection: ClearStrategy::DontClear,
};
@ -503,7 +504,7 @@ impl Model {
}
Event::EvActDeleteCharEOF => {
if env.query.is_empty() {
if env.in_query_mode && env.query.is_empty() || !env.in_query_mode && env.cmd_query.is_empty() {
next_event = Some(Event::EvActAbort);
continue;
}
@ -754,6 +755,7 @@ struct ModelEnv {
pub query: String,
pub cmd_query: String,
pub clear_selection: ClearStrategy,
pub in_query_mode: bool,
}
#[derive(Clone)]

View file

@ -131,6 +131,13 @@ impl Query {
self.cmd_history_before = options.cmd_history.to_vec();
}
pub fn in_query_mode(&self) -> bool {
match self.mode {
QueryMode::CMD => false,
QueryMode::QUERY => true,
}
}
pub fn get_fz_query(&self) -> String {
self.fz_query_before
.iter()

View file

@ -385,6 +385,70 @@ class TestSkim(TestBase):
self.tmux.send_keys(Ctrl('m'))
self.tmux.until(lambda lines: not lines[-1].startswith('>'))
def test_key_bindings_interactive(self):
self.tmux.send_keys(f"{SK} -i --cmd-query 'foo bar foo-bar'", Key('Enter'))
self.tmux.until(lambda lines: lines[-1].startswith('c>'))
# Ctrl-A
self.tmux.send_keys(Ctrl('a'), Key('('))
self.tmux.until(lambda lines: lines[-1] == 'c> (foo bar foo-bar')
## Meta-F
self.tmux.send_keys(Alt('f'), Key(')'))
self.tmux.until(lambda lines: lines[-1] == 'c> (foo) bar foo-bar')
# CTRL-B
self.tmux.send_keys(Ctrl('b'), 'var')
self.tmux.until(lambda lines: lines[-1] == 'c> (foovar) bar foo-bar')
# Left, CTRL-D
self.tmux.send_keys(Key('Left'), Key('Left'), Ctrl('d'))
self.tmux.until(lambda lines: lines[-1] == 'c> (foovr) bar foo-bar')
# # META-BS
self.tmux.send_keys(Alt('BSpace'))
self.tmux.until(lambda lines: lines[-1] == 'c> (r) bar foo-bar')
# # # CTRL-Y
self.tmux.send_keys(Ctrl('y'), Ctrl('y'))
self.tmux.until(lambda lines: lines[-1] == 'c> (foovfoovr) bar foo-bar')
# META-B
self.tmux.send_keys(Alt('b'), Key('Space'), Key('Space'))
self.tmux.until(lambda lines: lines[-1] == 'c> ( foovfoovr) bar foo-bar')
# CTRL-F / Right
self.tmux.send_keys( Ctrl('f'), Key('Right'), '/')
self.tmux.until(lambda lines: lines[-1] == 'c> ( fo/ovfoovr) bar foo-bar')
# CTRL-H / BS
self.tmux.send_keys( Ctrl('h'), Key('BSpace'))
self.tmux.until(lambda lines: lines[-1] == 'c> ( fovfoovr) bar foo-bar')
# CTRL-E
self.tmux.send_keys(Ctrl('e'), 'baz')
self.tmux.until(lambda lines: lines[-1] == 'c> ( fovfoovr) bar foo-barbaz')
# CTRL-U
self.tmux.send_keys( Ctrl('u'))
self.tmux.until(lambda lines: lines[-1] == 'c>')
# CTRL-Y
self.tmux.send_keys( Ctrl('y'))
self.tmux.until(lambda lines: lines[-1] == 'c> ( fovfoovr) bar foo-barbaz')
# CTRL-W
self.tmux.send_keys( Ctrl('w'), 'bar-foo')
self.tmux.until(lambda lines: lines[-1] == 'c> ( fovfoovr) bar bar-foo')
# # META-D
self.tmux.send_keys(Alt('b'), Alt('b'), Alt('d'), Ctrl('a'), Ctrl('y'))
self.tmux.until(lambda lines: lines[-1] == 'c> bar( fovfoovr) bar -foo')
# CTRL-M
self.tmux.send_keys(Ctrl('m'))
self.tmux.until(lambda lines: not lines[-1].startswith('c>'))
def test_read0(self):
nfiles = subprocess.check_output("find .", shell=True).decode("utf-8").strip().split("\n")
num_of_files = len(nfiles)