Skip to content

Commit

Permalink
Add error codes block code flag
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Jun 12, 2016
1 parent 0740a93 commit 7746d7c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 11 deletions.
28 changes: 22 additions & 6 deletions src/librustdoc/html/markdown.rs
Expand Up @@ -408,7 +408,7 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
tests.add_test(text.to_owned(),
block_info.should_panic, block_info.no_run,
block_info.ignore, block_info.test_harness,
block_info.compile_fail);
block_info.compile_fail, block_info.error_codes);
}
}

Expand Down Expand Up @@ -454,6 +454,7 @@ struct LangString {
rust: bool,
test_harness: bool,
compile_fail: bool,
error_codes: Vec<String>,
}

impl LangString {
Expand All @@ -465,16 +466,22 @@ impl LangString {
rust: true, // NB This used to be `notrust = false`
test_harness: false,
compile_fail: false,
error_codes: Vec::new(),
}
}

fn parse(string: &str) -> LangString {
let mut seen_rust_tags = false;
let mut seen_other_tags = false;
let mut data = LangString::all_false();
let allow_compile_fail = match get_unstable_features_setting() {
UnstableFeatures::Allow | UnstableFeatures::Cheat=> true,
_ => false,
let mut allow_compile_fail = false;
let mut allow_error_code_check = false;
match get_unstable_features_setting() {
UnstableFeatures::Allow | UnstableFeatures::Cheat => {
allow_compile_fail = true;
allow_error_code_check = true;
}
_ => {},
};

let tokens = string.split(|c: char|
Expand All @@ -493,7 +500,15 @@ impl LangString {
data.compile_fail = true;
seen_rust_tags = true;
data.no_run = true;
},
}
x if allow_error_code_check && x.starts_with("E") && x.len() == 5 => {
if let Ok(_) = x[1..].parse::<u32>() {
data.error_codes.push(x.to_owned());
seen_rust_tags = true;
} else {
seen_other_tags = true;
}
}
_ => { seen_other_tags = true }
}
}
Expand Down Expand Up @@ -577,14 +592,15 @@ mod tests {
fn test_lang_string_parse() {
fn t(s: &str,
should_panic: bool, no_run: bool, ignore: bool, rust: bool, test_harness: bool,
compile_fail: bool) {
compile_fail: bool, error_codes: Vec<String>) {
assert_eq!(LangString::parse(s), LangString {
should_panic: should_panic,
no_run: no_run,
ignore: ignore,
rust: rust,
test_harness: test_harness,
compile_fail: compile_fail,
error_codes: error_codes,
})
}

Expand Down
26 changes: 21 additions & 5 deletions src/librustdoc/test.rs
Expand Up @@ -176,7 +176,7 @@ fn scrape_test_config(krate: &::rustc::hir::Crate) -> TestOptions {
fn runtest(test: &str, cratename: &str, cfgs: Vec<String>, libs: SearchPaths,
externs: core::Externs,
should_panic: bool, no_run: bool, as_test_harness: bool,
compile_fail: bool, opts: &TestOptions) {
compile_fail: bool, mut error_codes: Vec<String>, opts: &TestOptions) {
// the test harness wants its own `main` & top level functions, so
// never wrap the test in `fn main() { ... }`
let test = maketest(test, Some(cratename), as_test_harness, opts);
Expand Down Expand Up @@ -232,7 +232,7 @@ fn runtest(test: &str, cratename: &str, cfgs: Vec<String>, libs: SearchPaths,
None,
codemap.clone());
let old = io::set_panic(box Sink(data.clone()));
let _bomb = Bomb(data, old.unwrap_or(box io::stdout()));
let _bomb = Bomb(data.clone(), old.unwrap_or(box io::stdout()));

// Compile the code
let diagnostic_handler = errors::Handler::with_emitter(true, false, box emitter);
Expand Down Expand Up @@ -273,13 +273,28 @@ fn runtest(test: &str, cratename: &str, cfgs: Vec<String>, libs: SearchPaths,
} else if count == 0 && compile_fail == true {
panic!("test compiled while it wasn't supposed to")
}
if count > 0 && error_codes.len() > 0 {
let out = String::from_utf8(data.lock().unwrap().to_vec()).unwrap();
error_codes = error_codes.into_iter().filter(|err| !out.contains(err)).collect();
}
}
Ok(()) if compile_fail => panic!("test compiled while it wasn't supposed to"),
_ => {}
}
}
Err(_) if compile_fail == false => panic!("couldn't compile the test"),
_ => {}
Err(_) => {
if compile_fail == false {
panic!("couldn't compile the test");
}
if error_codes.len() > 0 {
let out = String::from_utf8(data.lock().unwrap().to_vec()).unwrap();
error_codes.retain(|err| !out.contains(err));
}
}
}

if error_codes.len() > 0 {
panic!("Some expected error codes were not found: {:?}", error_codes);
}

if no_run { return }
Expand Down Expand Up @@ -411,7 +426,7 @@ impl Collector {

pub fn add_test(&mut self, test: String,
should_panic: bool, no_run: bool, should_ignore: bool,
as_test_harness: bool, compile_fail: bool) {
as_test_harness: bool, compile_fail: bool, error_codes: Vec<String>) {
let name = if self.use_headers {
let s = self.current_header.as_ref().map(|s| &**s).unwrap_or("");
format!("{}_{}", s, self.cnt)
Expand Down Expand Up @@ -442,6 +457,7 @@ impl Collector {
no_run,
as_test_harness,
compile_fail,
error_codes,
&opts);
})
});
Expand Down

0 comments on commit 7746d7c

Please sign in to comment.