use crate::{
formatter::MultiOptionFormatter,
list_option::ListOption,
test::fake_backend,
ui::{Key, KeyModifiers},
Sort,
};
#[test]
fn closure_formatter() {
let mut backend = fake_backend(vec![Key::Enter]);
let formatted = String::from("Custom Sort Finished!");
let formatter: MultiOptionFormatter<'_, i32> = &|_| formatted.clone();
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.with_formatter(formatter)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 1),
ListOption::new(1, 2),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}
#[test]
fn default_no_op_submission() {
let mut backend = fake_backend(vec![Key::Enter]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 1),
ListOption::new(1, 2),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}
#[test]
fn drag_item_down_via_space_and_arrow() {
let mut backend = fake_backend(vec![
Key::Char(' ', KeyModifiers::NONE), Key::Down(KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Enter, ]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 2),
ListOption::new(1, 1),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}
#[test]
fn move_cursor_and_drag_up() {
let mut backend = fake_backend(vec![
Key::Down(KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Up(KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Enter,
]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 2),
ListOption::new(1, 1),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}
#[test]
fn starting_cursor_is_respected() {
let mut backend = fake_backend(vec![
Key::Char(' ', KeyModifiers::NONE), Key::Up(KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Enter,
]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.with_starting_cursor(2)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 1),
ListOption::new(1, 3),
ListOption::new(2, 2),
];
assert_eq!(expected, ans);
}
#[test]
fn edge_drag_does_not_panic_or_corrupt() {
let mut backend = fake_backend(vec![
Key::Char(' ', KeyModifiers::NONE), Key::Up(KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Enter,
]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 1),
ListOption::new(1, 2),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}
#[test]
fn vim_mode_navigation_and_drag() {
let mut backend = fake_backend(vec![
Key::Char('j', KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Char('j', KeyModifiers::NONE), Key::Char('k', KeyModifiers::NONE), Key::Char(' ', KeyModifiers::NONE), Key::Enter,
]);
let options = vec![1, 2, 3];
let ans = Sort::new("Question", options)
.with_vim_mode(true)
.prompt_with_backend(&mut backend)
.unwrap();
let expected = vec![
ListOption::new(0, 1),
ListOption::new(1, 2),
ListOption::new(2, 3),
];
assert_eq!(expected, ans);
}