File tree Expand file tree Collapse file tree 1 file changed +24
-0
lines changed
Expand file tree Collapse file tree 1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -91,7 +91,31 @@ fn populate(
9191pub fn parse_junit_xml ( file_bytes : & [ u8 ] ) -> PyResult < ParsingInfo > {
9292 let mut reader = Reader :: from_reader ( file_bytes) ;
9393 reader. config_mut ( ) . trim_text ( true ) ;
94+ let thing = use_reader ( & mut reader) . map_err ( |e| {
95+ let pos = reader. buffer_position ( ) ;
96+ let ( line, col) = get_position_info ( file_bytes, pos. try_into ( ) . unwrap ( ) ) ;
97+ ParserError :: new_err ( format ! ( "Error at {}:{}: {}" , line, col, e) )
98+ } ) ?;
99+ Ok ( thing)
100+ }
101+
102+ fn get_position_info ( input : & [ u8 ] , byte_offset : usize ) -> ( usize , usize ) {
103+ let mut line = 1 ;
104+ let mut last_newline = 0 ;
105+
106+ for ( i, & byte) in input. iter ( ) . take ( byte_offset) . enumerate ( ) {
107+ if byte == b'\n' {
108+ line += 1 ;
109+ last_newline = i + 1 ;
110+ }
111+ }
112+
113+ let column = byte_offset - last_newline + 1 ;
114+
115+ ( line, column)
116+ }
94117
118+ fn use_reader ( reader : & mut Reader < & [ u8 ] > ) -> PyResult < ParsingInfo > {
95119 let mut testruns: Vec < Testrun > = Vec :: new ( ) ;
96120 let mut saved_testrun: Option < Testrun > = None ;
97121
You can’t perform that action at this time.
0 commit comments