use super::*;
use crate::input::{Event, Key};
#[test]
fn test_terminal_event_subscription_creation() {
let _sub = TerminalEventSubscription::new(|event: Event| {
if let Some(key) = event.as_key() {
if key.code == Key::Char('q') {
return Some(TestMsg::Quit);
}
}
None
});
let _sub2 = terminal_events(|event: Event| {
if let Some(key) = event.as_key() {
if key.code == Key::Enter {
return Some(TestMsg::Tick);
}
}
None
});
}
#[test]
fn test_terminal_event_handler_filters_events() {
let handler = |event: Event| -> Option<TestMsg> {
if let Some(key) = event.as_key() {
if key.code == Key::Char('q') {
return Some(TestMsg::Quit);
}
}
None
};
assert_eq!(handler(Event::char('q')), Some(TestMsg::Quit));
assert_eq!(handler(Event::char('a')), None);
assert_eq!(handler(Event::Resize(80, 24)), None);
}
#[test]
fn test_terminal_event_handler_with_modifiers() {
let handler = |event: Event| -> Option<TestMsg> {
if let Some(key) = event.as_key() {
if key.code == Key::Char('c') && key.modifiers.ctrl() {
return Some(TestMsg::Quit);
}
}
None
};
assert_eq!(handler(Event::ctrl('c')), Some(TestMsg::Quit));
assert_eq!(handler(Event::char('c')), None);
}
#[test]
fn test_terminal_event_handler_resize() {
#[derive(Debug, Clone, PartialEq)]
enum ResizeMsg {
Resize(u16, u16),
}
let handler = |event: Event| -> Option<ResizeMsg> {
if let Event::Resize(width, height) = event {
Some(ResizeMsg::Resize(width, height))
} else {
None
}
};
let resize_event = Event::Resize(120, 40);
assert_eq!(handler(resize_event), Some(ResizeMsg::Resize(120, 40)));
assert_eq!(handler(Event::key(Key::Enter)), None);
}
#[derive(Clone, Debug, PartialEq)]
enum TestMsgWithQuit {
Quit,
Key(char),
}
#[test]
fn test_terminal_events_convenience_function() {
let sub = terminal_events(|event: Event| -> Option<TestMsgWithQuit> {
if let Some(key) = event.as_key() {
if key.code == Key::Char('q') {
return Some(TestMsgWithQuit::Quit);
}
if let Some(c) = key.raw_char {
return Some(TestMsgWithQuit::Key(c));
}
}
None
});
assert_eq!(
(sub.event_handler)(Event::char('q')),
Some(TestMsgWithQuit::Quit)
);
assert_eq!(
(sub.event_handler)(Event::char('a')),
Some(TestMsgWithQuit::Key('a'))
);
}