about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOneirical <manchot@videotron.ca>2024-05-24 11:50:35 -0400
committerOneirical <manchot@videotron.ca>2024-06-17 13:51:52 -0400
commit6228b3e40e78ca0a29fd4599c9b7a3e340bb1572 (patch)
tree534eda82e029a4622adfc6e5b5562d0020a59437
parent5f44f9511d95c8efbae0e1c312e130d91acd1134 (diff)
downloadrust-6228b3e40e78ca0a29fd4599c9b7a3e340bb1572.tar.gz
rust-6228b3e40e78ca0a29fd4599c9b7a3e340bb1572.zip
Rewrite and rename `issue-26092` to rmake
-rw-r--r--src/tools/run-make-support/src/command.rs44
-rw-r--r--src/tools/run-make-support/src/lib.rs21
-rw-r--r--src/tools/tidy/src/allowed_run_make_makefiles.txt1
-rw-r--r--tests/run-make/CURRENT_RUSTC_VERSION/rmake.rs1
-rw-r--r--tests/run-make/clear-error-blank-output/blank.rs (renamed from tests/run-make/issue-26092/blank.rs)0
-rw-r--r--tests/run-make/clear-error-blank-output/rmake.rs13
-rw-r--r--tests/run-make/issue-26092/Makefile6
-rw-r--r--tests/run-make/link-arg/rmake.rs24
-rw-r--r--tests/run-make/link-dedup/Makefile12
-rw-r--r--tests/run-make/link-dedup/rmake.rs28
10 files changed, 83 insertions, 67 deletions
diff --git a/src/tools/run-make-support/src/command.rs b/src/tools/run-make-support/src/command.rs
index dab18dca2ff..f39bcfd60df 100644
--- a/src/tools/run-make-support/src/command.rs
+++ b/src/tools/run-make-support/src/command.rs
@@ -6,7 +6,7 @@ use std::path::Path;
 use std::process::{Command as StdCommand, ExitStatus, Output, Stdio};
 
 use crate::drop_bomb::DropBomb;
-use crate::{assert_contains, assert_not_contains, handle_failed_output};
+use crate::{assert_contains, assert_equals, assert_not_contains, handle_failed_output};
 
 /// This is a custom command wrapper that simplifies working with commands and makes it easier to
 /// ensure that we check the exit status of executed processes.
@@ -21,6 +21,7 @@ use crate::{assert_contains, assert_not_contains, handle_failed_output};
 ///
 /// [`run`]: Self::run
 /// [`run_fail`]: Self::run_fail
