@@ -3,7 +3,79 @@ use rustell::encode;
33use rustell:: * ;
44
55#[ test]
6- fn test_parser ( ) {
6+ fn mod_declaration ( ) {
7+ let lhs = "mod hello;" ;
8+ let rhs = vec ! [ Expr :: Mod ( "hello" ) ] ;
9+ assert_eq ! ( decode( lhs) , rhs) ;
10+ assert_eq ! ( decode( & sloppy( lhs) ) , rhs) ;
11+ assert_eq ! ( decode( & encode( & rhs) ) , rhs)
12+ }
13+
14+ #[ test]
15+ fn mod_then_use_statement ( ) {
16+ let lhs = "mod hello; use std::io;" ;
17+ let rhs = vec ! [
18+ Expr :: Mod ( "hello" ) ,
19+ Expr :: Raw ( " " ) ,
20+ Expr :: Use ( ExprUse :: Item {
21+ module: "std" ,
22+ rename: None ,
23+ nested: Some ( Box :: new( ExprUse :: Item {
24+ module: "io" ,
25+ rename: None ,
26+ nested: None ,
27+ } ) ) ,
28+ } ) ,
29+ ] ;
30+ assert_eq ! ( decode( lhs) , rhs) ;
31+ assert_eq ! ( decode( & sloppy( lhs) ) , rhs) ;
32+ assert_eq ! ( decode( & encode( & rhs) ) , rhs)
33+ }
34+
35+ #[ test]
36+ fn raw_code_then_mod ( ) {
37+ let lhs = r#"
38+ fn test() {
39+ println!("Hello")
40+ }
41+ mod hello;"# ;
42+ let rhs = vec ! [
43+ Expr :: Raw (
44+ r#"
45+ fn test() {
46+ println!("Hello")
47+ }
48+ "# ,
49+ ) ,
50+ Expr :: Mod ( "hello" ) ,
51+ ] ;
52+ assert_eq ! ( decode( lhs) , rhs) ;
53+ assert_eq ! ( decode( & sloppy( lhs) ) , rhs) ;
54+ assert_eq ! ( decode( & encode( & rhs) ) , rhs)
55+ }
56+
57+ #[ test]
58+ fn mod_then_raw_code ( ) {
59+ let lhs = "mod hello;
60+ fn test() {
61+ println!(\" Hello\" )
62+ }" ;
63+ let rhs = vec ! [
64+ Expr :: Mod ( "hello" ) ,
65+ Expr :: Raw (
66+ "
67+ fn test() {
68+ println!(\" Hello\" )
69+ }" ,
70+ ) ,
71+ ] ;
72+ assert_eq ! ( decode( lhs) , rhs) ;
73+ assert_eq ! ( decode( & sloppy( lhs) ) , rhs) ;
74+ assert_eq ! ( decode( & encode( & rhs) ) , rhs)
75+ }
76+
77+ #[ test]
78+ fn simple_use_statement ( ) {
779 let lhs = "use std::io::Read;" ;
880 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
981 module: "std" ,
@@ -24,7 +96,7 @@ fn test_parser() {
2496}
2597
2698#[ test]
27- fn test_parser_many ( ) {
99+ fn multiple_use_items ( ) {
28100 let lhs = "use std::{io::Read, fs::File};" ;
29101 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
30102 module: "std" ,
@@ -56,7 +128,7 @@ fn test_parser_many() {
56128}
57129
58130#[ test]
59- fn test_parser_glob ( ) {
131+ fn use_glob_pattern ( ) {
60132 let lhs = "use std::io::*;" ;
61133 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
62134 module: "std" ,
@@ -73,7 +145,7 @@ fn test_parser_glob() {
73145}
74146
75147#[ test]
76- fn test_parser_rename ( ) {
148+ fn use_with_rename ( ) {
77149 let lhs = "use std::io::Read as Readable;" ;
78150 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
79151 module: "std" ,
@@ -94,7 +166,7 @@ fn test_parser_rename() {
94166}
95167
96168#[ test]
97- fn test_parser_complex ( ) {
169+ fn complex_use_statement ( ) {
98170 let lhs = "use std::{io::Read as Readable, fs::*};" ;
99171 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
100172 module: "std" ,
@@ -122,7 +194,7 @@ fn test_parser_complex() {
122194}
123195
124196#[ test]
125- fn test_parser_crate ( ) {
197+ fn use_crate_path ( ) {
126198 let lhs = "use crate::module::Type;" ;
127199 let rhs = vec ! [ Expr :: Use ( ExprUse :: Item {
128200 module: "crate" ,
@@ -143,7 +215,7 @@ fn test_parser_crate() {
143215}
144216
145217#[ test]
146- fn test_parser_raw_then_use ( ) {
218+ fn raw_code_then_use ( ) {
147219 let lhs = r#"
148220 fn test() {
149221 println!("Hello")
@@ -177,7 +249,7 @@ fn test_parser_raw_then_use() {
177249}
178250
179251#[ test]
180- fn test_parser_multiple ( ) {
252+ fn multiple_separate_uses ( ) {
181253 let lhs = r#"
182254 use std::io;
183255 use std::fs;
@@ -211,7 +283,7 @@ fn test_parser_multiple() {
211283}
212284
213285#[ test]
214- fn test_parser_multiple_with_raw ( ) {
286+ fn multiple_uses_with_raw_code ( ) {
215287 let lhs = r#"
216288 use std::io;
217289 fn test() {
@@ -254,7 +326,7 @@ fn test_parser_multiple_with_raw() {
254326}
255327
256328#[ test]
257- fn test_parser_mixed_all_cases ( ) {
329+ fn mixed_use_and_raw_cases ( ) {
258330 let lhs = r#"
259331 use std::{
260332 io::{self, Read as R},
@@ -326,11 +398,36 @@ fn test_parser_mixed_all_cases() {
326398}
327399
328400#[ test]
329- fn test_rountrip_lib ( ) {
330- let src =
331- std:: fs:: read_to_string ( "./src/lib.rs" ) . unwrap ( ) ;
332- let ast = decode ( & src) ;
333- assert_eq ! ( decode( & encode( & ast) ) , ast) ;
401+ fn roundtrip_source_files ( ) {
402+ get_rust_files ( "./" ) . into_iter ( ) . for_each ( |path| {
403+ let lhs = std:: fs:: read_to_string ( & path) . unwrap ( ) ;
404+ let rhs = decode ( & lhs) ;
405+ assert_eq ! (
406+ decode( & encode( & rhs) ) ,
407+ rhs,
408+ "Roundtrip failed for the file: {}" ,
409+ path
410+ ) ;
411+ } ) ;
412+ }
413+
414+ fn get_rust_files ( dir : & str ) -> Vec < String > {
415+ std:: fs:: read_dir ( dir)
416+ . unwrap ( )
417+ . flat_map ( |item| {
418+ let path = item. unwrap ( ) . path ( ) ;
419+ let name = path. to_str ( ) . unwrap ( ) ;
420+ if path. is_dir ( ) {
421+ get_rust_files ( name)
422+ } else if path. is_file ( )
423+ && name. ends_with ( ".rs" )
424+ {
425+ vec ! [ name. to_string( ) ]
426+ } else {
427+ vec ! [ ]
428+ }
429+ } )
430+ . collect ( )
334431}
335432
336433fn sloppy ( src : & str ) -> String {
0 commit comments