diff --git a/src/highlight.rs b/src/highlight.rs index d834bfa..c8bb8b9 100644 --- a/src/highlight.rs +++ b/src/highlight.rs @@ -275,7 +275,7 @@ mod tests { #[test] #[rustfmt::skip] - fn test_line_display_text() { + fn line_display_text() { assert_eq!(&build( "", 0, None), ""); assert_eq!(&build( "", 4, None), ""); assert_eq!(&build( "", 8, None), ""); diff --git a/tests/input.rs b/tests/input.rs new file mode 100644 index 0000000..0e48fce --- /dev/null +++ b/tests/input.rs @@ -0,0 +1,75 @@ +use tui_textarea::{Input, Key, TextArea}; + +// Sanity test for checking textarea does not crash against all combination of inputs +#[test] +fn test_input_all_combinations_sanity() { + use Key::*; + + fn push_all_modifiers_combination(inputs: &mut Vec, key: Key) { + for ctrl in [true, false] { + for alt in [true, false] { + for shift in [true, false] { + inputs.push(Input { + key, + ctrl, + alt, + shift, + }); + } + } + } + } + + let mut inputs = vec![]; + + for c in ' '..='~' { + push_all_modifiers_combination(&mut inputs, Char(c)); + } + for i in 0..=15 { + push_all_modifiers_combination(&mut inputs, F(i)); + } + for k in [ + Null, + Char('ใ‚'), + Char('๐Ÿถ'), + Backspace, + Enter, + Left, + Right, + Up, + Down, + Tab, + Delete, + Home, + End, + PageUp, + PageDown, + Esc, + MouseScrollDown, + MouseScrollUp, + ] { + push_all_modifiers_combination(&mut inputs, k); + } + + let mut t = TextArea::from(["abc", "def", "ghi", "jkl", "mno", "pqr"]); + + for input in inputs { + t.input(input.clone()); + t.input_without_shortcuts(input); + } +} + +#[test] +fn test_insert_multi_code_unit_emoji() { + let mut t = TextArea::default(); + for c in "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ".chars() { + let input = Input { + key: Key::Char(c), + ctrl: false, + alt: false, + shift: false, + }; + assert!(t.input(input), "{c:?}"); + } + assert_eq!(t.lines(), ["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ"]); +}