Fix toggling deletion hunk with mouse at start of buffer (#25726)
Closes #ISSUE Release Notes: - N/A
This commit is contained in:
parent
e8ef36edcc
commit
4e60ebab5e
2 changed files with 73 additions and 1 deletions
|
@ -15084,6 +15084,78 @@ async fn test_adjacent_diff_hunks(executor: BackgroundExecutor, cx: &mut TestApp
|
|||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_toggle_deletion_hunk_at_start_of_file(
|
||||
executor: BackgroundExecutor,
|
||||
cx: &mut TestAppContext,
|
||||
) {
|
||||
init_test(cx, |_| {});
|
||||
let mut cx = EditorTestContext::new(cx).await;
|
||||
|
||||
let diff_base = r#"
|
||||
a
|
||||
b
|
||||
c
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
cx.set_state(
|
||||
&r#"
|
||||
ˇb
|
||||
c
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
cx.set_head_text(&diff_base);
|
||||
cx.update_editor(|editor, window, cx| {
|
||||
editor.expand_all_diff_hunks(&ExpandAllDiffHunks, window, cx);
|
||||
});
|
||||
executor.run_until_parked();
|
||||
|
||||
let hunk_expanded = r#"
|
||||
- a
|
||||
ˇb
|
||||
c
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
cx.assert_state_with_diff(hunk_expanded.clone());
|
||||
|
||||
let hunk_ranges = cx.update_editor(|editor, window, cx| {
|
||||
let snapshot = editor.snapshot(window, cx);
|
||||
let hunks = editor
|
||||
.diff_hunks_in_ranges(&[Anchor::min()..Anchor::max()], &snapshot.buffer_snapshot)
|
||||
.collect::<Vec<_>>();
|
||||
let excerpt_id = editor.buffer.read(cx).excerpt_ids()[0];
|
||||
let buffer_id = hunks[0].buffer_id;
|
||||
hunks
|
||||
.into_iter()
|
||||
.map(|hunk| Anchor::range_in_buffer(excerpt_id, buffer_id, hunk.buffer_range.clone()))
|
||||
.collect::<Vec<_>>()
|
||||
});
|
||||
assert_eq!(hunk_ranges.len(), 1);
|
||||
|
||||
cx.update_editor(|editor, _, cx| {
|
||||
editor.toggle_single_diff_hunk(hunk_ranges[0].clone(), cx);
|
||||
});
|
||||
executor.run_until_parked();
|
||||
|
||||
let hunk_collapsed = r#"
|
||||
ˇb
|
||||
c
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
cx.assert_state_with_diff(hunk_collapsed);
|
||||
|
||||
cx.update_editor(|editor, _, cx| {
|
||||
editor.toggle_single_diff_hunk(hunk_ranges[0].clone(), cx);
|
||||
});
|
||||
executor.run_until_parked();
|
||||
|
||||
cx.assert_state_with_diff(hunk_expanded.clone());
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_display_diff_hunks(cx: &mut TestAppContext) {
|
||||
init_test(cx, |_| {});
|
||||
|
|
|
@ -2417,7 +2417,7 @@ impl MultiBuffer {
|
|||
let snapshot = self.read(cx);
|
||||
let mut cursor = snapshot.diff_transforms.cursor::<usize>(&());
|
||||
let offset_range = range.to_offset(&snapshot);
|
||||
cursor.seek(&offset_range.start, Bias::Right, &());
|
||||
cursor.seek(&offset_range.start, Bias::Left, &());
|
||||
while let Some(item) = cursor.item() {
|
||||
if *cursor.start() >= offset_range.end && *cursor.start() > offset_range.start {
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue