@@ -9,6 +9,7 @@ use winnow::combinator::opt;
9
9
use winnow:: combinator:: repeat;
10
10
use winnow:: combinator:: seq;
11
11
use winnow:: error:: ContextError ;
12
+ use winnow:: error:: ParseError ;
12
13
use winnow:: error:: StrContext ;
13
14
use winnow:: error:: StrContextValue ;
14
15
use winnow:: prelude:: * ;
@@ -17,9 +18,8 @@ use winnow::token::take_while;
17
18
18
19
use crate :: path:: Expression ;
19
20
20
- pub ( crate ) fn from_str ( mut input : & str ) -> Result < Expression , ContextError > {
21
- let input = & mut input;
22
- path. parse ( input) . map_err ( |e| e. into_inner ( ) )
21
+ pub ( crate ) fn from_str ( input : & str ) -> Result < Expression , ParseError < & str , ContextError > > {
22
+ path. parse ( input)
23
23
}
24
24
25
25
fn path ( i : & mut & str ) -> PResult < Expression > {
@@ -93,6 +93,8 @@ fn integer(i: &mut &str) -> PResult<isize> {
93
93
94
94
#[ cfg( test) ]
95
95
mod test {
96
+ use snapbox:: { assert_data_eq, str} ;
97
+
96
98
use super :: Expression :: * ;
97
99
use super :: * ;
98
100
@@ -143,36 +145,70 @@ mod test {
143
145
#[ test]
144
146
fn test_invalid_identifier ( ) {
145
147
let err = from_str ( "!" ) . unwrap_err ( ) ;
146
- assert_eq ! (
147
- "invalid identifier\n expected ASCII alphanumeric, `_`, `-`" ,
148
- err. to_string( )
148
+ assert_data_eq ! (
149
+ err. to_string( ) ,
150
+ str ![ [ r#"
151
+ !
152
+ ^
153
+ invalid identifier
154
+ expected ASCII alphanumeric, `_`, `-`
155
+ "# ] ]
149
156
) ;
150
157
}
151
158
152
159
#[ test]
153
160
fn test_invalid_child ( ) {
154
161
let err = from_str ( "a.." ) . unwrap_err ( ) ;
155
- assert_eq ! (
156
- "invalid identifier\n expected ASCII alphanumeric, `_`, `-`" ,
157
- err. to_string( )
162
+ assert_data_eq ! (
163
+ err. to_string( ) ,
164
+ str ![ [ r#"
165
+ a..
166
+ ^
167
+ invalid identifier
168
+ expected ASCII alphanumeric, `_`, `-`
169
+ "# ] ]
158
170
) ;
159
171
}
160
172
161
173
#[ test]
162
174
fn test_invalid_subscript ( ) {
163
175
let err = from_str ( "a[b]" ) . unwrap_err ( ) ;
164
- assert_eq ! ( "invalid subscript\n expected integer" , err. to_string( ) ) ;
176
+ assert_data_eq ! (
177
+ err. to_string( ) ,
178
+ str ![ [ r#"
179
+ a[b]
180
+ ^
181
+ invalid subscript
182
+ expected integer
183
+ "# ] ]
184
+ ) ;
165
185
}
166
186
167
187
#[ test]
168
188
fn test_incomplete_subscript ( ) {
169
189
let err = from_str ( "a[0" ) . unwrap_err ( ) ;
170
- assert_eq ! ( "invalid subscript\n expected `]`" , err. to_string( ) ) ;
190
+ assert_data_eq ! (
191
+ err. to_string( ) ,
192
+ str ![ [ r#"
193
+ a[0
194
+ ^
195
+ invalid subscript
196
+ expected `]`
197
+ "# ] ]
198
+ ) ;
171
199
}
172
200
173
201
#[ test]
174
202
fn test_invalid_postfix ( ) {
175
203
let err = from_str ( "a!b" ) . unwrap_err ( ) ;
176
- assert_eq ! ( "invalid postfix\n expected `[`, `.`" , err. to_string( ) ) ;
204
+ assert_data_eq ! (
205
+ err. to_string( ) ,
206
+ str ![ [ r#"
207
+ a!b
208
+ ^
209
+ invalid postfix
210
+ expected `[`, `.`
211
+ "# ] ]
212
+ ) ;
177
213
}
178
214
}
0 commit comments