From 218d442694effb749961f8884f324ecf2a406d9e Mon Sep 17 00:00:00 2001 From: Dark-Alex-17 Date: Tue, 8 Aug 2023 10:50:18 -0600 Subject: [PATCH] Fixed unicode bug where horizontally scrollable text would attempt to iterate beyond the length of the string; this happens whenever unicode values are present in the string --- src/models/mod.rs | 20 +++++++++++--------- src/models/model_tests.rs | 9 +++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/models/mod.rs b/src/models/mod.rs index a9d7fd4..e247be2 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -230,8 +230,12 @@ impl HorizontallyScrollableText { } } + pub fn len(&self) -> usize { + self.text.chars().count() + } + pub fn scroll_left(&self) { - if *self.offset.borrow() < self.text.len() { + if *self.offset.borrow() < self.len() { let new_offset = *self.offset.borrow() + 1; *self.offset.borrow_mut() = new_offset; } @@ -245,7 +249,7 @@ impl HorizontallyScrollableText { } pub fn scroll_home(&self) { - *self.offset.borrow_mut() = self.text.len(); + *self.offset.borrow_mut() = self.len(); } pub fn reset_offset(&self) { @@ -253,8 +257,8 @@ impl HorizontallyScrollableText { } pub fn scroll_left_or_reset(&self, width: usize, is_current_selection: bool, can_scroll: bool) { - if can_scroll && is_current_selection && self.text.len() >= width { - if *self.offset.borrow() < self.text.len() { + if can_scroll && is_current_selection && self.len() >= width { + if *self.offset.borrow() < self.len() { self.scroll_left(); } else { self.reset_offset(); @@ -265,17 +269,15 @@ impl HorizontallyScrollableText { } pub fn pop(&mut self) { - if *self.offset.borrow() < self.text.len() { - self - .text - .remove(self.text.len() - *self.offset.borrow() - 1); + if *self.offset.borrow() < self.len() { + self.text.remove(self.len() - *self.offset.borrow() - 1); } } pub fn push(&mut self, character: char) { self .text - .insert(self.text.len() - *self.offset.borrow(), character); + .insert(self.len() - *self.offset.borrow(), character); } } diff --git a/src/models/model_tests.rs b/src/models/model_tests.rs index 9845661..7bea973 100644 --- a/src/models/model_tests.rs +++ b/src/models/model_tests.rs @@ -338,6 +338,15 @@ mod tests { assert_str_eq!(horizontally_scrollable_text.text, test_text); } + #[test] + fn test_horizontally_scrollable_text_len() { + let test_text = "우리 생애 최고의 해 The.Best"; + let horizontally_scrollable_text = HorizontallyScrollableText::new(test_text.to_owned()); + + assert_eq!(horizontally_scrollable_text.len(), 20); + assert_str_eq!(horizontally_scrollable_text.text, test_text); + } + #[test] fn test_horizontally_scrollable_text_scroll_text_left() { let horizontally_scrollable_text = HorizontallyScrollableText::from("Test string");