use requestty::Question; use ui::{ events::{KeyCode, TestEvents}, style::Color, }; mod helpers; #[test] fn test_tranform() { let size = (50, 20).into(); let expand = Question::expand("name") .message("message") .choices(('a'..='g').map(|key| (key, format!("Choice {}", key.to_ascii_uppercase())))) .transform(|ans, _, b| { b.set_fg(Color::Magenta)?; write!(b, "{}: {}", ans.key, ans.text)?; b.set_fg(Color::Reset) }); let mut backend = helpers::SnapshotOnFlushBackend::new(size); let mut events = TestEvents::new(vec![ KeyCode::Char('a').into(), KeyCode::Char('h').into(), KeyCode::Backspace.into(), KeyCode::Enter.into(), KeyCode::Char('b').into(), KeyCode::Enter.into(), ]); let ans = requestty::prompt_one_with(expand, &mut backend, &mut events) .unwrap() .try_into_expand_item() .unwrap(); assert_eq!(ans.key, 'b'); } #[test] fn test_default() { let size = (50, 20).into(); let expand = Question::expand("name") .message("message") .default('d') .choices(('a'..='g').map(|key| (key, format!("Choice {}", key.to_ascii_uppercase())))) .transform(|ans, _, b| { b.set_fg(Color::Magenta)?; write!(b, "{}: {}", ans.key, ans.text)?; b.set_fg(Color::Reset) }); let mut backend = helpers::SnapshotOnFlushBackend::new(size); let mut events = TestEvents::new(Some(KeyCode::Enter.into())); let ans = requestty::prompt_one_with(expand, &mut backend, &mut events) .unwrap() .try_into_expand_item() .unwrap(); assert_eq!(ans.key, 'd'); let expand = Question::expand("name") .message("message") .default('d') .choices(('a'..='g').map(|key| (key, format!("Choice {}", key.to_ascii_uppercase())))); let mut backend = helpers::SnapshotOnFlushBackend::new(size); let mut events = TestEvents::new(vec![ KeyCode::Char('h').into(), KeyCode::Enter.into(), KeyCode::Enter.into(), ]); let ans = requestty::prompt_one_with(expand, &mut backend, &mut events) .unwrap() .try_into_expand_item() .unwrap(); assert_eq!(ans.key, 'd'); } #[test] fn test_on_esc() { let size = (50, 20).into(); let mut backend = helpers::SnapshotOnFlushBackend::new(size); let mut events = TestEvents::new(Some(KeyCode::Esc.into())); let res = requestty::prompt_one_with( Question::expand("name") .message("message") .default('d') .choices(('a'..='g').map(|key| (key, format!("Choice {}", key.to_ascii_uppercase())))) .on_esc(requestty::OnEsc::Terminate), &mut backend, &mut events, ); assert!(matches!(res, Err(requestty::ErrorKind::Aborted))); let size = (50, 20).into(); let mut backend = helpers::SnapshotOnFlushBackend::new(size); let mut events = TestEvents::new(Some(KeyCode::Esc.into())); let res = requestty::prompt_with( Some( Question::expand("name") .message("message") .default('d') .choices( ('a'..='g').map(|key| (key, format!("Choice {}", key.to_ascii_uppercase()))), ) .on_esc(requestty::OnEsc::SkipQuestion) .build(), ), &mut backend, &mut events, ) .unwrap(); assert!(res.is_empty()); }