Skip to content

Commit 38947d8

Browse files
Add more tests to check extracted doctests feature
1 parent 8a07c73 commit 38947d8

File tree

1 file changed

+55
-3
lines changed

1 file changed

+55
-3
lines changed

src/librustdoc/doctest/tests.rs

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
use std::path::PathBuf;
22

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;
49

510
fn make_test(
611
test_code: &str,
@@ -17,9 +22,9 @@ fn make_test(
1722
builder = builder.test_id(test_id.to_string());
1823
}
1924
let doctest = builder.build(None);
20-
let (wrapper, line_offset) =
25+
let (wrapped, line_offset) =
2126
doctest.generate_unique_doctest(test_code, dont_insert_main, opts, crate_name);
22-
(wrapper.to_string(), line_offset)
27+
(wrapped.to_string(), line_offset)
2328
}
2429

2530
/// Default [`GlobalTestOptions`] for these unit tests.
@@ -451,3 +456,50 @@ pub mod outer_module {
451456
let (output, len) = make_test(input, None, false, &opts, None);
452457
assert_eq!((output, len), (expected, 2));
453458
}
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

Comments
 (0)