1
Fork 0

Fix librustdoc test

This commit is contained in:
Guillaume Gomez 2016-02-11 11:09:01 +01:00
parent 194f1ca3f1
commit eb7664b445
2 changed files with 13 additions and 27 deletions

View file

@ -27,6 +27,7 @@
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
use libc; use libc;
use rustc::session::config::get_unstable_features_setting;
use std::ascii::AsciiExt; use std::ascii::AsciiExt;
use std::cell::RefCell; use std::cell::RefCell;
use std::default::Default; use std::default::Default;
@ -34,7 +35,7 @@ use std::ffi::CString;
use std::fmt; use std::fmt;
use std::slice; use std::slice;
use std::str; use std::str;
use std::env; use syntax::feature_gate::UnstableFeatures;
use html::render::derive_id; use html::render::derive_id;
use html::toc::TocBuilder; use html::toc::TocBuilder;
@ -440,18 +441,6 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
} }
} }
fn get_unstable_features_setting() -> bool {
// Check if we can activate compile_fail option or not.
//
// It is done to ensure that it won't be used out-of-tree
// because it's not ready yet for production.
match (option_env!("CFG_BOOTSTRAP_KEY"),
env::var("RUSTC_BOOTSTRAP_KEY").ok()) {
(Some(ref cfg), Some(ref r_key)) => cfg == r_key,
_ => false,
}
}
#[derive(Eq, PartialEq, Clone, Debug)] #[derive(Eq, PartialEq, Clone, Debug)]
struct LangString { struct LangString {
should_panic: bool, should_panic: bool,
@ -478,7 +467,10 @@ impl LangString {
let mut seen_rust_tags = false; let mut seen_rust_tags = false;
let mut seen_other_tags = false; let mut seen_other_tags = false;
let mut data = LangString::all_false(); let mut data = LangString::all_false();
let allow_compile_fail = get_unstable_features_setting(); let allow_compile_fail = match get_unstable_features_setting() {
UnstableFeatures::Allow | UnstableFeatures::Cheat=> true,
_ => false,
};
let tokens = string.split(|c: char| let tokens = string.split(|c: char|
!(c == '_' || c == '-' || c.is_alphanumeric()) !(c == '_' || c == '-' || c.is_alphanumeric())
@ -487,11 +479,7 @@ impl LangString {
for token in tokens { for token in tokens {
match token { match token {
"" => {}, "" => {},
"should_panic" => { "should_panic" => { data.should_panic = true; seen_rust_tags = true; },
data.should_panic = true;
seen_rust_tags = true;
data.no_run = true;
},
"no_run" => { data.no_run = true; seen_rust_tags = true; }, "no_run" => { data.no_run = true; seen_rust_tags = true; },
"ignore" => { data.ignore = true; seen_rust_tags = true; }, "ignore" => { data.ignore = true; seen_rust_tags = true; },
"rust" => { data.rust = true; seen_rust_tags = true; }, "rust" => { data.rust = true; seen_rust_tags = true; },
@ -600,10 +588,10 @@ mod tests {
t("rust", false, false, false, true, false, false); t("rust", false, false, false, true, false, false);
t("sh", false, false, false, false, false, false); t("sh", false, false, false, false, false, false);
t("ignore", false, false, true, true, false, false); t("ignore", false, false, true, true, false, false);
t("should_panic", true, true, false, true, false, false); t("should_panic", true, false, false, true, false, false);
t("no_run", false, true, false, true, false, false); t("no_run", false, true, false, true, false, false);
t("test_harness", false, false, false, true, true, false); t("test_harness", false, false, false, true, true, false);
t("compile_fail", false, false, false, true, false, true); t("compile_fail", false, true, false, true, false, true);
t("{.no_run .example}", false, true, false, true, false, false); t("{.no_run .example}", false, true, false, true, false, false);
t("{.sh .should_panic}", true, false, false, true, false, false); t("{.sh .should_panic}", true, false, false, true, false, false);
t("{.example .rust}", false, false, false, true, false, false); t("{.example .rust}", false, false, false, true, false, false);

View file

@ -257,18 +257,16 @@ fn runtest(test: &str, cratename: &str, cfgs: Vec<String>, libs: SearchPaths,
let b_sess = AssertRecoverSafe::new(&sess); let b_sess = AssertRecoverSafe::new(&sess);
let b_cstore = AssertRecoverSafe::new(&cstore); let b_cstore = AssertRecoverSafe::new(&cstore);
let b_cfg = AssertRecoverSafe::new(cfg.clone()); let b_cfg = AssertRecoverSafe::new(cfg.clone());
let b_input = AssertRecoverSafe::new(&input);
let b_out = AssertRecoverSafe::new(&out);
let b_control = AssertRecoverSafe::new(&control); let b_control = AssertRecoverSafe::new(&control);
panic::recover(|| { panic::recover(|| {
AssertRecoverSafe::new(driver::compile_input(&b_sess, &b_cstore, (*b_cfg).clone(), driver::compile_input(&b_sess, &b_cstore, (*b_cfg).clone(),
&b_input, &b_out, &input, &out,
&None, None, &b_control)) &None, None, &b_control)
}) })
} { } {
Ok(r) => { Ok(r) => {
match *r { match r {
Err(count) if count > 0 && compile_fail == false => { Err(count) if count > 0 && compile_fail == false => {
sess.fatal("aborting due to previous error(s)") sess.fatal("aborting due to previous error(s)")
} }