@@ -28,7 +28,7 @@ use errors;
2828use errors:: snippet:: { SnippetData } ;
2929use config;
3030use entry:: { self , EntryPointType } ;
31- use ext:: base:: { ExtCtxt , DummyResolver } ;
31+ use ext:: base:: { ExtCtxt , Resolver } ;
3232use ext:: build:: AstBuilder ;
3333use ext:: expand:: ExpansionConfig ;
3434use fold:: Folder ;
@@ -70,6 +70,7 @@ struct TestCtxt<'a> {
7070// Traverse the crate, collecting all the test functions, eliding any
7171// existing main functions, and synthesizing a main test harness
7272pub fn modify_for_testing ( sess : & ParseSess ,
73+ resolver : & mut Resolver ,
7374 should_test : bool ,
7475 krate : ast:: Crate ,
7576 span_diagnostic : & errors:: Handler ) -> ast:: Crate {
@@ -82,7 +83,7 @@ pub fn modify_for_testing(sess: &ParseSess,
8283 "reexport_test_harness_main" ) ;
8384
8485 if should_test {
85- generate_test_harness ( sess, reexport_test_harness_main, krate, span_diagnostic)
86+ generate_test_harness ( sess, resolver , reexport_test_harness_main, krate, span_diagnostic)
8687 } else {
8788 krate
8889 }
@@ -248,41 +249,39 @@ fn mk_reexport_mod(cx: &mut TestCtxt, tests: Vec<ast::Ident>,
248249 } ) . chain ( tested_submods. into_iter ( ) . map ( |( r, sym) | {
249250 let path = cx. ext_cx . path ( DUMMY_SP , vec ! [ super_, r, sym] ) ;
250251 cx. ext_cx . item_use_simple_ ( DUMMY_SP , ast:: Visibility :: Public , r, path)
251- } ) ) ;
252+ } ) ) . collect ( ) ;
252253
253254 let reexport_mod = ast:: Mod {
254255 inner : DUMMY_SP ,
255- items : items. collect ( ) ,
256+ items : items,
256257 } ;
257258
258259 let sym = token:: gensym_ident ( "__test_reexports" ) ;
259- let it = P ( ast:: Item {
260+ let it = cx . ext_cx . expander ( ) . fold_item ( P ( ast:: Item {
260261 ident : sym. clone ( ) ,
261262 attrs : Vec :: new ( ) ,
262263 id : ast:: DUMMY_NODE_ID ,
263264 node : ast:: ItemKind :: Mod ( reexport_mod) ,
264265 vis : ast:: Visibility :: Public ,
265266 span : DUMMY_SP ,
266- } ) ;
267+ } ) ) . pop ( ) . unwrap ( ) ;
267268
268269 ( it, sym)
269270}
270271
271272fn generate_test_harness ( sess : & ParseSess ,
273+ resolver : & mut Resolver ,
272274 reexport_test_harness_main : Option < InternedString > ,
273275 krate : ast:: Crate ,
274276 sd : & errors:: Handler ) -> ast:: Crate {
275277 // Remove the entry points
276278 let mut cleaner = EntryPointCleaner { depth : 0 } ;
277279 let krate = cleaner. fold_crate ( krate) ;
278280
279- let mut resolver = DummyResolver ;
280281 let mut cx: TestCtxt = TestCtxt {
281282 sess : sess,
282283 span_diagnostic : sd,
283- ext_cx : ExtCtxt :: new ( sess, vec ! [ ] ,
284- ExpansionConfig :: default ( "test" . to_string ( ) ) ,
285- & mut resolver) ,
284+ ext_cx : ExtCtxt :: new ( sess, vec ! [ ] , ExpansionConfig :: default ( "test" . to_string ( ) ) , resolver) ,
286285 path : Vec :: new ( ) ,
287286 testfns : Vec :: new ( ) ,
288287 reexport_test_harness_main : reexport_test_harness_main,
@@ -511,16 +510,17 @@ fn mk_test_module(cx: &mut TestCtxt) -> (P<ast::Item>, Option<P<ast::Item>>) {
511510 items : vec ! [ import, mainfn, tests] ,
512511 } ;
513512 let item_ = ast:: ItemKind :: Mod ( testmod) ;
514-
515513 let mod_ident = token:: gensym_ident ( "__test" ) ;
516- let item = P ( ast:: Item {
514+
515+ let mut expander = cx. ext_cx . expander ( ) ;
516+ let item = expander. fold_item ( P ( ast:: Item {
517517 id : ast:: DUMMY_NODE_ID ,
518518 ident : mod_ident,
519519 attrs : vec ! [ ] ,
520520 node : item_,
521521 vis : ast:: Visibility :: Public ,
522522 span : DUMMY_SP ,
523- } ) ;
523+ } ) ) . pop ( ) . unwrap ( ) ;
524524 let reexport = cx. reexport_test_harness_main . as_ref ( ) . map ( |s| {
525525 // building `use <ident> = __test::main`
526526 let reexport_ident = token:: str_to_ident ( & s) ;
@@ -529,14 +529,14 @@ fn mk_test_module(cx: &mut TestCtxt) -> (P<ast::Item>, Option<P<ast::Item>>) {
529529 nospan ( ast:: ViewPathSimple ( reexport_ident,
530530 path_node ( vec ! [ mod_ident, token:: str_to_ident( "main" ) ] ) ) ) ;
531531
532- P ( ast:: Item {
532+ expander . fold_item ( P ( ast:: Item {
533533 id : ast:: DUMMY_NODE_ID ,
534534 ident : keywords:: Invalid . ident ( ) ,
535535 attrs : vec ! [ ] ,
536536 node : ast:: ItemKind :: Use ( P ( use_path) ) ,
537537 vis : ast:: Visibility :: Inherited ,
538538 span : DUMMY_SP
539- } )
539+ } ) ) . pop ( ) . unwrap ( )
540540 } ) ;
541541
542542 debug ! ( "Synthetic test module:\n {}\n " , pprust:: item_to_string( & item) ) ;
0 commit comments