+/// [`run_unchecked`]: Self::run_unchecked
 #[derive(Debug)]
 pub struct Command {
     cmd: StdCommand,
@@ -116,6 +117,15 @@ impl Command {
         output
     }
 
+    /// Run the command but do not check its exit status.
+    /// Only use if you explicitly don't care about the exit status.
+    /// Prefer to use [`Self::run`] and [`Self::run_fail`]
+    /// whenever possible.
+    #[track_caller]
+    pub fn run_unchecked(&mut self) -> CompletedProcess {
+        self.command_output()
+    }
+
     #[track_caller]
     fn command_output(&mut self) -> CompletedProcess {
         self.drop_bomb.defuse();
@@ -163,41 +173,45 @@ impl CompletedProcess {
         self.output.status
     }
 
-    /// Checks that trimmed `stdout` matches trimmed `content`.
+    /// Checks that trimmed `stdout` matches trimmed `expected`.
     #[track_caller]
-    pub fn assert_stdout_equals<S: AsRef<str>>(&self, content: S) -> &Self {
-        assert_eq!(self.stdout_utf8().trim(), content.as_ref().trim());
+    pub fn assert_stdout_equals<S: AsRef<str>>(&self, expected: S) -> &Self {
+        assert_equals(self.stdout_utf8().trim(), expected.as_ref().trim());
         self
     }
 
+    /// Checks that `stdout` does not contain `unexpected`.
     #[track_caller]
-    pub fn assert_stdout_contains<S: AsRef<str>>(self, needle: S) -> Self {
-        assert_contains(&self.stdout_utf8(), needle.as_ref());
+    pub fn assert_stdout_not_contains<S: AsRef<str>>(&self, unexpected: S) -> &Self {
+        assert_not_contains(&self.stdout_utf8(), unexpected.as_ref());
         self
     }
 
+    /// Checks that `stdout` contains `expected`.
     #[track_caller]
-    pub fn assert_stdout_not_contains<S: AsRef<str>>(&self, needle: S) -> &Self {
-        assert_not_contains(&self.stdout_utf8(), needle.as_ref());
+    pub fn assert_stdout_contains<S: AsRef<str>>(&self, expected: S) -> &Self {
+        assert_contains(&self.stdout_utf8(), expected.as_ref());
         self
     }
 
-    /// Checks that trimmed `stderr` matches trimmed `content`.
+    /// Checks that trimmed `stderr` matches trimmed `expected`.
     #[track_caller]
-    pub fn assert_stderr_equals<S: AsRef<str>>(&self, content: S) -> &Self {
-        assert_eq!(self.stderr_utf8().trim(), content.as_ref().trim());
+    pub fn assert_stderr_equals<S: AsRef<str>>(&self, expected: S) -> &Self {
+        assert_equals(self.stderr_utf8().trim(), expected.as_ref().trim());
         self
     }
 
+    /// Checks that `stderr` contains `expected`.
     #[track_caller]
-    pub fn assert_stderr_contains<S: AsRef<str>>(&self, needle: S) -> &Self {
-        assert_contains(&self.stderr_utf8(), needle.as_ref());
+    pub fn assert_stderr_contains<S: AsRef<str>>(&self, expected: S) -> &Self {
+        assert_contains(&self.stderr_utf8(), expected.as_ref());
         self
     }
 
+    /// Checks that `stderr` does not contain `unexpected`.
     #[track_caller]
-    pub fn assert_stderr_not_contains<S: AsRef<str>>(&self, needle: S) -> &Self {
-        assert_not_contains(&self.stdout_utf8(), needle.as_ref());
+    pub fn assert_stderr_not_contains<S: AsRef<str>>(&self, unexpected: S) -> &Self {
+        assert_not_contains(&self.stdout_utf8(), unexpected.as_ref());
         self
     }
 
diff --git a/src/tools/run-make-support/src/lib.rs b/src/tools/run-make-support/src/lib.rs
index ba4524c150c..84b0a4f61ee 100644
--- a/src/tools/run-make-support/src/lib.rs
+++ b/src/tools/run-make-support/src/lib.rs
@@ -332,6 +332,18 @@ pub fn read_dir<F: Fn(&Path)>(dir: impl AsRef<Path>, callback: F) {
     }
 }
 
+/// Check that `actual` is equal to `expected`. Panic otherwise.
+#[track_caller]
+pub fn assert_equals(actual: &str, expected: &str) {
+    if actual != expected {
+        eprintln!("=== ACTUAL TEXT ===");
+        eprintln!("{}", actual);
+        eprintln!("=== EXPECTED ===");
+        eprintln!("{}", expected);
+        panic!("expected text was not found in actual text");
+    }
+}
+
 /// Check that `haystack` contains `needle`. Panic otherwise.
 #[track_caller]
 pub fn assert_contains(haystack: &str, needle: &str) {
@@ -468,6 +480,15 @@ macro_rules! impl_common_helpers {
                 self.cmd.run_fail()
             }
 
+            /// Run the command but do not check its exit status.
+            /// Only use if you explicitly don't care about the exit status.
+            /// Prefer to use [`Self::run`] and [`Self::run_fail`]
+            /// whenever possible.
+            #[track_caller]
+            pub fn run_unchecked(&mut self) -> crate::command::CompletedProcess {
+                self.cmd.run_unchecked()
+            }
+
             /// Set the path where the command will be run.
             pub fn current_dir<P: AsRef<::std::path::Path>>(&mut self, path: P) -> &mut Self {
                 self.cmd.current_dir(path);
diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt
index 6a1809951fd..69a8aa05360 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -83,7 +83,6 @@ run-make/issue-20626/Makefile
 run-make/issue-22131/Makefile
 run-make/issue-25581/Makefile
 run-make/issue-26006/Makefile
-run-make/issue-26092/Makefile
 run-make/issue-28595/Makefile
 run-make/issue-33329/Makefile
 run-make/issue-35164/Makefile
diff --git a/tests/run-make/CURRENT_RUSTC_VERSION/rmake.rs b/tests/run-make/CURRENT_RUSTC_VERSION/rmake.rs
index b3227b79559..d937514c2ca 100644
--- a/tests/run-make/CURRENT_RUSTC_VERSION/rmake.rs
+++ b/tests/run-make/CURRENT_RUSTC_VERSION/rmake.rs
@@ -12,7 +12,6 @@ fn main() {
 
     let output =
         rustc().input("main.rs").emit("metadata").extern_("stable", "libstable.rmeta").run();
-
     let version = fs_wrapper::read_to_string(source_root().join("src/version"));
     let expected_string = format!("stable since {}", version.trim());
     output.assert_stderr_contains(expected_string);
diff --git a/tests/run-make/issue-26092/blank.rs b/tests/run-make/clear-error-blank-output/blank.rs
index f328e4d9d04..f328e4d9d04 100644
--- a/tests/run-make/issue-26092/blank.rs
+++ b/tests/run-make/clear-error-blank-output/blank.rs
diff --git a/tests/run-make/clear-error-blank-output/rmake.rs b/tests/run-make/clear-error-blank-output/rmake.rs
new file mode 100644
index 00000000000..e0f042cf805
--- /dev/null
+++ b/tests/run-make/clear-error-blank-output/rmake.rs
@@ -0,0 +1,13 @@
+// When an empty output file is passed to rustc, the ensuing error message
+// should be clear. However, calling file_stem on an empty path returns None,
+// which, when unwrapped, causes a panic, stopping execution of rustc
+// and printing an obscure message instead of reaching the helpful
+// error message. This test checks that the panic does not occur.
+// See https://github.com/rust-lang/rust/pull/26199
+
+use run_make_support::rustc;
+
+fn main() {
+    let output = rustc().output("").stdin(b"fn main() {}").run_fail();
+    output.assert_stderr_not_contains("panic");
+}
diff --git a/tests/run-make/issue-26092/Makefile b/tests/run-make/issue-26092/Makefile
deleted file mode 100644
index 96822e7690b..00000000000
--- a/tests/run-make/issue-26092/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-include ../tools.mk
-
-# This test ensures that rustc does not panic with `-o ""` option.
-
-all:
-	$(RUSTC) -o "" blank.rs 2>&1 | $(CGREP) -i 'panic' && exit 1 || exit 0
diff --git a/tests/run-make/link-arg/rmake.rs b/tests/run-make/link-arg/rmake.rs
index dd496101f6a..a6d68800792 100644
--- a/tests/run-make/link-arg/rmake.rs
+++ b/tests/run-make/link-arg/rmake.rs
@@ -7,18 +7,14 @@
 use run_make_support::rustc;
 
 fn main() {
-    let output = String::from_utf8(
-        rustc()
-            .input("empty.rs")
-            .link_arg("-lfoo")
-            .link_arg("-lbar")
-            .print("link-args")
-            .command_output()
-            .stdout,
-    )
-    .unwrap();
-    assert!(
-        output.contains("lfoo") || output.contains("lbar"),
-        "The output did not contain the expected \"lfoo\" or \"lbar\" strings."
-    );
+    // We are only checking for the output of --print=link-args,
+    // rustc failing or succeeding does not matter.
+    let out = rustc()
+        .input("empty.rs")
+        .link_arg("-lfoo")
+        .link_arg("-lbar")
+        .print("link-args")
+        .run_unchecked();
+    out.assert_stdout_contains("lfoo");
+    out.assert_stdout_contains("lbar");
 }
diff --git a/tests/run-make/link-dedup/Makefile b/tests/run-make/link-dedup/Makefile
deleted file mode 100644
index eff18ab48ab..00000000000
--- a/tests/run-make/link-dedup/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# ignore-msvc
-
-include ../tools.mk
-
-all:
-	$(RUSTC) depa.rs
-	$(RUSTC) depb.rs
-	$(RUSTC) depc.rs
-	$(RUSTC) empty.rs --cfg bar 2>&1 | $(CGREP) '"-ltesta" "-ltestb" "-ltesta"'
-	$(RUSTC) empty.rs 2>&1 | $(CGREP) '"-ltesta"'
-	$(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltestb"'
-	$(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltesta" "-ltesta" "-ltesta"'
diff --git a/tests/run-make/link-dedup/rmake.rs b/tests/run-make/link-dedup/rmake.rs
index a0d3ac86542..9bff3a4b44c 100644
--- a/tests/run-make/link-dedup/rmake.rs
+++ b/tests/run-make/link-dedup/rmake.rs
@@ -7,26 +7,18 @@
 
 //@ ignore-msvc
 
+use run_make_support::rustc;
+
 fn main() {
     rustc().input("depa.rs").run();
     rustc().input("depb.rs").run();
     rustc().input("depc.rs").run();
-    let output =
-        String::from_utf8(rustc().input("empty.rs").cfg("bar").command_output().stderr).unwrap();
-    let pos_a1 =
-        output.find("-ltesta").expect("empty.rs, compiled with --cfg, should contain -ltesta");
-    let pos_b = output[pos_a1..]
-        .find("-ltestb")
-        .map(|pos| pos + pos_a1)
-        .expect("empty.rs, compiled with --cfg, should contain -ltestb");
-    let _ = output[pos_b..]
-        .find("-ltesta")
-        .map(|pos| pos + pos_b)
-        .expect("empty.rs, compiled with --cfg, should contain a second -ltesta");
-    let output = String::from_utf8(rustc().input("empty.rs").command_output().stderr).unwrap();
-    assert!(output.contains("-ltesta"));
-    let output = String::from_utf8(rustc().input("empty.rs").command_output().stderr).unwrap();
-    assert!(!output.contains("-ltestb"));
-    let output = String::from_utf8(rustc().input("empty.rs").command_output().stderr).unwrap();
-    assert_eq!(output.matches("-ltesta").count, 1);
+    let output = rustc().input("empty.rs").cfg("bar").run_fail();
+    output.assert_stderr_contains(r#""-ltesta" "-ltestb" "-ltesta""#);
+    let output = rustc().input("empty.rs").run_fail();
+    output.assert_stderr_contains(r#""-ltesta""#);
+    let output = rustc().input("empty.rs").run_fail();
+    output.assert_stderr_not_contains(r#""-ltestb""#);
+    let output = rustc().input("empty.rs").run_fail();
+    output.assert_stderr_not_contains(r#""-ltesta" "-ltesta" "-ltesta""#);
 }