1313#![ allow( dead_code) ]
1414#![ allow( unused_imports) ]
1515
16- use driver:: session:: Session ;
17- use front:: config;
18-
16+ use std:: gc:: { Gc , GC } ;
1917use std:: slice;
2018use std:: mem;
2119use std:: vec;
22- use syntax:: { ast, ast_util} ;
23- use syntax:: ast_util:: * ;
24- use syntax:: attr:: AttrMetaMethods ;
25- use syntax:: attr;
26- use syntax:: codemap:: { DUMMY_SP , Span , ExpnInfo , NameAndSpan , MacroAttribute } ;
27- use syntax:: codemap;
28- use syntax:: ext:: base:: ExtCtxt ;
29- use syntax:: ext:: build:: AstBuilder ;
30- use syntax:: ext:: expand:: ExpansionConfig ;
31- use syntax:: fold:: { Folder , MoveMap } ;
32- use syntax:: fold;
33- use syntax:: owned_slice:: OwnedSlice ;
34- use syntax:: parse:: token:: InternedString ;
35- use syntax:: parse:: token;
36- use syntax:: print:: pprust;
37- use syntax:: ptr:: P ;
38- use syntax:: util:: small_vector:: SmallVector ;
20+ use ast_util:: * ;
21+ use attr:: AttrMetaMethods ;
22+ use attr;
23+ use codemap:: { DUMMY_SP , Span , ExpnInfo , NameAndSpan , MacroAttribute } ;
24+ use codemap;
25+ use diagnostic;
26+ use config;
27+ use ext:: base:: ExtCtxt ;
28+ use ext:: build:: AstBuilder ;
29+ use ext:: expand:: ExpansionConfig ;
30+ use fold:: { Folder , MoveMap } ;
31+ use fold;
32+ use owned_slice:: OwnedSlice ;
33+ use parse:: token:: InternedString ;
34+ use parse:: { token, ParseSess } ;
35+ use print:: pprust;
36+ use { ast, ast_util} ;
37+ use ptr:: P ;
38+ use util:: small_vector:: SmallVector ;
3939
4040struct Test {
4141 span : Span ,
@@ -46,7 +46,8 @@ struct Test {
4646}
4747
4848struct TestCtxt < ' a > {
49- sess : & ' a Session ,
49+ sess : & ' a ParseSess ,
50+ span_diagnostic : & ' a diagnostic:: SpanHandler ,
5051 path : Vec < ast:: Ident > ,
5152 ext_cx : ExtCtxt < ' a > ,
5253 testfns : Vec < Test > ,
@@ -60,8 +61,10 @@ struct TestCtxt<'a> {
6061
6162// Traverse the crate, collecting all the test functions, eliding any
6263// existing main functions, and synthesizing a main test harness
63- pub fn modify_for_testing ( sess : & Session ,
64- krate : ast:: Crate ) -> ast:: Crate {
64+ pub fn modify_for_testing ( sess : & ParseSess ,
65+ cfg : & ast:: CrateConfig ,
66+ krate : ast:: Crate ,
67+ span_diagnostic : & diagnostic:: SpanHandler ) -> ast:: Crate {
6568 // We generate the test harness when building in the 'test'
6669 // configuration, either with the '--test' or '--cfg test'
6770 // command line options.
@@ -76,7 +79,7 @@ pub fn modify_for_testing(sess: &Session,
7679 "reexport_test_harness_main" ) ;
7780
7881 if should_test {
79- generate_test_harness ( sess, reexport_test_harness_main, krate)
82+ generate_test_harness ( sess, reexport_test_harness_main, krate, cfg , span_diagnostic )
8083 } else {
8184 strip_test_functions ( krate)
8285 }
@@ -113,8 +116,8 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> {
113116 if is_test_fn ( & self . cx , & * i) || is_bench_fn ( & self . cx , & * i) {
114117 match i. node {
115118 ast:: ItemFn ( _, ast:: UnsafeFn , _, _, _) => {
116- let sess = self . cx . sess ;
117- sess . span_fatal ( i. span ,
119+ let diag = self . cx . span_diagnostic ;
120+ diag . span_fatal ( i. span ,
118121 "unsafe functions cannot be used for \
119122 tests") ;
120123 }
@@ -223,12 +226,15 @@ fn mk_reexport_mod(cx: &mut TestCtxt, tests: Vec<ast::Ident>,
223226 ( it, sym)
224227}
225228
226- fn generate_test_harness ( sess : & Session ,
229+ fn generate_test_harness ( sess : & ParseSess ,
227230 reexport_test_harness_main : Option < InternedString > ,
228- krate : ast:: Crate ) -> ast:: Crate {
231+ krate : ast:: Crate ,
232+ cfg : & ast:: CrateConfig ,
233+ sd : & diagnostic:: SpanHandler ) -> ast:: Crate {
229234 let mut cx: TestCtxt = TestCtxt {
230235 sess : sess,
231- ext_cx : ExtCtxt :: new ( & sess. parse_sess , sess. opts . cfg . clone ( ) ,
236+ span_diagnostic : sd,
237+ ext_cx : ExtCtxt :: new ( sess, cfg. clone ( ) ,
232238 ExpansionConfig {
233239 deriving_hash_type_parameter : false ,
234240 crate_name : "test" . to_string ( ) ,
@@ -288,8 +294,8 @@ fn is_test_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
288294 }
289295
290296 if has_test_attr && !has_test_signature ( i) {
291- let sess = cx. sess ;
292- sess . span_err (
297+ let diag = cx. span_diagnostic ;
298+ diag . span_err (
293299 i. span ,
294300 "functions used as tests must have signature fn() -> ()."
295301 ) ;
@@ -320,8 +326,8 @@ fn is_bench_fn(cx: &TestCtxt, i: &ast::Item) -> bool {
320326 }
321327
322328 if has_bench_attr && !has_test_signature ( i) {
323- let sess = cx. sess ;
324- sess . span_err ( i. span , "functions used as benches must have signature \
329+ let diag = cx. span_diagnostic ;
330+ diag . span_err ( i. span , "functions used as benches must have signature \
325331 `fn(&mut Bencher) -> ()`") ;
326332 }
327333
@@ -547,9 +553,8 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> P<ast::Expr> {
547553 let mut visible_path = match cx. toplevel_reexport {
548554 Some ( id) => vec ! [ id] ,
549555 None => {
550- cx. sess . bug (
551- "expected to find top-level re-export name, but found None"
552- ) ;
556+ let diag = cx. span_diagnostic ;
557+ diag. handler . bug ( "expected to find top-level re-export name, but found None" ) ;
553558 }
554559 } ;
555560 visible_path. extend ( path. into_iter ( ) ) ;
0 commit comments