11use std:: path:: PathBuf ;
22
3- use super :: { BuildDocTestBuilder , GlobalTestOptions } ;
3+ use super :: { BuildDocTestBuilder , GlobalTestOptions , ScrapedDocTest } ;
4+ use super :: extracted:: ExtractedDocTests ;
5+ use crate :: html:: markdown:: LangString ;
6+ use rustc_span:: { DUMMY_SP , FileName } ;
7+ use rustc_span:: edition:: Edition ;
48
59fn make_test (
610 test_code : & str ,
@@ -17,9 +21,9 @@ fn make_test(
1721 builder = builder. test_id ( test_id. to_string ( ) ) ;
1822 }
1923 let doctest = builder. build ( None ) ;
20- let ( wrapper , line_offset) =
24+ let ( wrapped , line_offset) =
2125 doctest. generate_unique_doctest ( test_code, dont_insert_main, opts, crate_name) ;
22- ( wrapper . to_string ( ) , line_offset)
26+ ( wrapped . to_string ( ) , line_offset)
2327}
2428
2529/// Default [`GlobalTestOptions`] for these unit tests.
@@ -451,3 +455,50 @@ pub mod outer_module {
451455 let ( output, len) = make_test ( input, None , false , & opts, None ) ;
452456 assert_eq ! ( ( output, len) , ( expected, 2 ) ) ;
453457}
458+
459+ fn get_extracted_doctests ( code : & str ) -> ExtractedDocTests {
460+ let opts = default_global_opts ( "" ) ;
461+ let mut extractor = ExtractedDocTests :: new ( ) ;
462+ extractor. add_test_with_edition (
463+ ScrapedDocTest :: new (
464+ FileName :: Custom ( String :: new ( ) ) ,
465+ 0 ,
466+ Vec :: new ( ) ,
467+ LangString :: default ( ) ,
468+ code. to_string ( ) ,
469+ DUMMY_SP ,
470+ ) ,
471+ & opts,
472+ Edition :: Edition2018 ,
473+ ) ;
474+ extractor
475+ }
476+
477+ // Test that `extracted::DocTest::wrapper` is `None` if the doctest has a `main` function.
478+ #[ test]
479+ fn test_extracted_doctest_wrapper_field ( ) {
480+ let extractor = get_extracted_doctests ( "fn main() {}" ) ;
481+
482+ assert_eq ! ( extractor. doctests( ) . len( ) , 1 ) ;
483+ let doctest_code = extractor. doctests ( ) [ 0 ] . doctest_code . as_ref ( ) . unwrap ( ) ;
484+ assert ! ( doctest_code. wrapper. is_none( ) ) ;
485+ }
486+
487+ // Test that `ExtractedDocTest::doctest_code` is `None` if the doctest has syntax error.
488+ #[ test]
489+ fn test_extracted_doctest_doctest_code_field ( ) {
490+ let extractor = get_extracted_doctests ( "let x +=" ) ;
491+
492+ assert_eq ! ( extractor. doctests( ) . len( ) , 1 ) ;
493+ assert ! ( extractor. doctests( ) [ 0 ] . doctest_code. is_none( ) ) ;
494+ }
495+
496+ // Test that `extracted::DocTest::wrapper` is `Some` if the doctest needs wrapping.
497+ #[ test]
498+ fn test_extracted_doctest_wrapper_field_with_info ( ) {
499+ let extractor = get_extracted_doctests ( "let x = 12;" ) ;
500+
501+ assert_eq ! ( extractor. doctests( ) . len( ) , 1 ) ;
502+ let doctest_code = extractor. doctests ( ) [ 0 ] . doctest_code . as_ref ( ) . unwrap ( ) ;
503+ assert ! ( doctest_code. wrapper. is_some( ) ) ;
504+ }
0 commit comments