@@ -30,6 +30,7 @@ use std::io::{self, BufReader};
30
30
use std:: path:: { Path , PathBuf } ;
31
31
use std:: process:: { Command , Output , ExitStatus } ;
32
32
use std:: str;
33
+ use std:: collections:: HashMap ;
33
34
34
35
use extract_gdb_version;
35
36
@@ -1902,17 +1903,28 @@ actual:\n\
1902
1903
}
1903
1904
}
1904
1905
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)
1907
1909
. expect ( "markdown_test_output_check_entry File::open failed" ) ;
1908
1910
let mut content = String :: new ( ) ;
1909
1911
file. read_to_string ( & mut content)
1910
1912
. expect ( "markdown_test_output_check_entry read_to_string failed" ) ;
1911
1913
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 {
1916
1928
let sline = line. split ( "///" ) . last ( ) . unwrap_or ( "" ) ;
1917
1929
let line = sline. trim_left ( ) ;
1918
1930
if line. starts_with ( "```" ) {
@@ -1926,36 +1938,58 @@ actual:\n\
1926
1938
} else {
1927
1939
None
1928
1940
}
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
+ }
1931
1956
1932
1957
let mut tested = 0 ;
1933
1958
for _ in res. stdout . split ( "\n " )
1934
1959
. filter ( |s| s. starts_with ( "test " ) )
1935
1960
. inspect ( |s| {
1936
1961
let tmp: Vec < & str > = s. split ( " - line " ) . collect ( ) ;
1937
1962
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
+ println ! ( "{:?}" , path) ;
1965
+ if let Some ( ref mut v) = files. get_mut ( path) {
1966
+ tested += 1 ;
1967
+ let line = tmp[ 1 ] . split ( " ..." )
1968
+ . next ( )
1969
+ . unwrap_or ( "0" )
1970
+ . parse ( )
1971
+ . unwrap_or ( 0 ) ;
1972
+ if let Ok ( pos) = v. binary_search ( & line) {
1973
+ v. remove ( pos) ;
1974
+ } else {
1975
+ self . fatal_proc_rec (
1976
+ & format ! ( "Not found doc test: \" {}\" in \" {}\" :{:?}" ,
1977
+ s, path, v) ,
1978
+ & res) ;
1979
+ }
1950
1980
}
1951
1981
}
1952
1982
} ) { }
1953
1983
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) ;
1984
+ self . fatal_proc_rec ( & format ! ( "No test has been found... {:?}" , files) , & res) ;
1985
+ } else {
1986
+ for ( entry, v) in & files {
1987
+ if v. len ( ) != 0 {
1988
+ self . fatal_proc_rec ( & format ! ( "Not found test at line{} \" {}\" :{:?}" ,
1989
+ if v. len( ) > 1 { "s" } else { "" } , entry, v) ,
1990
+ & res) ;
1991
+ }
1992
+ }
1959
1993
}
1960
1994
}
1961
1995
0 commit comments