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
This commit is contained in:
A-Walrus 2022-07-05 01:51:15 +03:00 committed by GitHub
parent 244825b9e1
commit 2ac1de305e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 4 deletions

View file

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

View file

@ -91,3 +91,43 @@ async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
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(())
}