@@ -20,35 +20,49 @@ mod tests {
2020
2121 use super :: * ;
2222
23+ struct Tester {
24+ input : String ,
25+ parse : Parse ,
26+ }
27+
28+ impl From < & str > for Tester {
29+ fn from ( input : & str ) -> Self {
30+ Tester {
31+ parse : split ( input) ,
32+ input : input. to_string ( ) ,
33+ }
34+ }
35+ }
36+
37+ impl Tester {
38+ fn expect_statements ( & self , expected : Vec < & str > ) {
39+ assert_eq ! ( self . parse. ranges. len( ) , expected. len( ) ) ;
40+
41+ for ( range, expected) in self . parse . ranges . iter ( ) . zip ( expected. iter ( ) ) {
42+ assert_eq ! ( * expected, self . input[ * range] . to_string( ) ) ;
43+ }
44+ }
45+ }
46+
2347 #[ test]
2448 #[ timeout( 1000 ) ]
2549 fn basic ( ) {
26- let input = "select 1 from contact; select 1;" ;
27-
28- let res = split ( input) ;
29- assert_eq ! ( res. ranges. len( ) , 2 ) ;
30- assert_eq ! ( "select 1 from contact;" , input[ res. ranges[ 0 ] ] . to_string( ) ) ;
31- assert_eq ! ( "select 1;" , input[ res. ranges[ 1 ] ] . to_string( ) ) ;
50+ Tester :: from ( "select 1 from contact; select 1;" )
51+ . expect_statements ( vec ! [ "select 1 from contact;" , "select 1;" ] ) ;
3252 }
3353
3454 #[ test]
3555 fn no_semicolons ( ) {
36- let input = "select 1 from contact\n select 1" ;
37-
38- let res = split ( input) ;
39- assert_eq ! ( res. ranges. len( ) , 2 ) ;
40- assert_eq ! ( "select 1 from contact" , input[ res. ranges[ 0 ] ] . to_string( ) ) ;
41- assert_eq ! ( "select 1" , input[ res. ranges[ 1 ] ] . to_string( ) ) ;
56+ Tester :: from ( "select 1 from contact\n select 1" )
57+ . expect_statements ( vec ! [ "select 1 from contact" , "select 1" ] ) ;
4258 }
4359
4460 #[ test]
4561 fn double_newlines ( ) {
46- let input = "select 1 from contact\n \n select 1\n \n select 3" ;
47-
48- let res = split ( input) ;
49- assert_eq ! ( res. ranges. len( ) , 3 ) ;
50- assert_eq ! ( "select 1 from contact" , input[ res. ranges[ 0 ] ] . to_string( ) ) ;
51- assert_eq ! ( "select 1" , input[ res. ranges[ 1 ] ] . to_string( ) ) ;
52- assert_eq ! ( "select 3" , input[ res. ranges[ 2 ] ] . to_string( ) ) ;
62+ Tester :: from ( "select 1 from contact\n \n select 1\n \n select 3" ) . expect_statements ( vec ! [
63+ "select 1 from contact" ,
64+ "select 1" ,
65+ "select 3" ,
66+ ] ) ;
5367 }
5468}
0 commit comments