From 34936be574649459218a92ebd412fc91ec7adac1 Mon Sep 17 00:00:00 2001 From: Alexis Beingessner Date: Mon, 4 Dec 2017 12:42:43 -0500 Subject: [PATCH] test deserialize_from --- serde_test/Cargo.toml | 2 +- serde_test/src/assert.rs | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/serde_test/Cargo.toml b/serde_test/Cargo.toml index 63de886c..55461bed 100644 --- a/serde_test/Cargo.toml +++ b/serde_test/Cargo.toml @@ -16,7 +16,7 @@ serde = { version = "1.0.16", path = "../serde" } [dev-dependencies] 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] travis-ci = { repository = "serde-rs/serde" } diff --git a/serde_test/src/assert.rs b/serde_test/src/assert.rs index 72116b71..903a5616 100644 --- a/serde_test/src/assert.rs +++ b/serde_test/src/assert.rs @@ -184,11 +184,27 @@ where T: Deserialize<'de> + PartialEq + Debug, { let mut de = Deserializer::new(tokens); - match T::deserialize(&mut de) { - Ok(v) => assert_eq!(v, *value), + let mut deserialized_val = match T::deserialize(&mut de) { + Ok(v) => { + assert_eq!(v, *value); + v + } 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 { panic!("{} remaining tokens", de.remaining()); }