tests.rs
raw
use super::*;
fn parse(text: &str) -> Result<AccelIr, Diagnostic> {
parse_accel(text, Span::new(0, text.len()))
}
#[test]
fn modifiers_and_a_key() {
let accel = parse("Ctrl+S").expect("valid");
assert_eq!(accel.key, AccelKey::Character("S".to_owned()));
assert!(accel.ctrl && !accel.shift && !accel.alt && !accel.logo);
let accel = parse("Ctrl+Shift+P").expect("valid");
assert!(accel.ctrl && accel.shift);
assert_eq!(accel.key, AccelKey::Character("P".to_owned()));
}
#[test]
fn a_bare_key_needs_no_modifiers() {
assert_eq!(parse("Delete").expect("valid").key, AccelKey::Delete);
assert_eq!(
parse("F").expect("valid").key,
AccelKey::Character("F".to_owned())
);
}
#[test]
fn spelling_is_normalized_not_preserved() {
// However it was written, the item renders one canonical form, and two
// spellings of the same accelerator are the same accelerator.
assert_eq!(parse("ctrl+s").unwrap(), parse("Ctrl+S").unwrap());
assert_eq!(parse("CONTROL + s").unwrap(), parse("Ctrl+S").unwrap());
assert_eq!(parse("shift+ctrl+s").unwrap().display(), "Ctrl+Shift+S");
assert_eq!(parse("cmd+Left").unwrap().display(), "Super+Left");
assert_eq!(parse("Return").unwrap().display(), "Enter");
}
#[test]
fn malformed_accelerators_are_pointed() {
for (text, want) in [
("Ctrl", "only modifiers"),
("Ctrl+", "empty part"),
("Ctrl+S+P", "more than one key"),
("Ctrl+Ctrl+S", "appears twice"),
("Ctrl+Nope", "neither a modifier nor a key name"),
] {
let error = parse(text).expect_err(text);
assert!(
error.message.contains(want),
"`{text}`: wanted {want:?}, got: {}",
error.message
);
}
}