Skip to content

Commit d7877b0

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

File tree

1 file changed

+54
-3
lines changed

1 file changed

+54
-3
lines changed

src/librustdoc/doctest/tests.rs

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
use 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

59
fn 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

Comments
 (0)