use iris::prelude::*; fn editor(text: &str, mode: EditMode) -> (TextEdit, TextData) { let view = TextView::new(TextBuffer::new(text), TextAttrs::default(), None); (TextEdit::new(view, mode), TextData::default()) } fn press(edit: &mut TextEditCtx<'_>, x: f32) { edit.select(vec2(x, 10.0), vec2(400.0, 200.0), false, false); } #[test] fn pressing_an_empty_field_places_input() { let (mut text, mut data) = editor("", EditMode::SingleLine); let mut edit = TextEditCtx { text: &mut text, data: &mut data, }; press(&mut edit, 40.0); edit.insert("hello"); assert_eq!(edit.text.content(), "hello"); } #[test] fn preedit_replaces_the_previous_composition() { let (mut text, mut data) = editor("", EditMode::SingleLine); let mut edit = TextEditCtx { text: &mut text, data: &mut data, }; press(&mut edit, 0.0); edit.replace(0, "に"); edit.replace(1, "日本"); assert_eq!(edit.text.content(), "日本"); } #[test] fn backspace_respects_utf8_boundaries() { let (mut text, mut data) = editor("aé", EditMode::SingleLine); let mut edit = TextEditCtx { text: &mut text, data: &mut data, }; press(&mut edit, f32::MAX); edit.backspace(false); assert_eq!(edit.text.content(), "a"); } #[test] fn typing_replaces_the_selection() { let (mut text, mut data) = editor("hello", EditMode::SingleLine); let mut edit = TextEditCtx { text: &mut text, data: &mut data, }; edit.select_all(); edit.insert("goodbye"); assert_eq!(edit.text.content(), "goodbye"); }