diff options
author | Andrew Gallant <jamslam@gmail.com> | 2021-05-31 19:00:56 -0400 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2021-05-31 21:51:18 -0400 |
commit | ee23ab51736d35028c7f3eee23295429377742b4 (patch) | |
tree | 2e43d4ded4f3e76e5b6a8c68c6bc005ec8a326a3 /tests | |
parent | efd9cfb2fc1f0233de9eda4c03416d32ef2c3ce8 (diff) |
printer: trim line terminator before finding submatches
This fixes a bug where PCRE2 look-around could change the result of a
match if it observed a line terminator in the printer. And in
particular, this is precisely how the searcher operates: the line is
considered unto itself *without* the line terminator.
Fixes #1401
Diffstat (limited to 'tests')
-rw-r--r-- | tests/regression.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/regression.rs b/tests/regression.rs index d110c99c..cd14d5e4 100644 --- a/tests/regression.rs +++ b/tests/regression.rs @@ -806,7 +806,32 @@ rgtest!(r1389_bad_symlinks_no_biscuit, |dir: Dir, mut cmd: TestCommand| { eqnice!("mylink/file.txt:test\n", stdout); }); -// printf "foo\nbar\n" | rg -PU '(?<=foo\n)bar' -r quux +// See: https://github.com/BurntSushi/ripgrep/issues/1401 +rgtest!(r1401_look_ahead_only_matching_1, |dir: Dir, mut cmd: TestCommand| { + // Only PCRE2 supports look-around. + if !dir.is_pcre2() { + return; + } + dir.create("ip.txt", "foo 42\nxoyz\ncat\tdog\n"); + cmd.args(&["-No", r".*o(?!.*\s)", "ip.txt"]); + eqnice!("xo\ncat\tdo\n", cmd.stdout()); + + let mut cmd = dir.command(); + cmd.args(&["-No", r".*o(?!.*[ \t])", "ip.txt"]); + eqnice!("xo\ncat\tdo\n", cmd.stdout()); +}); + +// See: https://github.com/BurntSushi/ripgrep/issues/1401 +rgtest!(r1401_look_ahead_only_matching_2, |dir: Dir, mut cmd: TestCommand| { + // Only PCRE2 supports look-around. + if !dir.is_pcre2() { + return; + } + dir.create("ip.txt", "foo 42\nxoyz\ncat\tdog\nfoo"); + cmd.args(&["-No", r".*o(?!.*\s)", "ip.txt"]); + eqnice!("xo\ncat\tdo\nfoo\n", cmd.stdout()); +}); + // See: https://github.com/BurntSushi/ripgrep/issues/1412 rgtest!(r1412_look_behind_no_replacement, |dir: Dir, mut cmd: TestCommand| { // Only PCRE2 supports look-around. |