feat: Add more support for patterns and conditional match
This commit is contained in:
51
tests/cmd.rs
51
tests/cmd.rs
@@ -62,6 +62,31 @@ fn for_in(#[case] single_iter: &[&str], #[case] multi_iter: &[&str], #[case] exp
|
||||
assert_eq!(format!("{command:?}"), expected.to_string());
|
||||
}
|
||||
|
||||
struct TestStruct(&'static str);
|
||||
|
||||
#[rstest]
|
||||
#[case(&[], &[], r#""echo" "test""#)]
|
||||
#[case(&[TestStruct("1"), TestStruct("2")], &[], r#""echo" "test" "1" "2""#)]
|
||||
#[case(&[], &[TestStruct("3"), TestStruct("4")], r#""echo" "test" "multi" "3" "multi" "4""#)]
|
||||
#[case(&[TestStruct("1"), TestStruct("2")], &[TestStruct("3"), TestStruct("4")], r#""echo" "test" "1" "2" "multi" "3" "multi" "4""#)]
|
||||
fn for_in_pat(
|
||||
#[case] single_iter: &[TestStruct],
|
||||
#[case] multi_iter: &[TestStruct],
|
||||
#[case] expected: &str,
|
||||
) {
|
||||
let command = cmd!(
|
||||
"echo",
|
||||
"test",
|
||||
for TestStruct(arg) in single_iter => arg,
|
||||
for TestStruct(arg) in multi_iter => [
|
||||
"multi",
|
||||
arg,
|
||||
],
|
||||
);
|
||||
|
||||
assert_eq!(format!("{command:?}"), expected.to_string());
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(None, None, r#""echo" "test""#)]
|
||||
#[case(Some("arg"), None, r#""echo" "test" "arg""#)]
|
||||
@@ -105,6 +130,32 @@ fn match_statement(#[case] match_arg: TestArgs, #[case] expected: &str) {
|
||||
assert_eq!(format!("{command:?}"), expected.to_string());
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(TestArgs::Arg1, true, r#""echo" "test" "arg1""#)]
|
||||
#[case(TestArgs::Arg1, false, r#""echo" "test""#)]
|
||||
#[case(TestArgs::Arg2, true, r#""echo" "test" "arg1" "arg2""#)]
|
||||
#[case(TestArgs::Arg2, false, r#""echo" "test""#)]
|
||||
#[case(TestArgs::Arg3, true, r#""echo" "test" "arg1" "arg2" "arg3""#)]
|
||||
#[case(TestArgs::Arg3, false, r#""echo" "test""#)]
|
||||
fn match_statement_conditional(
|
||||
#[case] match_arg: TestArgs,
|
||||
#[case] flag: bool,
|
||||
#[case] expected: &str,
|
||||
) {
|
||||
let command = cmd!(
|
||||
"echo",
|
||||
"test",
|
||||
match match_arg {
|
||||
TestArgs::Arg1 if flag => "arg1",
|
||||
TestArgs::Arg2 if flag => ["arg1", "arg2"],
|
||||
TestArgs::Arg3 if flag => ["arg1", "arg2", "arg3"],
|
||||
_ => [],
|
||||
}
|
||||
);
|
||||
|
||||
assert_eq!(format!("{command:?}"), expected.to_string());
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(None, None, r#""echo" "test""#)]
|
||||
#[case(Some("arg"), None, r#""echo" "test" "arg""#)]
|
||||
|
||||
Reference in New Issue
Block a user