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) ]
7
3
8
4
use std:: slice:: SliceConcatExt ;
9
5
use std:: path:: { PathBuf , Path } ;
10
- use std:: io :: Write ;
6
+ use std:: env ;
11
7
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:: * ;
18
10
19
11
fn miri_path ( ) -> PathBuf {
20
12
if rustc_test_suite ( ) . is_some ( ) {
@@ -37,9 +29,21 @@ fn have_fullmir() -> bool {
37
29
std:: env:: var ( "MIRI_SYSROOT" ) . is_ok ( ) || rustc_test_suite ( ) . is_some ( )
38
30
}
39
31
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
+
40
44
fn compile_fail ( sysroot : & Path , path : & str , target : & str , host : & str , need_fullmir : bool , opt : bool ) {
41
45
if need_fullmir && !have_fullmir ( ) {
42
- eprintln ! ( "{}" , format!(
46
+ eprintln ! ( "{}\n " , format!(
43
47
"## Skipping compile-fail tests in {} against miri for target {} due to missing mir" ,
44
48
path,
45
49
target
@@ -65,23 +69,17 @@ fn compile_fail(sysroot: &Path, path: &str, target: &str, host: &str, need_fullm
65
69
flags. push ( "-Zmir-opt-level=1" . to_owned ( ) ) ;
66
70
}
67
71
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) ;
77
74
config. target = target. to_owned ( ) ;
78
75
config. host = host. to_owned ( ) ;
76
+ config. target_rustcflags = Some ( flags. join ( " " ) ) ;
79
77
compiletest:: run_tests ( & config) ;
80
78
}
81
79
82
80
fn miri_pass ( sysroot : & Path , path : & str , target : & str , host : & str , need_fullmir : bool , opt : bool ) {
83
81
if need_fullmir && !have_fullmir ( ) {
84
- eprintln ! ( "{}" , format!(
82
+ eprintln ! ( "{}\n " , format!(
85
83
"## Skipping run-pass tests in {} against miri for target {} due to missing mir" ,
86
84
path,
87
85
target
@@ -104,16 +102,10 @@ fn miri_pass(sysroot: &Path, path: &str, target: &str, host: &str, need_fullmir:
104
102
flags. push ( "-Zmir-opt-level=3" . to_owned ( ) ) ;
105
103
}
106
104
107
- let mut config = compiletest:: Config :: default ( ) . tempdir ( ) ;
108
- config. mode = "ui" . parse ( ) . expect ( "Invalid mode" ) ;
105
+ let mut config = mk_config ( "ui" ) ;
109
106
config. src_base = PathBuf :: from ( path) ;
110
107
config. target = target. to_owned ( ) ;
111
108
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
- }
117
109
config. target_rustcflags = Some ( flags. join ( " " ) ) ;
118
110
compiletest:: run_tests ( & config) ;
119
111
}
@@ -151,7 +143,6 @@ fn get_sysroot() -> PathBuf {
151
143
152
144
fn get_host ( ) -> String {
153
145
let rustc = rustc_test_suite ( ) . unwrap_or ( PathBuf :: from ( "rustc" ) ) ;
154
- println ! ( "using rustc at {}" , rustc. display( ) ) ;
155
146
let host = std:: process:: Command :: new ( rustc)
156
147
. arg ( "-vV" )
157
148
. output ( )
@@ -184,8 +175,7 @@ fn compile_fail_miri(opt: bool) {
184
175
compile_fail ( & sysroot, "tests/compile-fail-fullmir" , & host, & host, true , opt) ;
185
176
}
186
177
187
- #[ test]
188
- fn test ( ) {
178
+ fn test_runner ( _tests : & [ & ( ) ] ) {
189
179
// We put everything into a single test to avoid the parallelism `cargo test`
190
180
// introduces. We still get parallelism within our tests because `compiletest`
191
181
// uses `libtest` which runs jobs in parallel.
0 commit comments