From ac8ea72d881939e680069a7393e577b7c9f10dda Mon Sep 17 00:00:00 2001 From: Mingun Date: Sun, 30 Apr 2023 00:06:00 +0500 Subject: [PATCH] Don't panic in serde_test Panics lead to reporting errors in tests inside of serde_test internals, returning errors moves the report location to the corresponding assert_tokens expression --- serde_test/src/de.rs | 35 +++++++++++++++++++++-------------- serde_test/src/ser.rs | 14 ++++++-------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/serde_test/src/de.rs b/serde_test/src/de.rs index 673a0c0e..21d0764d 100644 --- a/serde_test/src/de.rs +++ b/serde_test/src/de.rs @@ -16,21 +16,28 @@ macro_rules! assert_next_token { ($de:expr, $expected:expr) => { match $de.next_token_opt() { Some(token) if token == $expected => {} - Some(other) => panic!( - "expected Token::{} but deserialization wants Token::{}", - other, $expected - ), - None => panic!( - "end of tokens but deserialization wants Token::{}", - $expected - ), + Some(other) => { + return Err(de::Error::custom(format!( + "expected Token::{} but deserialization wants Token::{}", + other, $expected + ))) + } + None => { + return Err(de::Error::custom(format!( + "end of tokens but deserialization wants Token::{}", + $expected + ))) + } } }; } macro_rules! unexpected { ($token:expr) => { - panic!("deserialization did not expect this token: {}", $token) + Err(de::Error::custom(format!( + "deserialization did not expect this token: {}", + $token + ))) }; } @@ -233,7 +240,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { | Token::StructEnd | Token::TupleVariantEnd | Token::StructVariantEnd => { - unexpected!(token); + unexpected!(token) } } } @@ -531,7 +538,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> { self.de .visit_seq(Some(len), Token::TupleVariantEnd, visitor) } else { - unexpected!(token); + unexpected!(token) } } Token::Seq { @@ -542,7 +549,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> { if len == enum_len { self.de.visit_seq(Some(len), Token::SeqEnd, visitor) } else { - unexpected!(token); + unexpected!(token) } } _ => de::Deserializer::deserialize_any(self.de, visitor), @@ -565,7 +572,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> { self.de .visit_map(Some(fields.len()), Token::StructVariantEnd, visitor) } else { - unexpected!(token); + unexpected!(token) } } Token::Map { @@ -577,7 +584,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> { self.de .visit_map(Some(fields.len()), Token::MapEnd, visitor) } else { - unexpected!(token); + unexpected!(token) } } _ => de::Deserializer::deserialize_any(self.de, visitor), diff --git a/serde_test/src/ser.rs b/serde_test/src/ser.rs index 0827e793..7c07ae67 100644 --- a/serde_test/src/ser.rs +++ b/serde_test/src/ser.rs @@ -63,14 +63,12 @@ macro_rules! assert_next_token { ($ser:expr, $actual:expr, $pat:pat, $guard:expr) => { match $ser.next_token() { Some($pat) if $guard => {} - Some(expected) => { - panic!("expected Token::{} but serialized as {}", - expected, $actual); - } - None => { - panic!("expected end of tokens, but {} was serialized", - $actual); - } + Some(expected) => return Err(ser::Error::custom( + format!("expected Token::{} but serialized as {}", expected, $actual) + )), + None => return Err(ser::Error::custom( + format!("expected end of tokens, but {} was serialized", $actual) + )), } }; }