From eb86d549a19e9a1def7d5e3f00e4834e34a73658 Mon Sep 17 00:00:00 2001 From: Chetan baliyan Date: Sun, 15 Dec 2024 20:49:37 +0530 Subject: [PATCH] fix(explore): handle cursor size zero using saturating_sub --- crates/nu-explore/src/views/cursor/mod.rs | 26 ++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/crates/nu-explore/src/views/cursor/mod.rs b/crates/nu-explore/src/views/cursor/mod.rs index 4c37b70977..7c260af197 100644 --- a/crates/nu-explore/src/views/cursor/mod.rs +++ b/crates/nu-explore/src/views/cursor/mod.rs @@ -36,7 +36,7 @@ impl Cursor { /// The max position the cursor can be at pub fn end(&self) -> usize { - self.size - 1 + self.size.saturating_sub(1) } /// Set the position to a specific value within the bounds [0, end] @@ -121,4 +121,28 @@ mod tests { cursor.move_backward(3); assert_eq!(cursor.position, 0); } + + #[test] + fn test_cursor_size_zero_handling() { + + let cursor = Cursor::new(0); + assert_eq!(cursor.end(), 0); + + let mut cursor = Cursor::new(0); + cursor.move_forward(1); + assert_eq!(cursor.position, 0); + + cursor.move_backward(1); + assert_eq!(cursor.position, 0); + } + + #[test] + fn test_cursor_size_one() { + let mut cursor = Cursor::new(1); + assert_eq!(cursor.end(), 0); + + cursor.move_forward(1); + assert_eq!(cursor.position, 0); + } + }