From 29fb3f11502e1d69ec1f01e5da87abf212a16264 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Fri, 1 Apr 2016 12:36:25 -0700 Subject: [PATCH] Find the correct column index in adjust_vertical --- components/script/textinput.rs | 5 ++++- tests/unit/script/textinput.rs | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/components/script/textinput.rs b/components/script/textinput.rs index 1f0cb0c53d8..4992cffb3d4 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -301,8 +301,11 @@ impl TextInput { return; } + + let col = self.lines[self.edit_point.line][..self.edit_point.index].chars().count(); + self.edit_point.line = target_line as usize; - self.edit_point.index = min(self.current_line_length(), self.edit_point.index); + self.edit_point.index = len_of_first_n_chars(&self.lines[self.edit_point.line], col); } /// Adjust the editing point position by a given number of bytes. If the adjustment diff --git a/tests/unit/script/textinput.rs b/tests/unit/script/textinput.rs index ee40c9ff50c..f5ee2feeb35 100644 --- a/tests/unit/script/textinput.rs +++ b/tests/unit/script/textinput.rs @@ -244,6 +244,19 @@ fn test_textinput_adjust_vertical() { assert_eq!(textinput.edit_point.index, 1); } +#[test] +fn test_textinput_adjust_vertical_multibyte() { + let mut textinput = text_input(Lines::Multiple, "áé\nae"); + + textinput.adjust_horizontal_by_one(Direction::Forward, Selection::NotSelected); + assert_eq!(textinput.edit_point.line, 0); + assert_eq!(textinput.edit_point.index, 2); + + textinput.adjust_vertical(1, Selection::NotSelected); + assert_eq!(textinput.edit_point.line, 1); + assert_eq!(textinput.edit_point.index, 1); +} + #[test] fn test_textinput_adjust_horizontal() { let mut textinput = text_input(Lines::Multiple, "abc\nde\nf");