Fix bugs with applying hunks from branch buffers (#18721)
Release Notes: - N/A --------- Co-authored-by: Marshall <marshall@zed.dev>
This commit is contained in:
parent
3c91184726
commit
b0a16a7601
4 changed files with 128 additions and 61 deletions
|
@ -2485,15 +2485,73 @@ fn test_branch_and_merge(cx: &mut TestAppContext) {
|
|||
}
|
||||
|
||||
#[gpui::test]
|
||||
fn test_merge_into_base(cx: &mut AppContext) {
|
||||
init_settings(cx, |_| {});
|
||||
fn test_merge_into_base(cx: &mut TestAppContext) {
|
||||
cx.update(|cx| init_settings(cx, |_| {}));
|
||||
|
||||
let base = cx.new_model(|cx| Buffer::local("abcdefghijk", cx));
|
||||
let branch = base.update(cx, |buffer, cx| buffer.branch(cx));
|
||||
|
||||
// Make 3 edits, merge one into the base.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.edit([(0..3, "ABC"), (7..9, "HI")], None, cx);
|
||||
branch.edit([(0..3, "ABC"), (7..9, "HI"), (11..11, "LMN")], None, cx);
|
||||
branch.merge_into_base(Some(5..8), cx);
|
||||
});
|
||||
assert_eq!(base.read(cx).text(), "abcdefgHIjk");
|
||||
|
||||
branch.read_with(cx, |branch, _| assert_eq!(branch.text(), "ABCdefgHIjkLMN"));
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefgHIjk"));
|
||||
|
||||
// Undo the one already-merged edit. Merge that into the base.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.edit([(7..9, "hi")], None, cx);
|
||||
branch.merge_into_base(Some(5..8), cx);
|
||||
});
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefghijk"));
|
||||
|
||||
// Merge an insertion into the base.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.merge_into_base(Some(11..11), cx);
|
||||
});
|
||||
|
||||
branch.read_with(cx, |branch, _| assert_eq!(branch.text(), "ABCdefghijkLMN"));
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefghijkLMN"));
|
||||
|
||||
// Deleted the inserted text and merge that into the base.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.edit([(11..14, "")], None, cx);
|
||||
branch.merge_into_base(Some(10..11), cx);
|
||||
});
|
||||
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefghijk"));
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
fn test_undo_after_merge_into_base(cx: &mut TestAppContext) {
|
||||
cx.update(|cx| init_settings(cx, |_| {}));
|
||||
|
||||
let base = cx.new_model(|cx| Buffer::local("abcdefghijk", cx));
|
||||
let branch = base.update(cx, |buffer, cx| buffer.branch(cx));
|
||||
|
||||
// Make 2 edits, merge one into the base.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.edit([(0..3, "ABC"), (7..9, "HI")], None, cx);
|
||||
branch.merge_into_base(Some(7..7), cx);
|
||||
});
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefgHIjk"));
|
||||
branch.read_with(cx, |branch, _| assert_eq!(branch.text(), "ABCdefgHIjk"));
|
||||
|
||||
// Undo the merge in the base buffer.
|
||||
base.update(cx, |base, cx| {
|
||||
base.undo(cx);
|
||||
});
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefghijk"));
|
||||
branch.read_with(cx, |branch, _| assert_eq!(branch.text(), "ABCdefgHIjk"));
|
||||
|
||||
// Merge that operation into the base again.
|
||||
branch.update(cx, |branch, cx| {
|
||||
branch.merge_into_base(Some(7..7), cx);
|
||||
});
|
||||
base.read_with(cx, |base, _| assert_eq!(base.text(), "abcdefgHIjk"));
|
||||
branch.read_with(cx, |branch, _| assert_eq!(branch.text(), "ABCdefgHIjk"));
|
||||
}
|
||||
|
||||
fn start_recalculating_diff(buffer: &Model<Buffer>, cx: &mut TestAppContext) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue