#[cfg(test)]
mod tests {
use crossterm::event::{KeyCode, KeyModifiers};
use crate::{assert_eq2, crossterm_keyevent, key_press, throws, FunctionKey, Key,
KeyPress, ModifierKeysMask, SpecialKey};
#[test]
fn test_keypress_character_key() {
{
let macro_syntax = key_press! { @char 'a' };
let struct_syntax = KeyPress::Plain {
key: Key::Character('a'),
};
assert_eq2!(macro_syntax, struct_syntax);
}
{
let macro_syntax = key_press! { @char ModifierKeysMask::new().with_shift().with_ctrl(), 'a' };
let struct_syntax = KeyPress::WithModifiers {
key: Key::Character('a'),
mask: ModifierKeysMask::new().with_shift().with_ctrl(),
};
assert_eq2!(macro_syntax, struct_syntax);
}
}
#[test]
fn test_keypress_special_key() {
{
let macro_syntax = key_press! { @special SpecialKey::Left };
let struct_syntax = KeyPress::Plain {
key: Key::SpecialKey(SpecialKey::Left),
};
assert_eq2!(macro_syntax, struct_syntax);
}
{
let macro_syntax = key_press! { @special ModifierKeysMask::new().with_alt().with_ctrl(), SpecialKey::Left };
let struct_syntax = KeyPress::WithModifiers {
key: Key::SpecialKey(SpecialKey::Left),
mask: ModifierKeysMask::new().with_alt().with_ctrl(),
};
assert_eq2!(macro_syntax, struct_syntax);
}
}
#[test]
fn test_keypress_function_key() {
{
let macro_syntax = key_press! { @fn FunctionKey::F1 };
let struct_syntax = KeyPress::Plain {
key: Key::FunctionKey(FunctionKey::F1),
};
assert_eq2!(macro_syntax, struct_syntax);
}
{
let macro_syntax =
key_press! { @fn ModifierKeysMask::new().with_shift(), FunctionKey::F1 };
let struct_syntax = KeyPress::WithModifiers {
key: Key::FunctionKey(FunctionKey::F1),
mask: ModifierKeysMask::new().with_shift(),
};
assert_eq2!(macro_syntax, struct_syntax);
}
}
#[test]
#[allow(clippy::missing_errors_doc)]
fn test_keypress() -> Result<(), ()> {
throws!({
{
let key_event = crossterm_keyevent!(code: KeyCode::Char('x'), modifiers: KeyModifiers::NONE);
let keypress: KeyPress = key_event.try_into()?;
assert_eq2!(
keypress,
KeyPress::Plain {
key: Key::Character('x'),
}
);
}
{
let key_event = crossterm_keyevent!(code: KeyCode::Char('x'), modifiers: KeyModifiers::CONTROL);
let converted_keypress: KeyPress = key_event.try_into()?;
assert_eq2!(
converted_keypress,
KeyPress::WithModifiers {
mask: ModifierKeysMask::new().with_ctrl(),
key: Key::Character('x'),
}
);
}
{
let key_event = crossterm_keyevent!(
code: KeyCode::Char('x'),
modifiers: KeyModifiers::CONTROL | KeyModifiers::ALT
);
let converted_keypress: KeyPress = key_event.try_into()?;
assert_eq2!(
converted_keypress,
KeyPress::WithModifiers {
mask: ModifierKeysMask::new().with_alt().with_ctrl(),
key: Key::Character('x'),
}
);
}
});
}
}