Skip to content

Commit 97f2905

Browse files
committed
Use expect_test to make format_str_parser test more data-driven
1 parent 76d0546 commit 97f2905

File tree

1 file changed

+35
-35
lines changed

1 file changed

+35
-35
lines changed

crates/ide/src/completion/complete_postfix/format_like.rs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -204,54 +204,54 @@ impl FormatStrParser {
204204
#[cfg(test)]
205205
mod tests {
206206
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+
}
207225

208226
#[test]
209227
fn format_str_parser() {
210228
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"]]),
223241
(
224242
"{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 }"]],
226244
),
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"]]),
228246
(
229247
"{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 }"]],
231249
),
232-
("{ 2 + 2 }", Some(("{}", vec!["2 + 2"]))),
250+
("{ 2 + 2 }", expect![["{}; 2 + 2"]]),
233251
];
234252

235253
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)
255255
}
256256
}
257257

0 commit comments

Comments
 (0)