@@ -5,12 +5,39 @@ pub use crate::unparser::Unparser;
55#[ cfg( test) ]
66mod tests {
77 use super :: * ;
8+ use rustpython_ast:: text_size:: TextRange ;
9+ use rustpython_ast:: Fold ;
10+
11+ use rustpython_ast:: TextSize ;
812 use rustpython_parser:: ast:: Suite ;
913 use rustpython_parser:: Parse ;
1014
1115 use std:: fs;
1216 use std:: io;
1317 use std:: path:: Path ;
18+
19+ struct RangesEraser { }
20+
21+ impl Fold < TextRange > for RangesEraser {
22+ type TargetU = TextRange ;
23+
24+ type Error = std:: convert:: Infallible ;
25+
26+ type UserContext = TextRange ;
27+
28+ fn will_map_user ( & mut self , _user : & TextRange ) -> Self :: UserContext {
29+ TextRange :: new ( TextSize :: new ( 0 ) , TextSize :: new ( 0 ) )
30+ }
31+
32+ fn map_user (
33+ & mut self ,
34+ _user : TextRange ,
35+ start : Self :: UserContext ,
36+ ) -> Result < Self :: TargetU , Self :: Error > {
37+ Ok ( start)
38+ }
39+ }
40+
1441 #[ test]
1542 fn test_predefined_files ( ) -> io:: Result < ( ) > {
1643 for entry in fs:: read_dir ( "./test_files" ) ? {
@@ -34,7 +61,19 @@ mod tests {
3461 fs:: write ( & new_entry_path, & new_source) ?;
3562 let new_stmts =
3663 Suite :: parse ( & new_source, new_entry_path. to_str ( ) . unwrap ( ) ) . unwrap ( ) ;
37- for ( stmt, new_stmt) in stmts. iter ( ) . zip ( new_stmts. iter ( ) ) {
64+ // erase range information
65+ let mut eraser = RangesEraser { } ;
66+ let mut erased_new_stmts = Vec :: new ( ) ;
67+ for stmt in & new_stmts {
68+ erased_new_stmts. push ( eraser. fold_stmt ( stmt. to_owned ( ) ) . unwrap ( ) ) ;
69+ }
70+
71+ let mut erased_stmts = Vec :: new ( ) ;
72+ for stmt in & stmts {
73+ erased_stmts. push ( eraser. fold_stmt ( stmt. to_owned ( ) ) . unwrap ( ) ) ;
74+ }
75+
76+ for ( stmt, new_stmt) in erased_stmts. iter ( ) . zip ( erased_new_stmts. iter ( ) ) {
3877 assert_eq ! ( stmt, new_stmt)
3978 }
4079 }
0 commit comments