2024-08-06 02:14:08 +00:00
//@ only-linux
//@ ignore-wasm32
//@ ignore-wasm64
2024-08-10 00:32:10 +00:00
// ignore-tidy-linelength
2024-08-06 02:14:08 +00:00
2024-08-10 18:06:10 +00:00
use run_make_support ::{ rust_lib_name , rustc } ;
2024-08-06 02:14:08 +00:00
fn main ( ) {
rustc ( ) . input ( " multiple-dep-versions-1.rs " ) . run ( ) ;
rustc ( ) . input ( " multiple-dep-versions-2.rs " ) . extra_filename ( " 2 " ) . metadata ( " 2 " ) . run ( ) ;
2024-08-07 15:08:43 +00:00
rustc ( )
. input ( " multiple-dep-versions-3.rs " )
. extern_ ( " dependency " , rust_lib_name ( " dependency2 " ) )
. run ( ) ;
2024-08-06 02:14:08 +00:00
2024-08-10 18:16:15 +00:00
rustc ( )
2024-08-06 02:14:08 +00:00
. input ( " multiple-dep-versions.rs " )
. extern_ ( " dependency " , rust_lib_name ( " dependency " ) )
2024-08-07 15:08:43 +00:00
. extern_ ( " dep_2_reexport " , rust_lib_name ( " foo " ) )
2024-08-06 18:36:43 +00:00
. run_fail ( )
2024-08-20 18:44:29 +00:00
. assert_stderr_contains ( r #" error[E0277]: the trait bound `dep_2_reexport::Type: Trait` is not satisfied because the trait comes from a different crate version
- -> multiple - dep - versions . rs :7 :18
|
7 | do_something ( Type ) ;
| ^ ^ ^ ^ the trait ` Trait ` is not implemented for ` dep_2_reexport ::Type `
|
2024-08-20 18:37:08 +00:00
note : there are multiple different versions of crate ` dependency ` in the dependency graph " #)
. assert_stderr_contains ( r #"
2024-08-20 18:44:29 +00:00
3 | pub struct Type ( pub i32 ) ;
| - - - - - - - - - - - - - - - this type implements the required trait
4 | pub trait Trait {
| ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ this is the required trait
2024-08-20 18:37:08 +00:00
" #)
. assert_stderr_contains ( r #"
2024-08-20 18:44:29 +00:00
1 | extern crate dep_2_reexport ;
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - one version of crate ` dependency ` is used here , as a dependency of crate ` foo `
2 | extern crate dependency ;
| - - - - - - - - - - - - - - - - - - - - - - - - one version of crate ` dependency ` is used here , as a direct dependency of the current crate " #)
2024-08-20 18:37:08 +00:00
. assert_stderr_contains ( r #"
2024-08-20 18:44:29 +00:00
3 | pub struct Type ;
| - - - - - - - - - - - - - - - this type doesn ' t implement the required trait
4 | 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 " #)
2024-08-20 18:37:08 +00:00
. assert_stderr_contains ( r #" error[E0599]: no method named `foo` found for struct `dep_2_reexport::Type` in the current scope
2024-08-10 00:32:10 +00:00
- -> multiple - dep - versions . rs :8 :10
|
8 | Type . foo ( ) ;
| ^ ^ ^ method not found in ` Type `
|
2024-08-20 18:37:08 +00:00
note : there are multiple different versions of crate ` dependency ` in the dependency graph " #)
. assert_stderr_contains ( r #"
2024-08-10 00:32:10 +00:00
4 | pub trait Trait {
| ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ this is the trait that is needed
5 | fn foo ( & self ) ;
| - - - - - - - - - - - - - - the method is available for ` dep_2_reexport ::Type ` here
|
2024-09-23 01:56:38 +00:00
::: multiple - dep - versions . rs :4 :18
2024-08-10 00:32:10 +00:00
|
2024-09-23 01:56:38 +00:00
4 | use dependency ::{ Trait , do_something } ;
2024-08-20 18:37:08 +00:00
| - - - - - ` Trait ` imported here doesn ' t correspond to the right version of crate ` dependency ` " #)
. assert_stderr_contains ( r #"
2024-08-10 00:32:10 +00:00
4 | pub trait Trait {
2024-08-20 18:37:08 +00:00
| - - - - - - - - - - - - - - - this is the trait that was imported " #)
. assert_stderr_contains ( r #"
2024-08-10 00:32:10 +00:00
error [ E0599 ] : no function or associated item named ` bar ` found for struct ` dep_2_reexport ::Type ` in the current scope
- -> multiple - dep - versions . rs :9 :11
|
9 | Type ::bar ( ) ;
| ^ ^ ^ function or associated item not found in ` Type `
|
2024-08-20 18:37:08 +00:00
note : there are multiple different versions of crate ` dependency ` in the dependency graph " #)
. assert_stderr_contains ( r #"
2024-08-10 00:32:10 +00:00
4 | pub trait Trait {
| ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ this is the trait that is needed
5 | fn foo ( & self ) ;
6 | fn bar ( ) ;
2024-08-12 19:45:20 +00:00
| - - - - - - - - - the associated function is available for ` dep_2_reexport ::Type ` here
2024-08-10 00:32:10 +00:00
|
2024-09-23 01:56:38 +00:00
::: multiple - dep - versions . rs :4 :18
2024-08-10 00:32:10 +00:00
|
2024-09-23 01:56:38 +00:00
4 | use dependency ::{ Trait , do_something } ;
2024-08-20 18:37:08 +00:00
| - - - - - ` Trait ` imported here doesn ' t correspond to the right version of crate ` dependency ` " #)
2024-08-08 21:35:25 +00:00
. assert_stderr_contains (
r #"
6 | pub struct OtherType ;
| - - - - - - - - - - - - - - - - - - - - this type doesn ' t implement the required trait " #);
2024-08-06 02:14:08 +00:00
}