diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2017-02-06 23:28:31 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2017-02-08 10:10:06 +0100 |
| commit | d2f8abf2549304b3b67ac6e837d046ddf02c2cd6 (patch) | |
| tree | ac4d5225b0359c6d60977fc9f1179a0e63301b1a /src | |
| parent | b0803d4aedc06504cb4cb86f63beb6650ff67a8e (diff) | |
| download | rust-d2f8abf2549304b3b67ac6e837d046ddf02c2cd6.tar.gz rust-d2f8abf2549304b3b67ac6e837d046ddf02c2cd6.zip | |
Add more test for rustdoc --test
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/rustdoc/test_option_check/bar.rs | 19 | ||||
| -rw-r--r-- | src/test/rustdoc/test_option_check/test.rs | 2 | ||||
| -rw-r--r-- | src/tools/compiletest/src/runtest.rs | 83 |
3 files changed, 79 insertions, 25 deletions
diff --git a/src/test/rustdoc/test_option_check/bar.rs b/src/test/rustdoc/test_option_check/bar.rs new file mode 100644 index 00000000000..51daa807526 --- /dev/null +++ b/src/test/rustdoc/test_option_check/bar.rs @@ -0,0 +1,19 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: --test +// check-test-line-numbers-match + +/// This looks like another awesome test! +/// +/// ``` +/// println!("foo?"); +/// ``` +pub fn foooo() {} diff --git a/src/test/rustdoc/test_option_check/test.rs b/src/test/rustdoc/test_option_check/test.rs index b2afe43204d..a9578c5f434 100644 --- a/src/test/rustdoc/test_option_check/test.rs +++ b/src/test/rustdoc/test_option_check/test.rs @@ -11,6 +11,8 @@ // compile-flags: --test // check-test-line-numbers-match +pub mod bar; + /// This is a Foo; /// /// ``` diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index a8c46722e16..4e527661df7 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -30,6 +30,7 @@ use std::io::{self, BufReader}; use std::path::{Path, PathBuf}; use std::process::{Command, Output, ExitStatus}; use std::str; +use std::collections::HashMap; use extract_gdb_version; @@ -1902,17 +1903,28 @@ actual:\n\ } } - fn check_rustdoc_test_option(&self, res: ProcRes) { - let mut file = fs::File::open(&self.testpaths.file) + fn get_lines<P: AsRef<Path>>(&self, path: &P, + mut other_files: Option<&mut Vec<String>>) -> Vec<usize> { + let mut file = fs::File::open(path) .expect("markdown_test_output_check_entry File::open failed"); let mut content = String::new(); file.read_to_string(&mut content) .expect("markdown_test_output_check_entry read_to_string failed"); let mut ignore = false; - let mut v: Vec<usize> = - content.lines() - .enumerate() - .filter_map(|(line_nb, line)| { + content.lines() + .enumerate() + .filter_map(|(line_nb, line)| { + if (line.trim_left().starts_with("pub mod ") || + line.trim_left().starts_with("mod ")) && + line.ends_with(";") { + if let Some(ref mut other_files) = other_files { + other_files.push(line.rsplit("mod ") + .next() + .unwrap() + .replace(";", "")); + } + None + } else { let sline = line.split("///").last().unwrap_or(""); let line = sline.trim_left(); if line.starts_with("```") { @@ -1926,8 +1938,21 @@ actual:\n\ } else { None } - }) - .collect(); + } + }) + .collect() + } + + fn check_rustdoc_test_option(&self, res: ProcRes) { + let mut other_files = Vec::new(); + let mut files: HashMap<String, Vec<usize>> = HashMap::new(); + files.insert(self.testpaths.file.to_str().unwrap().to_owned(), + self.get_lines(&self.testpaths.file, Some(&mut other_files))); + for other_file in other_files { + let mut path = self.testpaths.file.clone(); + path.set_file_name(&format!("{}.rs", other_file)); + files.insert(path.to_str().unwrap().to_owned(), self.get_lines(&path, None)); + } let mut tested = 0; for _ in res.stdout.split("\n") @@ -1935,27 +1960,35 @@ actual:\n\ .inspect(|s| { let tmp: Vec<&str> = s.split(" - line ").collect(); if tmp.len() == 2 { - tested += 1; - let line = tmp[1].split(" ...") - .next() - .unwrap_or("0") - .parse() - .unwrap_or(0); - if let Ok(pos) = v.binary_search(&line) { - v.remove(pos); - } else { - self.fatal_proc_rec( - &format!("Not found doc test: \"{}\" in {:?}", s, v), - &res); + let path = tmp[0].rsplit("test ").next().unwrap(); + if let Some(ref mut v) = files.get_mut(path) { + tested += 1; + let line = tmp[1].split(" ...") + .next() + .unwrap_or("0") + .parse() + .unwrap_or(0); + if let Ok(pos) = v.binary_search(&line) { + v.remove(pos); + } else { + self.fatal_proc_rec( + &format!("Not found doc test: \"{}\" in \"{}\":{:?}", + s, path, v), + &res); + } } } }) {} if tested == 0 { - self.fatal_proc_rec("No test has been found", &res); - } else if v.len() != 0 { - self.fatal_proc_rec(&format!("Not found test at line{} {:?}", - if v.len() > 1 { "s" } else { "" }, v), - &res); + self.fatal_proc_rec(&format!("No test has been found... {:?}", files), &res); + } else { + for (entry, v) in &files { + if v.len() != 0 { + self.fatal_proc_rec(&format!("Not found test at line{} \"{}\":{:?}", + if v.len() > 1 { "s" } else { "" }, entry, v), + &res); + } + } } } |
