diff --git a/src/main.rs b/src/main.rs index 761348f3b..e374338b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,7 +60,7 @@ fn main() { Ok(_) => process::exit(0), Err(err) => { eprintln!("{}", err); - process::exit(1); + process::exit(2); } } } diff --git a/tests/tests.rs b/tests/tests.rs index 0ee4995b2..f3cc8f06c 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -2191,3 +2191,33 @@ fn type_list() { // This can change over time, so just make sure we print something. assert!(!lines.is_empty()); } + +// See: https://github.com/BurntSushi/ripgrep/issues/948 +sherlock!( + exit_code_match_success, + ".", + ".", + |wd: WorkDir, mut cmd: Command| { + wd.assert_exit_code(0, &mut cmd); + } +); + +// See: https://github.com/BurntSushi/ripgrep/issues/948 +sherlock!( + exit_code_no_match, + "6d28e48b5224a42b167e{10}", + ".", + |wd: WorkDir, mut cmd: Command| { + wd.assert_exit_code(1, &mut cmd); + } +); + +// See: https://github.com/BurntSushi/ripgrep/issues/948 +sherlock!( + exit_code_error, + "*", + ".", + |wd: WorkDir, mut cmd: Command| { + wd.assert_exit_code(2, &mut cmd); + } +); diff --git a/tests/workdir.rs b/tests/workdir.rs index 3c47e9483..99f0bf3fb 100644 --- a/tests/workdir.rs +++ b/tests/workdir.rs @@ -261,18 +261,37 @@ impl WorkDir { pub fn assert_err(&self, cmd: &mut process::Command) { let o = cmd.output().unwrap(); if o.status.success() { - panic!("\n\n===== {:?} =====\n\ - command succeeded but expected failure!\ - \n\ncwd: {}\ - \n\nstatus: {}\ - \n\nstdout: {}\n\nstderr: {}\ - \n\n=====\n", - cmd, self.dir.display(), o.status, - String::from_utf8_lossy(&o.stdout), - String::from_utf8_lossy(&o.stderr)); + panic!( + "\n\n===== {:?} =====\n\ + command succeeded but expected failure!\ + \n\ncwd: {}\ + \n\nstatus: {}\ + \n\nstdout: {}\n\nstderr: {}\ + \n\n=====\n", + cmd, + self.dir.display(), + o.status, + String::from_utf8_lossy(&o.stdout), + String::from_utf8_lossy(&o.stderr) + ); } } + /// Runs the given command and asserts that its exit code matches expected exit code. + pub fn assert_exit_code(&self, expected_code: i32, cmd: &mut process::Command) { + let code = cmd.status().unwrap().code().unwrap(); + + assert_eq!( + expected_code, code, + "\n\n===== {:?} =====\n\ + expected exit code did not match\ + \n\nexpected: {}\ + \n\nfound: {}\ + \n\n=====\n", + cmd, expected_code, code + ); + } + /// Runs the given command and asserts that something was printed to /// stderr. pub fn assert_non_empty_stderr(&self, cmd: &mut process::Command) {