From 28ce80211681c7a9c4ae8301523ebe6e6b76455a Mon Sep 17 00:00:00 2001 From: Matthew Gordon Date: Thu, 27 Nov 2025 21:26:46 -0400 Subject: [PATCH] Implement EditorBuffer::move_cursor_to_line_number() --- core/src/editor_buffer/mod.rs | 57 +++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/core/src/editor_buffer/mod.rs b/core/src/editor_buffer/mod.rs index 1e4249f..9cc09d9 100644 --- a/core/src/editor_buffer/mod.rs +++ b/core/src/editor_buffer/mod.rs @@ -93,8 +93,8 @@ impl EditorBuffer { }) } - fn move_cursor_to_line_number(&self, _line_num: usize) -> CommandResult { - todo!() + fn move_cursor_to_line_number(&self, line_num: usize) -> CommandResult { + self.move_cursor_to_point(Point::LineColumn(line_num, 0)) } fn insert_char(&self, c: char) -> CommandResult { @@ -321,4 +321,57 @@ mod tests { .collect(); assert_eq!(expected_lines, found_lines); } + + #[test] + fn insert_line() { + let mut test_file = create_simple_test_file(); + let mut file_contents = String::new(); + test_file + .read_to_string(&mut file_contents) + .expect("Reading text file"); + let test_file = test_file; + let mut expected_lines: Vec<_> = file_contents.lines().collect(); + expected_lines.insert(6, "abc 123".into()); + + let target = EditorBuffer::new(); + let result = target.execute(Command::OpenFile(test_file.path().into())); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::MoveCursorToLine(7)); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('a')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('b')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('c')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar(' ')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('1')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('2')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('3')); + assert!(result.is_ok()); + let target = result.buffer; + let result = target.execute(Command::InsertChar('\n')); + assert!(result.is_ok()); + let target = result.buffer; + let found_lines: Vec = target + .buffer + .iter_chars() + .collect::() + .lines() + .map(|l| l.into()) + .collect(); + assert_eq!(expected_lines, found_lines); + assert_eq!(Point::LineColumn(8, 0), target.get_cursor_position()); + } }