@@ -8,6 +8,7 @@ use cargo_test_support::registry::Package;
88use  cargo_test_support:: { 
99    basic_bin_manifest,  basic_lib_manifest,  basic_manifest,  cargo_exe,  project, 
1010} ; 
11+ use  cargo_test_support:: { cross_compile,  is_nightly,  paths} ; 
1112use  cargo_test_support:: { rustc_host,  sleep_ms} ; 
1213
1314#[ cargo_test]  
@@ -3660,3 +3661,232 @@ fn test_dep_with_dev() {
36603661        ) 
36613662        . run ( ) ; 
36623663} 
3664+ 
3665+ #[ cargo_test]  
3666+ fn  cargo_test_doctest_xcompile_ignores ( )  { 
3667+     if  !is_nightly ( )  { 
3668+         return ; 
3669+     } 
3670+     let  p = project ( ) 
3671+         . file ( "Cargo.toml" ,  & basic_lib_manifest ( "foo" ) ) 
3672+         . file ( 
3673+             "src/lib.rs" , 
3674+             r#" 
3675+             ///```ignore-x86_64 
3676+             ///assert!(cfg!(not(target_arch = "x86_64"))); 
3677+             ///``` 
3678+             pub fn foo() -> u8 { 
3679+                 4 
3680+             } 
3681+             "# , 
3682+         ) 
3683+         . build ( ) ; 
3684+ 
3685+     p. cargo ( "build" ) . run ( ) ; 
3686+     #[ cfg( not( target_arch = "x86_64" ) ) ]  
3687+     p. cargo ( "test" ) 
3688+         . with_stdout_contains ( 
3689+             "\  
3690+               test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\ 
3691+               ", 
3692+         ) 
3693+         . run ( ) ; 
3694+     #[ cfg( target_arch = "x86_64" ) ]  
3695+     p. cargo ( "test" ) 
3696+         . with_status ( 101 ) 
3697+         . with_stdout_contains ( 
3698+             "\  
3699+               test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out\ 
3700+               ", 
3701+         ) 
3702+         . run ( ) ; 
3703+ 
3704+     #[ cfg( not( target_arch = "x86_64" ) ) ]  
3705+     p. cargo ( "test -Zdoctest-xcompile" ) 
3706+         . masquerade_as_nightly_cargo ( ) 
3707+         . with_stdout_contains ( 
3708+             "\  
3709+               test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\ 
3710+               ", 
3711+         ) 
3712+         . run ( ) ; 
3713+ 
3714+     #[ cfg( target_arch = "x86_64" ) ]  
3715+     p. cargo ( "test -Zdoctest-xcompile" ) 
3716+         . masquerade_as_nightly_cargo ( ) 
3717+         . with_stdout_contains ( 
3718+             "\  
3719+               test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out\ 
3720+               ", 
3721+         ) 
3722+         . run ( ) ; 
3723+ } 
3724+ 
3725+ #[ cargo_test]  
3726+ fn  cargo_test_doctest_xcompile ( )  { 
3727+     if  !is_nightly ( )  { 
3728+         return ; 
3729+     } 
3730+     let  p = project ( ) 
3731+         . file ( "Cargo.toml" ,  & basic_lib_manifest ( "foo" ) ) 
3732+         . file ( 
3733+             "src/lib.rs" , 
3734+             r#" 
3735+ 
3736+             ///``` 
3737+             ///assert!(1 == 1); 
3738+             ///``` 
3739+             pub fn foo() -> u8 { 
3740+                 4 
3741+             } 
3742+             "# , 
3743+         ) 
3744+         . build ( ) ; 
3745+ 
3746+     p. cargo ( "build" ) . run ( ) ; 
3747+     p. cargo ( & format ! ( "test --target {}" ,  cross_compile:: alternate( ) ) ) 
3748+         . with_stdout_contains ( 
3749+             "\  
3750+               running 0 tests\ 
3751+               ", 
3752+         ) 
3753+         . run ( ) ; 
3754+     p. cargo ( & format ! ( 
3755+         "test --target {} -Zdoctest-xcompile" , 
3756+         cross_compile:: alternate( ) 
3757+     ) ) 
3758+     . masquerade_as_nightly_cargo ( ) 
3759+     . with_stdout_contains ( 
3760+         "\  
3761+           test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\ 
3762+           ", 
3763+     ) 
3764+     . run ( ) ; 
3765+ } 
3766+ 
3767+ #[ cargo_test]  
3768+ fn  cargo_test_doctest_xcompile_runner ( )  { 
3769+     use  std:: fs; 
3770+     if  !is_nightly ( )  { 
3771+         return ; 
3772+     } 
3773+ 
3774+     let  runner = project ( ) 
3775+         . file ( "Cargo.toml" ,  & basic_bin_manifest ( "runner" ) ) 
3776+         . file ( 
3777+             "src/main.rs" , 
3778+             r#" 
3779+             pub fn main() { 
3780+                 eprintln!("this is a runner"); 
3781+                 let args: Vec<String> = std::env::args().collect(); 
3782+                 std::process::Command::new(&args[1]).spawn(); 
3783+             } 
3784+             "# , 
3785+         ) 
3786+         . build ( ) ; 
3787+ 
3788+     runner. cargo ( "build" ) . run ( ) ; 
3789+     assert ! ( runner. bin( "runner" ) . is_file( ) ) ; 
3790+     let  runner_path = paths:: root ( ) . join ( "runner" ) ; 
3791+     fs:: copy ( & runner. bin ( "runner" ) ,  & runner_path) . unwrap ( ) ; 
3792+ 
3793+     let  config = paths:: root ( ) . join ( ".cargo/config" ) ; 
3794+ 
3795+     fs:: create_dir_all ( config. parent ( ) . unwrap ( ) ) . unwrap ( ) ; 
3796+     File :: create ( config) 
3797+         . unwrap ( ) 
3798+         . write_all ( 
3799+             format ! ( 
3800+                 r#" 
3801+ [target.'cfg(target_arch = "x86")'] 
3802+ runner = "{}" 
3803+ "# , 
3804+                 runner_path. to_str( ) . unwrap( ) 
3805+             ) 
3806+             . as_bytes ( ) , 
3807+         ) 
3808+         . unwrap ( ) ; 
3809+ 
3810+     let  p = project ( ) 
3811+         . file ( "Cargo.toml" ,  & basic_lib_manifest ( "foo" ) ) 
3812+         . file ( 
3813+             "src/lib.rs" , 
3814+             r#" 
3815+             ///``` 
3816+             ///assert!(cfg!(target_arch = "x86")); 
3817+             ///``` 
3818+             pub fn foo() -> u8 { 
3819+                 4 
3820+             } 
3821+             "# , 
3822+         ) 
3823+         . build ( ) ; 
3824+ 
3825+     p. cargo ( "build" ) . run ( ) ; 
3826+     p. cargo ( & format ! ( "test --target {}" ,  cross_compile:: alternate( ) ) ) 
3827+         . with_stdout_contains ( 
3828+             "\  
3829+               running 0 tests\ 
3830+               ", 
3831+         ) 
3832+         . run ( ) ; 
3833+     p. cargo ( & format ! ( 
3834+         "test --target {} -Zdoctest-xcompile" , 
3835+         cross_compile:: alternate( ) 
3836+     ) ) 
3837+     . masquerade_as_nightly_cargo ( ) 
3838+     . with_stdout_contains ( 
3839+         "\  
3840+           test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\ 
3841+           ", 
3842+     ) 
3843+     . with_stderr_contains ( 
3844+         "\  
3845+           this is a runner\ 
3846+           ", 
3847+     ) 
3848+     . run ( ) ; 
3849+ } 
3850+ 
3851+ #[ cargo_test]  
3852+ fn  cargo_test_doctest_xcompile_no_runner ( )  { 
3853+     if  !is_nightly ( )  { 
3854+         return ; 
3855+     } 
3856+ 
3857+     let  p = project ( ) 
3858+         . file ( "Cargo.toml" ,  & basic_lib_manifest ( "foo" ) ) 
3859+         . file ( 
3860+             "src/lib.rs" , 
3861+             r#" 
3862+ 
3863+             ///``` 
3864+             ///assert!(cfg!(target_arch = "x86")); 
3865+             ///``` 
3866+             pub fn foo() -> u8 { 
3867+                 4 
3868+             } 
3869+             "# , 
3870+         ) 
3871+         . build ( ) ; 
3872+ 
3873+     p. cargo ( "build" ) . run ( ) ; 
3874+     p. cargo ( & format ! ( "test --target {}" ,  cross_compile:: alternate( ) ) ) 
3875+         . with_stdout_contains ( 
3876+             "\  
3877+               running 0 tests\ 
3878+               ", 
3879+         ) 
3880+         . run ( ) ; 
3881+     p. cargo ( & format ! ( 
3882+         "test --target {} -Zdoctest-xcompile" , 
3883+         cross_compile:: alternate( ) 
3884+     ) ) 
3885+     . masquerade_as_nightly_cargo ( ) 
3886+     . with_stdout_contains ( 
3887+         "\  
3888+           test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\ 
3889+           ", 
3890+     ) 
3891+     . run ( ) ; 
3892+ } 
0 commit comments