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 <dverkamp@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
This commit is contained in:
Alexandre Courbot 2022-09-20 14:46:12 +09:00 committed by crosvm LUCI
parent 90063081cb
commit aad77ff1e2

View file

@ -922,6 +922,16 @@ mod tests {
assert_eq!(res.m, r#"Escaped slash\\"#.to_string());
}
#[test]
fn deserialize_unit() {
from_key_values::<SingleStruct<()>>("m").unwrap();
from_key_values::<SingleStruct<()>>("m=").unwrap();
from_key_values::<SingleStruct<()>>("").unwrap_err();
from_key_values::<SingleStruct<()>>("p").unwrap_err();
from_key_values::<SingleStruct<()>>("m=10").unwrap_err();
}
#[test]
fn deserialize_bool() {
let res = from_key_values::<SingleStruct<bool>>("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::<TestStruct>("third=10").unwrap_err();
from_key_values::<TestStruct>("first=some_string").unwrap_err();
from_key_values::<TestStruct>("second=10").unwrap_err();
}
#[test]
fn deserialize_first_arg_string() {
#[derive(Deserialize, PartialEq, Debug)]