test deserialize_from

This commit is contained in:
Alexis Beingessner 2017-12-04 12:42:43 -05:00
parent e354dd0c7f
commit 34936be574
2 changed files with 19 additions and 3 deletions

View File

@ -16,7 +16,7 @@ serde = { version = "1.0.16", path = "../serde" }
[dev-dependencies] [dev-dependencies]
serde = { version = "1.0.16", path = "../serde", features = ["rc"] } serde = { version = "1.0.16", path = "../serde", features = ["rc"] }
serde_derive = { version = "1.0", path = "../serde_derive" } serde_derive = { version = "1.0", path = "../serde_derive", features = ["deserialize_from"]}
[badges] [badges]
travis-ci = { repository = "serde-rs/serde" } travis-ci = { repository = "serde-rs/serde" }

View File

@ -184,11 +184,27 @@ where
T: Deserialize<'de> + PartialEq + Debug, T: Deserialize<'de> + PartialEq + Debug,
{ {
let mut de = Deserializer::new(tokens); let mut de = Deserializer::new(tokens);
match T::deserialize(&mut de) { let mut deserialized_val = match T::deserialize(&mut de) {
Ok(v) => assert_eq!(v, *value), Ok(v) => {
assert_eq!(v, *value);
v
}
Err(e) => panic!("tokens failed to deserialize: {}", e), Err(e) => panic!("tokens failed to deserialize: {}", e),
};
if de.remaining() > 0 {
panic!("{} remaining tokens", de.remaining());
} }
// Do the same thing for deserialize_from. This isn't *great* because a no-op
// impl of deserialize_from can technically succeed here. Still, this should
// catch a lot of junk.
let mut de = Deserializer::new(tokens);
match deserialized_val.deserialize_from(&mut de) {
Ok(()) => {
assert_eq!(deserialized_val, *value);
}
Err(e) => panic!("tokens failed to deserialize_from: {}", e),
}
if de.remaining() > 0 { if de.remaining() > 0 {
panic!("{} remaining tokens", de.remaining()); panic!("{} remaining tokens", de.remaining());
} }