From aad77ff1e2801fd95ff30127dab7561048af6860 Mon Sep 17 00:00:00 2001 From: Alexandre Courbot Date: Tue, 20 Sep 2022 14:46:12 +0900 Subject: [PATCH] serde_keyvalue: add a few tests Add tests for a unit type and an untagged enum. TEST=cargo test -p serde_keyvalue Change-Id: Ifb840e3270624ef0e54d69b7eba2e631ffcac4e5 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3906752 Reviewed-by: Daniel Verkamp Commit-Queue: Alexandre Courbot --- serde_keyvalue/src/key_values.rs | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/serde_keyvalue/src/key_values.rs b/serde_keyvalue/src/key_values.rs index 78b7189097..b75e4c96fb 100644 --- a/serde_keyvalue/src/key_values.rs +++ b/serde_keyvalue/src/key_values.rs @@ -922,6 +922,16 @@ mod tests { assert_eq!(res.m, r#"Escaped slash\\"#.to_string()); } + #[test] + fn deserialize_unit() { + from_key_values::>("m").unwrap(); + from_key_values::>("m=").unwrap(); + + from_key_values::>("").unwrap_err(); + from_key_values::>("p").unwrap_err(); + from_key_values::>("m=10").unwrap_err(); + } + #[test] fn deserialize_bool() { let res = from_key_values::>("m=true").unwrap(); @@ -1108,6 +1118,35 @@ mod tests { ); } + #[test] + fn deserialize_untagged_enum() { + #[derive(Deserialize, PartialEq, Debug)] + #[serde(untagged)] + enum TestEnum { + FirstVariant { first: u32 }, + SecondVariant { second: bool }, + } + + #[derive(Deserialize, PartialEq, Debug)] + struct TestStruct { + #[serde(flatten)] + variant: TestEnum, + } + + let res: TestStruct = from_key_values("first=10").unwrap(); + assert_eq!(res.variant, TestEnum::FirstVariant { first: 10 }); + + let res: TestStruct = from_key_values("second=false").unwrap(); + assert_eq!(res.variant, TestEnum::SecondVariant { second: false },); + + let res: TestStruct = from_key_values("second").unwrap(); + assert_eq!(res.variant, TestEnum::SecondVariant { second: true },); + + from_key_values::("third=10").unwrap_err(); + from_key_values::("first=some_string").unwrap_err(); + from_key_values::("second=10").unwrap_err(); + } + #[test] fn deserialize_first_arg_string() { #[derive(Deserialize, PartialEq, Debug)]