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