@@ -204,54 +204,54 @@ impl FormatStrParser {
204
204
#[ cfg( test) ]
205
205
mod tests {
206
206
use super :: * ;
207
+ use expect_test:: { expect, Expect } ;
208
+
209
+ fn check ( input : & str , expect : & Expect ) {
210
+ let mut parser = FormatStrParser :: new ( ( * input) . to_owned ( ) ) ;
211
+ let outcome_repr = if parser. parse ( ) . is_ok ( ) {
212
+ // Parsing should be OK, expected repr is "string; expr_1, expr_2".
213
+ if parser. extracted_expressions . is_empty ( ) {
214
+ parser. output
215
+ } else {
216
+ format ! ( "{}; {}" , parser. output, parser. extracted_expressions. join( ", " ) )
217
+ }
218
+ } else {
219
+ // Parsing should fail, expected repr is "-".
220
+ "-" . to_owned ( )
221
+ } ;
222
+
223
+ expect. assert_eq ( & outcome_repr) ;
224
+ }
207
225
208
226
#[ test]
209
227
fn format_str_parser ( ) {
210
228
let test_vector = & [
211
- ( "no expressions" , Some ( ( "no expressions" , vec ! [ ] ) ) ) ,
212
- ( "{expr} is {2 + 2}" , Some ( ( "{} is {}" , vec ! [ " expr" , " 2 + 2"] ) ) ) ,
213
- ( "{expr:?}" , Some ( ( "{:?}" , vec ! [ " expr"] ) ) ) ,
214
- ( "{malformed" , None ) ,
215
- ( "malformed}" , None ) ,
216
- ( "{{correct" , Some ( ( "{{correct" , vec ! [ ] ) ) ) ,
217
- ( "correct}}" , Some ( ( "correct}}" , vec ! [ ] ) ) ) ,
218
- ( "{correct}}}" , Some ( ( "{}}}" , vec ! [ " correct"] ) ) ) ,
219
- ( "{correct}}}}}" , Some ( ( "{}}}}}" , vec ! [ " correct"] ) ) ) ,
220
- ( "{incorrect}}" , None ) ,
221
- ( "placeholders {} {}" , Some ( ( "placeholders {} {}" , vec ! [ "$1" , " $2"] ) ) ) ,
222
- ( "mixed {} {2 + 2} {}" , Some ( ( "mixed {} {} {}" , vec ! [ "$1" , " 2 + 2" , " $2"] ) ) ) ,
229
+ ( "no expressions" , expect ! [ [ "no expressions" ] ] ) ,
230
+ ( "{expr} is {2 + 2}" , expect ! [ [ "{} is {}; expr, 2 + 2" ] ] ) ,
231
+ ( "{expr:?}" , expect ! [ [ "{:?}; expr" ] ] ) ,
232
+ ( "{malformed" , expect ! [ [ "-" ] ] ) ,
233
+ ( "malformed}" , expect ! [ [ "-" ] ] ) ,
234
+ ( "{{correct" , expect ! [ [ "{{correct" ] ] ) ,
235
+ ( "correct}}" , expect ! [ [ "correct}}" ] ] ) ,
236
+ ( "{correct}}}" , expect ! [ [ "{}}}; correct" ] ] ) ,
237
+ ( "{correct}}}}}" , expect ! [ [ "{}}}}}; correct" ] ] ) ,
238
+ ( "{incorrect}}" , expect ! [ [ "-" ] ] ) ,
239
+ ( "placeholders {} {}" , expect ! [ [ "placeholders {} {}; $1, $2" ] ] ) ,
240
+ ( "mixed {} {2 + 2} {}" , expect ! [ [ "mixed {} {} {}; $1, 2 + 2, $2" ] ] ) ,
223
241
(
224
242
"{SomeStruct { val_a: 0, val_b: 1 }}" ,
225
- Some ( ( "{}" , vec ! [ " SomeStruct { val_a: 0, val_b: 1 }"] ) ) ,
243
+ expect ! [ [ "{}; SomeStruct { val_a: 0, val_b: 1 }" ] ] ,
226
244
) ,
227
- ( "{expr:?} is {2.32f64:.5}" , Some ( ( "{:?} is {:.5}" , vec ! [ " expr" , " 2.32f64"] ) ) ) ,
245
+ ( "{expr:?} is {2.32f64:.5}" , expect ! [ [ "{:?} is {:.5}; expr, 2.32f64" ] ] ) ,
228
246
(
229
247
"{SomeStruct { val_a: 0, val_b: 1 }:?}" ,
230
- Some ( ( "{:?}" , vec ! [ " SomeStruct { val_a: 0, val_b: 1 }"] ) ) ,
248
+ expect ! [ [ "{:?}; SomeStruct { val_a: 0, val_b: 1 }" ] ] ,
231
249
) ,
232
- ( "{ 2 + 2 }" , Some ( ( "{}" , vec ! [ " 2 + 2"] ) ) ) ,
250
+ ( "{ 2 + 2 }" , expect ! [ [ "{}; 2 + 2" ] ] ) ,
233
251
] ;
234
252
235
253
for ( input, output) in test_vector {
236
- let mut parser = FormatStrParser :: new ( ( * input) . to_owned ( ) ) ;
237
- let outcome = parser. parse ( ) ;
238
-
239
- if let Some ( ( result_str, result_args) ) = output {
240
- assert ! (
241
- outcome. is_ok( ) ,
242
- "Outcome is error for input: {}, but the expected outcome is {:?}" ,
243
- input,
244
- output
245
- ) ;
246
- assert_eq ! ( parser. output, * result_str) ;
247
- assert_eq ! ( & parser. extracted_expressions, result_args) ;
248
- } else {
249
- assert ! (
250
- outcome. is_err( ) ,
251
- "Outcome is OK for input: {}, but the expected outcome is error" ,
252
- input
253
- ) ;
254
- }
254
+ check ( input, output)
255
255
}
256
256
}
257
257
0 commit comments