Fix backwards selection duplication widening bug (#2945)

* Fix backwards selection duplication widening bug

* Add integration tests

* Make tests line-ending agnostic

Make tests line-ending agnostic

Use indoc to fix tests

Fix line-ending on test input
pull/2963/head
A-Walrus 2 years ago committed by GitHub
parent 244825b9e1
commit 2ac1de305e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1411,16 +1411,16 @@ fn copy_selection_on_line(cx: &mut Context, direction: Direction) {
let is_primary = *range == selection.primary(); let is_primary = *range == selection.primary();
// The range is always head exclusive // The range is always head exclusive
let head = if range.anchor < range.head { let (head, anchor) = if range.anchor < range.head {
range.head - 1 (range.head - 1, range.anchor)
} else { } else {
range.head (range.head, range.anchor - 1)
}; };
let tab_width = doc.tab_width(); let tab_width = doc.tab_width();
let head_pos = visual_coords_at_pos(text, head, tab_width); let head_pos = visual_coords_at_pos(text, head, tab_width);
let anchor_pos = visual_coords_at_pos(text, range.anchor, tab_width); let anchor_pos = visual_coords_at_pos(text, anchor, tab_width);
let height = std::cmp::max(head_pos.row, anchor_pos.row) let height = std::cmp::max(head_pos.row, anchor_pos.row)
- std::cmp::min(head_pos.row, anchor_pos.row) - std::cmp::min(head_pos.row, anchor_pos.row)

@ -91,3 +91,43 @@ async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
Ok(()) Ok(())
} }
#[tokio::test]
async fn test_selection_duplication() -> anyhow::Result<()> {
// Forward
test((
platform_line(indoc! {"\
#[lo|]#rem
ipsum
dolor
"})
.as_str(),
"CC",
platform_line(indoc! {"\
#(lo|)#rem
#(ip|)#sum
#[do|]#lor
"})
.as_str(),
))
.await?;
// Backward
test((
platform_line(indoc! {"\
#[|lo]#rem
ipsum
dolor
"})
.as_str(),
"CC",
platform_line(indoc! {"\
#(|lo)#rem
#(|ip)#sum
#[|do]#lor
"})
.as_str(),
))
.await?;
Ok(())
}

Loading…
Cancel
Save