diff --git a/crates/nu-explore/src/views/cursor/mod.rs b/crates/nu-explore/src/views/cursor/mod.rs index 4c37b70977..638b979897 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,26 @@ 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); + } }