Skip to content

Commit

Permalink
assert_stdout_contains_regex in run_make_support + variations
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneirical committed Jul 26, 2024
1 parent d5c073e commit c5c6c0a
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 8 deletions.
32 changes: 31 additions & 1 deletion src/tools/run-make-support/src/assertion_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use std::panic;
use std::path::Path;

use crate::fs;
use crate::{fs, regex};

/// Assert that `actual` is equal to `expected`.
#[track_caller]
Expand Down Expand Up @@ -47,6 +47,36 @@ pub fn assert_not_contains<H: AsRef<str>, N: AsRef<str>>(haystack: H, needle: N)
}
}

/// Assert that `haystack` contains the regex pattern `needle`.
#[track_caller]
pub fn assert_contains_regex<H: AsRef<str>, N: AsRef<str>>(haystack: H, needle: N) {
let haystack = haystack.as_ref();
let needle = needle.as_ref();
let re = regex::Regex::new(needle).unwrap();
if !re.is_match(haystack) {
eprintln!("=== HAYSTACK ===");
eprintln!("{}", haystack);
eprintln!("=== NEEDLE ===");
eprintln!("{}", needle);
panic!("needle was not found in haystack");
}
}

/// Assert that `haystack` does not contain the regex pattern `needle`.
#[track_caller]
pub fn assert_not_contains_regex<H: AsRef<str>, N: AsRef<str>>(haystack: H, needle: N) {
let haystack = haystack.as_ref();
let needle = needle.as_ref();
let re = regex::Regex::new(needle).unwrap();
if re.is_match(haystack) {
eprintln!("=== HAYSTACK ===");
eprintln!("{}", haystack);
eprintln!("=== NEEDLE ===");
eprintln!("{}", needle);
panic!("needle was unexpectedly found in haystack");
}
}

/// Assert that all files in `dir1` exist and have the same content in `dir2`
pub fn assert_dirs_are_equal(dir1: impl AsRef<Path>, dir2: impl AsRef<Path>) {
let dir2 = dir2.as_ref();
Expand Down
33 changes: 32 additions & 1 deletion src/tools/run-make-support/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use std::path::Path;
use std::process::{Command as StdCommand, ExitStatus, Output, Stdio};

use crate::util::handle_failed_output;
use crate::{assert_contains, assert_equals, assert_not_contains};
use crate::{
assert_contains, assert_contains_regex, assert_equals, assert_not_contains,
assert_not_contains_regex,
};

use build_helper::drop_bomb::DropBomb;

Expand Down Expand Up @@ -192,13 +195,27 @@ impl CompletedProcess {
self
}

/// Checks that `stdout` does not contain the regex pattern `unexpected`.
#[track_caller]
pub fn assert_stdout_not_contains_regex<S: AsRef<str>>(&self, unexpected: S) -> &Self {
assert_not_contains_regex(&self.stdout_utf8(), unexpected);
self
}

/// Checks that `stdout` contains `expected`.
#[track_caller]
pub fn assert_stdout_contains<S: AsRef<str>>(&self, expected: S) -> &Self {
assert_contains(&self.stdout_utf8(), expected);
self
}

/// Checks that `stdout` contains the regex pattern `expected`.
#[track_caller]
pub fn assert_stdout_contains_regex<S: AsRef<str>>(&self, expected: S) -> &Self {
assert_contains_regex(&self.stdout_utf8(), expected);
self
}

/// Checks that trimmed `stderr` matches trimmed `expected`.
#[track_caller]
pub fn assert_stderr_equals<S: AsRef<str>>(&self, expected: S) -> &Self {
Expand All @@ -213,13 +230,27 @@ impl CompletedProcess {
self
}

/// Checks that `stderr` contains the regex pattern `expected`.
#[track_caller]
pub fn assert_stderr_contains_regex<S: AsRef<str>>(&self, expected: S) -> &Self {
assert_contains_regex(&self.stderr_utf8(), expected);
self
}

/// Checks that `stderr` does not contain `unexpected`.
#[track_caller]
pub fn assert_stderr_not_contains<S: AsRef<str>>(&self, unexpected: S) -> &Self {
assert_not_contains(&self.stdout_utf8(), unexpected);
self
}

/// Checks that `stderr` does not contain the regex pattern `unexpected`.
#[track_caller]
pub fn assert_stderr_not_contains_regex<S: AsRef<str>>(&self, unexpected: S) -> &Self {
assert_not_contains_regex(&self.stdout_utf8(), unexpected);
self
}

#[track_caller]
pub fn assert_exit_code(&self, code: i32) -> &Self {
assert!(self.output.status.code() == Some(code));
Expand Down
3 changes: 2 additions & 1 deletion src/tools/run-make-support/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ pub use path_helpers::{
pub use scoped_run::{run_in_tmpdir, test_while_readonly};

pub use assertion_helpers::{
assert_contains, assert_dirs_are_equal, assert_equals, assert_not_contains,
assert_contains, assert_contains_regex, assert_dirs_are_equal, assert_equals,
assert_not_contains, assert_not_contains_regex,
};

pub use string::{
Expand Down
10 changes: 5 additions & 5 deletions tests/run-make/rlib-format-packed-bundled-libs-2/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
// in rustc flags without a compilation failure or the removal of expected symbols.
// See https://github.com/rust-lang/rust/pull/100101

//FIXME(Oneirical): try it on test-various

use run_make_support::{llvm_ar, llvm_readobj, regex, rfs, rust_lib_name, rustc};

fn main() {
// Build a strangely named dependency.
rustc().input("native_dep.rs").crate_type("staticlib").output("native_dep.ext").run();

rustc().input("rust_dep.rs").crate_type("rlib").arg("-Zpacked_bundled_libs").run();
let symbols = llvm_readobj().symbols().input(rust_lib_name("rust_dep")).run().stdout_utf8();
let re = regex::Regex::new("U.*native_f1").unwrap();
assert!(re.is_match(&symbols));
llvm_readobj()
.symbols()
.input(rust_lib_name("rust_dep"))
.run()
.assert_stdout_contains_regex("U.*native_f1");
llvm_ar()
.arg("t")
.arg(rust_lib_name("rust_dep"))
Expand Down

0 comments on commit c5c6c0a

Please sign in to comment.