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.rs62
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(..);