printer: preserve line terminator when using --crlf and --replace

Ref #3097, Closes #3100
This commit is contained in:
Isaac
2025-07-09 22:46:40 +10:00
committed by Andrew Gallant
parent f596a5d875
commit 64174b8e68
3 changed files with 59 additions and 7 deletions

View File

@@ -3947,4 +3947,41 @@ e
let expected = "4:d\n5-e\n6:d\n";
assert_eq_printed!(expected, got);
}
#[test]
fn regression_crlf_preserve() {
let haystack = "hello\nworld\r\n";
let matcher =
RegexMatcherBuilder::new().crlf(true).build(r".").unwrap();
let mut printer = StandardBuilder::new().build(NoColor::new(vec![]));
let mut searcher = SearcherBuilder::new()
.line_number(false)
.line_terminator(LineTerminator::crlf())
.build();
searcher
.search_reader(
&matcher,
haystack.as_bytes(),
printer.sink(&matcher),
)
.unwrap();
let got = printer_contents(&mut printer);
let expected = "hello\nworld\r\n";
assert_eq_printed!(expected, got);
let mut printer = StandardBuilder::new()
.replacement(Some(b"$0".to_vec()))
.build(NoColor::new(vec![]));
searcher
.search_reader(
&matcher,
haystack.as_bytes(),
printer.sink(&matcher),
)
.unwrap();
let got = printer_contents(&mut printer);
let expected = "hello\nworld\r\n";
assert_eq_printed!(expected, got);
}
}