1- #![ feature( slice_concat_ext) ]
2-
3- extern crate compiletest_rs as compiletest;
4- extern crate colored;
5-
6- use colored:: * ;
1+ #![ feature( slice_concat_ext, custom_test_frameworks) ]
2+ #![ test_runner( test_runner) ]
73
84use std:: slice:: SliceConcatExt ;
95use std:: path:: { PathBuf , Path } ;
10- use std:: io :: Write ;
6+ use std:: env ;
117
12- macro_rules! eprintln {
13- ( $( $arg: tt) * ) => {
14- let stderr = std:: io:: stderr( ) ;
15- writeln!( stderr. lock( ) , $( $arg) * ) . unwrap( ) ;
16- }
17- }
8+ use compiletest_rs as compiletest;
9+ use colored:: * ;
1810
1911fn miri_path ( ) -> PathBuf {
2012 if rustc_test_suite ( ) . is_some ( ) {
@@ -37,9 +29,21 @@ fn have_fullmir() -> bool {
3729 std:: env:: var ( "MIRI_SYSROOT" ) . is_ok ( ) || rustc_test_suite ( ) . is_some ( )
3830}
3931
32+ fn mk_config ( mode : & str ) -> compiletest:: common:: ConfigWithTemp {
33+ let mut config = compiletest:: Config :: default ( ) . tempdir ( ) ;
34+ config. mode = mode. parse ( ) . expect ( "Invalid mode" ) ;
35+ config. rustc_path = miri_path ( ) ;
36+ if rustc_test_suite ( ) . is_some ( ) {
37+ config. run_lib_path = rustc_lib_path ( ) ;
38+ config. compile_lib_path = rustc_lib_path ( ) ;
39+ }
40+ config. filter = env:: args ( ) . nth ( 1 ) ;
41+ config
42+ }
43+
4044fn compile_fail ( sysroot : & Path , path : & str , target : & str , host : & str , need_fullmir : bool , opt : bool ) {
4145 if need_fullmir && !have_fullmir ( ) {
42- eprintln ! ( "{}" , format!(
46+ eprintln ! ( "{}\n " , format!(
4347 "## Skipping compile-fail tests in {} against miri for target {} due to missing mir" ,
4448 path,
4549 target
@@ -65,23 +69,17 @@ fn compile_fail(sysroot: &Path, path: &str, target: &str, host: &str, need_fullm
6569 flags. push ( "-Zmir-opt-level=1" . to_owned ( ) ) ;
6670 }
6771
68- let mut config = compiletest:: Config :: default ( ) . tempdir ( ) ;
69- config. mode = "compile-fail" . parse ( ) . expect ( "Invalid mode" ) ;
70- config. rustc_path = miri_path ( ) ;
71- if rustc_test_suite ( ) . is_some ( ) {
72- config. run_lib_path = rustc_lib_path ( ) ;
73- config. compile_lib_path = rustc_lib_path ( ) ;
74- }
75- config. src_base = PathBuf :: from ( path. to_string ( ) ) ;
76- config. target_rustcflags = Some ( flags. join ( " " ) ) ;
72+ let mut config = mk_config ( "compile-fail" ) ;
73+ config. src_base = PathBuf :: from ( path) ;
7774 config. target = target. to_owned ( ) ;
7875 config. host = host. to_owned ( ) ;
76+ config. target_rustcflags = Some ( flags. join ( " " ) ) ;
7977 compiletest:: run_tests ( & config) ;
8078}
8179
8280fn miri_pass ( sysroot : & Path , path : & str , target : & str , host : & str , need_fullmir : bool , opt : bool ) {
8381 if need_fullmir && !have_fullmir ( ) {
84- eprintln ! ( "{}" , format!(
82+ eprintln ! ( "{}\n " , format!(
8583 "## Skipping run-pass tests in {} against miri for target {} due to missing mir" ,
8684 path,
8785 target
@@ -104,16 +102,10 @@ fn miri_pass(sysroot: &Path, path: &str, target: &str, host: &str, need_fullmir:
104102 flags. push ( "-Zmir-opt-level=3" . to_owned ( ) ) ;
105103 }
106104
107- let mut config = compiletest:: Config :: default ( ) . tempdir ( ) ;
108- config. mode = "ui" . parse ( ) . expect ( "Invalid mode" ) ;
105+ let mut config = mk_config ( "ui" ) ;
109106 config. src_base = PathBuf :: from ( path) ;
110107 config. target = target. to_owned ( ) ;
111108 config. host = host. to_owned ( ) ;
112- config. rustc_path = miri_path ( ) ;
113- if rustc_test_suite ( ) . is_some ( ) {
114- config. run_lib_path = rustc_lib_path ( ) ;
115- config. compile_lib_path = rustc_lib_path ( ) ;
116- }
117109 config. target_rustcflags = Some ( flags. join ( " " ) ) ;
118110 compiletest:: run_tests ( & config) ;
119111}
@@ -151,7 +143,6 @@ fn get_sysroot() -> PathBuf {
151143
152144fn get_host ( ) -> String {
153145 let rustc = rustc_test_suite ( ) . unwrap_or ( PathBuf :: from ( "rustc" ) ) ;
154- println ! ( "using rustc at {}" , rustc. display( ) ) ;
155146 let host = std:: process:: Command :: new ( rustc)
156147 . arg ( "-vV" )
157148 . output ( )
@@ -184,8 +175,7 @@ fn compile_fail_miri(opt: bool) {
184175 compile_fail ( & sysroot, "tests/compile-fail-fullmir" , & host, & host, true , opt) ;
185176}
186177
187- #[ test]
188- fn test ( ) {
178+ fn test_runner ( _tests : & [ & ( ) ] ) {
189179 // We put everything into a single test to avoid the parallelism `cargo test`
190180 // introduces. We still get parallelism within our tests because `compiletest`
191181 // uses `libtest` which runs jobs in parallel.
0 commit comments