blob: dc3f8f0a32ee0c4db580e40110c4d0e5a48f5c94 [file] [log] [blame]
//! History related commands tests
use super::assert_history;
use config::EditMode;
use keys::KeyPress;
#[test]
fn down_key() {
for mode in &[EditMode::Emacs, EditMode::Vi] {
assert_history(
*mode,
&["line1"],
&[KeyPress::Down, KeyPress::Enter],
("", ""),
);
assert_history(
*mode,
&["line1", "line2"],
&[KeyPress::Up, KeyPress::Up, KeyPress::Down, KeyPress::Enter],
("line2", ""),
);
assert_history(
*mode,
&["line1"],
&[
KeyPress::Char('a'),
KeyPress::Up,
KeyPress::Down, // restore original line
KeyPress::Enter,
],
("a", ""),
);
assert_history(
*mode,
&["line1"],
&[
KeyPress::Char('a'),
KeyPress::Down, // noop
KeyPress::Enter,
],
("a", ""),
);
}
}
#[test]
fn up_key() {
for mode in &[EditMode::Emacs, EditMode::Vi] {
assert_history(*mode, &[], &[KeyPress::Up, KeyPress::Enter], ("", ""));
assert_history(
*mode,
&["line1"],
&[KeyPress::Up, KeyPress::Enter],
("line1", ""),
);
assert_history(
*mode,
&["line1", "line2"],
&[KeyPress::Up, KeyPress::Up, KeyPress::Enter],
("line1", ""),
);
}
}
#[test]
fn ctrl_r() {
for mode in &[EditMode::Emacs, EditMode::Vi] {
assert_history(
*mode,
&[],
&[KeyPress::Ctrl('R'), KeyPress::Char('o'), KeyPress::Enter],
("o", ""),
);
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('o'),
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("cargo", ""),
);
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('u'),
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("ru", "stc"),
);
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('r'),
KeyPress::Char('u'),
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("r", "ustc"),
);
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('r'),
KeyPress::Ctrl('R'),
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("r", "ustc"),
);
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('r'),
KeyPress::Char('z'), // no match
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("car", "go"),
);
assert_history(
EditMode::Emacs,
&["rustc", "cargo"],
&[
KeyPress::Char('a'),
KeyPress::Ctrl('R'),
KeyPress::Char('r'),
KeyPress::Ctrl('G'), // abort (FIXME: doesn't work with vi mode)
KeyPress::Enter,
],
("a", ""),
);
}
}
#[test]
fn ctrl_s() {
for mode in &[EditMode::Emacs, EditMode::Vi] {
assert_history(
*mode,
&["rustc", "cargo"],
&[
KeyPress::Ctrl('R'),
KeyPress::Char('r'),
KeyPress::Ctrl('R'),
KeyPress::Ctrl('S'),
KeyPress::Right, // just to assert cursor pos
KeyPress::Enter,
],
("car", "go"),
);
}
}
#[test]
fn meta_lt() {
assert_history(
EditMode::Emacs,
&[""],
&[KeyPress::Meta('<'), KeyPress::Enter],
("", ""),
);
assert_history(
EditMode::Emacs,
&["rustc", "cargo"],
&[KeyPress::Meta('<'), KeyPress::Enter],
("rustc", ""),
);
}
#[test]
fn meta_gt() {
assert_history(
EditMode::Emacs,
&[""],
&[KeyPress::Meta('>'), KeyPress::Enter],
("", ""),
);
assert_history(
EditMode::Emacs,
&["rustc", "cargo"],
&[KeyPress::Meta('<'), KeyPress::Meta('>'), KeyPress::Enter],
("", ""),
);
assert_history(
EditMode::Emacs,
&["rustc", "cargo"],
&[
KeyPress::Char('a'),
KeyPress::Meta('<'),
KeyPress::Meta('>'), // restore original line
KeyPress::Enter,
],
("a", ""),
);
}