about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-11-29 18:31:37 +0000
committerEsteban Küber <esteban@kuber.com.ar>2024-11-29 18:31:37 +0000
commite97e15dea55d61d68732bc030be1a44d8a51a1e9 (patch)
tree86fe728da25bb17fb0c129696b5003a90db5507e
parent8574f374e2cc27b53c8b81dc4031c59ca3035284 (diff)
downloadrust-e97e15dea55d61d68732bc030be1a44d8a51a1e9.tar.gz
rust-e97e15dea55d61d68732bc030be1a44d8a51a1e9.zip
Use rmake `diff` output in test
-rw-r--r--tests/run-make/crate-loading-crate-depends-on-itself/foo.stderr34
-rw-r--r--tests/run-make/crate-loading-crate-depends-on-itself/rmake.rs25
2 files changed, 46 insertions, 13 deletions
diff --git a/tests/run-make/crate-loading-crate-depends-on-itself/foo.stderr b/tests/run-make/crate-loading-crate-depends-on-itself/foo.stderr
new file mode 100644
index 00000000000..36379429530
--- /dev/null
+++ b/tests/run-make/crate-loading-crate-depends-on-itself/foo.stderr
@@ -0,0 +1,34 @@
+error[E0277]: the trait bound `foo::Struct: Trait` is not satisfied
+  --> foo-current.rs:13:19
+   |
+13 |     check_trait::<foo::Struct>();
+   |                   ^^^^^^^^^^^ the trait `Trait` is not implemented for `foo::Struct`
+   |
+note: there are multiple different versions of crate `foo` in the dependency graph
+  --> foo-current.rs:7:1
+   |
+4  | extern crate foo;
+   | ----------------- one version of crate `foo` is used here, as a direct dependency of the current crate
+5  |
+6  | pub struct Struct;
+   | ----------------- this type implements the required trait
+7  | pub trait Trait {}
+   | ^^^^^^^^^^^^^^^ this is the required trait
+   |
+  ::: foo-prev.rs:X:Y
+   |
+4  | pub struct Struct;
+   | ----------------- this type doesn't implement the required trait
+5  | pub trait Trait {}
+   | --------------- this is the found trait
+   = note: two types coming from two different versions of the same crate are different types even if they look the same
+   = help: you can use `cargo tree` to explore your dependency tree
+note: required by a bound in `check_trait`
+  --> foo-current.rs:10:19
+   |
+10 | fn check_trait<T: Trait>() {}
+   |                   ^^^^^ required by this bound in `check_trait`
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0277`.
\ No newline at end of file
diff --git a/tests/run-make/crate-loading-crate-depends-on-itself/rmake.rs b/tests/run-make/crate-loading-crate-depends-on-itself/rmake.rs
index f52f3d791a7..57e0cab92f1 100644
--- a/tests/run-make/crate-loading-crate-depends-on-itself/rmake.rs
+++ b/tests/run-make/crate-loading-crate-depends-on-itself/rmake.rs
@@ -7,26 +7,25 @@
 // and traits of the different versions are mixed, we produce diagnostic output and not an ICE.
 // #133563
 
-use run_make_support::{rust_lib_name, rustc};
+use run_make_support::{diff, rust_lib_name, rustc};
 
 fn main() {
     rustc().input("foo-prev.rs").run();
 
-    rustc()
+    let out = rustc()
         .extra_filename("current")
         .metadata("current")
         .input("foo-current.rs")
         .extern_("foo", rust_lib_name("foo"))
         .run_fail()
-        .assert_stderr_contains(r#"
-note: there are multiple different versions of crate `foo` in the dependency graph
-  --> foo-current.rs:7:1
-   |
-4  | extern crate foo;
-   | ----------------- one version of crate `foo` is used here, as a direct dependency of the current crate
-5  |
-6  | pub struct Struct;
-   | ----------------- this type implements the required trait
-7  | pub trait Trait {}
-   | ^^^^^^^^^^^^^^^ this is the required trait"#);
+        .stderr_utf8();
+
+    // We don't remap the path of the `foo-prev` crate, so we remap it here.
+    let mut lines: Vec<_> = out.lines().collect();
+    for line in &mut lines {
+        if line.starts_with("  ::: ") {
+            *line = "  ::: foo-prev.rs:X:Y";
+        }
+    }
+    diff().expected_file("foo.stderr").actual_text("(rustc)", &lines.join("\n")).run();
 }