Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/selection.rs')
| -rw-r--r-- | helix-core/src/selection.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs index 5bde08e3..6292e90e 100644 --- a/helix-core/src/selection.rs +++ b/helix-core/src/selection.rs @@ -1171,6 +1171,68 @@ mod test { } #[test] + fn test_select_on_matches_crlf() { + let r = Rope::from_str("This\r\nString\r\n\r\ncontains multiple\r\nlines"); + let s = r.slice(..); + + let start_of_line = rope::RegexBuilder::new() + .syntax(rope::Config::new().multi_line(true).crlf(true)) + .build(r"^") + .unwrap(); + let end_of_line = rope::RegexBuilder::new() + .syntax(rope::Config::new().multi_line(true).crlf(true)) + .build(r"$") + .unwrap(); + + // line without ending + assert_eq!( + select_on_matches(s, &Selection::single(0, 4), &start_of_line), + Some(Selection::single(0, 0)) + ); + assert_eq!( + select_on_matches(s, &Selection::single(0, 4), &end_of_line), + None + ); + // line with ending + assert_eq!( + select_on_matches(s, &Selection::single(0, 5), &start_of_line), + Some(Selection::single(0, 0)) + ); + assert_eq!( + select_on_matches(s, &Selection::single(0, 5), &end_of_line), + Some(Selection::single(4, 4)) + ); + // line with start of next line + assert_eq!( + select_on_matches(s, &Selection::single(0, 7), &start_of_line), + Some(Selection::new( + smallvec![Range::point(0), Range::point(6)], + 0 + )) + ); + assert_eq!( + select_on_matches(s, &Selection::single(0, 6), &end_of_line), + Some(Selection::single(4, 4)) + ); + + // multiple lines + assert_eq!( + select_on_matches( + s, + &Selection::single(0, s.len_chars()), + &rope::RegexBuilder::new() + .syntax(rope::Config::new().multi_line(true).crlf(true)) + .build(r"^[a-z ]*$") + .unwrap() + ), + Some(Selection::new( + smallvec![Range::point(14), Range::new(16, 33), Range::new(35, 40)], + 0 + )) + ); + } + + #[test] fn test_line_range() { let r = Rope::from_str("\r\nHi\r\nthere!"); let s = r.slice(..); |