@@ -30,6 +30,7 @@ use std::io::{self, BufReader};
3030use std:: path:: { Path , PathBuf } ;
3131use std:: process:: { Command , Output , ExitStatus } ;
3232use std:: str;
33+ use std:: collections:: HashMap ;
3334
3435use extract_gdb_version;
3536
@@ -1902,17 +1903,28 @@ actual:\n\
19021903 }
19031904 }
19041905
1905- fn check_rustdoc_test_option ( & self , res : ProcRes ) {
1906- let mut file = fs:: File :: open ( & self . testpaths . file )
1906+ fn get_lines < P : AsRef < Path > > ( & self , path : & P ,
1907+ mut other_files : Option < & mut Vec < String > > ) -> Vec < usize > {
1908+ let mut file = fs:: File :: open ( path)
19071909 . expect ( "markdown_test_output_check_entry File::open failed" ) ;
19081910 let mut content = String :: new ( ) ;
19091911 file. read_to_string ( & mut content)
19101912 . expect ( "markdown_test_output_check_entry read_to_string failed" ) ;
19111913 let mut ignore = false ;
1912- let mut v: Vec < usize > =
1913- content. lines ( )
1914- . enumerate ( )
1915- . filter_map ( |( line_nb, line) | {
1914+ content. lines ( )
1915+ . enumerate ( )
1916+ . filter_map ( |( line_nb, line) | {
1917+ if ( line. trim_left ( ) . starts_with ( "pub mod " ) ||
1918+ line. trim_left ( ) . starts_with ( "mod " ) ) &&
1919+ line. ends_with ( ";" ) {
1920+ if let Some ( ref mut other_files) = other_files {
1921+ other_files. push ( line. rsplit ( "mod " )
1922+ . next ( )
1923+ . unwrap ( )
1924+ . replace ( ";" , "" ) ) ;
1925+ }
1926+ None
1927+ } else {
19161928 let sline = line. split ( "///" ) . last ( ) . unwrap_or ( "" ) ;
19171929 let line = sline. trim_left ( ) ;
19181930 if line. starts_with ( "```" ) {
@@ -1926,36 +1938,57 @@ actual:\n\
19261938 } else {
19271939 None
19281940 }
1929- } )
1930- . collect ( ) ;
1941+ }
1942+ } )
1943+ . collect ( )
1944+ }
1945+
1946+ fn check_rustdoc_test_option ( & self , res : ProcRes ) {
1947+ let mut other_files = Vec :: new ( ) ;
1948+ let mut files: HashMap < String , Vec < usize > > = HashMap :: new ( ) ;
1949+ files. insert ( self . testpaths . file . to_str ( ) . unwrap ( ) . to_owned ( ) ,
1950+ self . get_lines ( & self . testpaths . file , Some ( & mut other_files) ) ) ;
1951+ for other_file in other_files {
1952+ let mut path = self . testpaths . file . clone ( ) ;
1953+ path. set_file_name ( & format ! ( "{}.rs" , other_file) ) ;
1954+ files. insert ( path. to_str ( ) . unwrap ( ) . to_owned ( ) , self . get_lines ( & path, None ) ) ;
1955+ }
19311956
19321957 let mut tested = 0 ;
19331958 for _ in res. stdout . split ( "\n " )
19341959 . filter ( |s| s. starts_with ( "test " ) )
19351960 . inspect ( |s| {
19361961 let tmp: Vec < & str > = s. split ( " - line " ) . collect ( ) ;
19371962 if tmp. len ( ) == 2 {
1938- tested += 1 ;
1939- let line = tmp[ 1 ] . split ( " ..." )
1940- . next ( )
1941- . unwrap_or ( "0" )
1942- . parse ( )
1943- . unwrap_or ( 0 ) ;
1944- if let Ok ( pos) = v. binary_search ( & line) {
1945- v. remove ( pos) ;
1946- } else {
1947- self . fatal_proc_rec (
1948- & format ! ( "Not found doc test: \" {}\" in {:?}" , s, v) ,
1949- & res) ;
1963+ let path = tmp[ 0 ] . rsplit ( "test " ) . next ( ) . unwrap ( ) ;
1964+ if let Some ( ref mut v) = files. get_mut ( path) {
1965+ tested += 1 ;
1966+ let line = tmp[ 1 ] . split ( " ..." )
1967+ . next ( )
1968+ . unwrap_or ( "0" )
1969+ . parse ( )
1970+ . unwrap_or ( 0 ) ;
1971+ if let Ok ( pos) = v. binary_search ( & line) {
1972+ v. remove ( pos) ;
1973+ } else {
1974+ self . fatal_proc_rec (
1975+ & format ! ( "Not found doc test: \" {}\" in \" {}\" :{:?}" ,
1976+ s, path, v) ,
1977+ & res) ;
1978+ }
19501979 }
19511980 }
19521981 } ) { }
19531982 if tested == 0 {
1954- self . fatal_proc_rec ( "No test has been found" , & res) ;
1955- } else if v. len ( ) != 0 {
1956- self . fatal_proc_rec ( & format ! ( "Not found test at line{} {:?}" ,
1957- if v. len( ) > 1 { "s" } else { "" } , v) ,
1958- & res) ;
1983+ self . fatal_proc_rec ( & format ! ( "No test has been found... {:?}" , files) , & res) ;
1984+ } else {
1985+ for ( entry, v) in & files {
1986+ if v. len ( ) != 0 {
1987+ self . fatal_proc_rec ( & format ! ( "Not found test at line{} \" {}\" :{:?}" ,
1988+ if v. len( ) > 1 { "s" } else { "" } , entry, v) ,
1989+ & res) ;
1990+ }
1991+ }
19591992 }
19601993 }
19611994
0 commit comments