mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 14:21:01 +00:00
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
This commit is contained in:
+21
-14
@@ -16,21 +16,28 @@ macro_rules! assert_next_token {
|
|||||||
($de:expr, $expected:expr) => {
|
($de:expr, $expected:expr) => {
|
||||||
match $de.next_token_opt() {
|
match $de.next_token_opt() {
|
||||||
Some(token) if token == $expected => {}
|
Some(token) if token == $expected => {}
|
||||||
Some(other) => panic!(
|
Some(other) => {
|
||||||
"expected Token::{} but deserialization wants Token::{}",
|
return Err(de::Error::custom(format!(
|
||||||
other, $expected
|
"expected Token::{} but deserialization wants Token::{}",
|
||||||
),
|
other, $expected
|
||||||
None => panic!(
|
)))
|
||||||
"end of tokens but deserialization wants Token::{}",
|
}
|
||||||
$expected
|
None => {
|
||||||
),
|
return Err(de::Error::custom(format!(
|
||||||
|
"end of tokens but deserialization wants Token::{}",
|
||||||
|
$expected
|
||||||
|
)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! unexpected {
|
macro_rules! unexpected {
|
||||||
($token:expr) => {
|
($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::StructEnd
|
||||||
| Token::TupleVariantEnd
|
| Token::TupleVariantEnd
|
||||||
| Token::StructVariantEnd => {
|
| Token::StructVariantEnd => {
|
||||||
unexpected!(token);
|
unexpected!(token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -531,7 +538,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
|
|||||||
self.de
|
self.de
|
||||||
.visit_seq(Some(len), Token::TupleVariantEnd, visitor)
|
.visit_seq(Some(len), Token::TupleVariantEnd, visitor)
|
||||||
} else {
|
} else {
|
||||||
unexpected!(token);
|
unexpected!(token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Token::Seq {
|
Token::Seq {
|
||||||
@@ -542,7 +549,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
|
|||||||
if len == enum_len {
|
if len == enum_len {
|
||||||
self.de.visit_seq(Some(len), Token::SeqEnd, visitor)
|
self.de.visit_seq(Some(len), Token::SeqEnd, visitor)
|
||||||
} else {
|
} else {
|
||||||
unexpected!(token);
|
unexpected!(token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => de::Deserializer::deserialize_any(self.de, visitor),
|
_ => de::Deserializer::deserialize_any(self.de, visitor),
|
||||||
@@ -565,7 +572,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
|
|||||||
self.de
|
self.de
|
||||||
.visit_map(Some(fields.len()), Token::StructVariantEnd, visitor)
|
.visit_map(Some(fields.len()), Token::StructVariantEnd, visitor)
|
||||||
} else {
|
} else {
|
||||||
unexpected!(token);
|
unexpected!(token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Token::Map {
|
Token::Map {
|
||||||
@@ -577,7 +584,7 @@ impl<'de, 'a> VariantAccess<'de> for DeserializerEnumVisitor<'a, 'de> {
|
|||||||
self.de
|
self.de
|
||||||
.visit_map(Some(fields.len()), Token::MapEnd, visitor)
|
.visit_map(Some(fields.len()), Token::MapEnd, visitor)
|
||||||
} else {
|
} else {
|
||||||
unexpected!(token);
|
unexpected!(token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => de::Deserializer::deserialize_any(self.de, visitor),
|
_ => de::Deserializer::deserialize_any(self.de, visitor),
|
||||||
|
|||||||
@@ -63,14 +63,12 @@ macro_rules! assert_next_token {
|
|||||||
($ser:expr, $actual:expr, $pat:pat, $guard:expr) => {
|
($ser:expr, $actual:expr, $pat:pat, $guard:expr) => {
|
||||||
match $ser.next_token() {
|
match $ser.next_token() {
|
||||||
Some($pat) if $guard => {}
|
Some($pat) if $guard => {}
|
||||||
Some(expected) => {
|
Some(expected) => return Err(ser::Error::custom(
|
||||||
panic!("expected Token::{} but serialized as {}",
|
format!("expected Token::{} but serialized as {}", expected, $actual)
|
||||||
expected, $actual);
|
)),
|
||||||
}
|
None => return Err(ser::Error::custom(
|
||||||
None => {
|
format!("expected end of tokens, but {} was serialized", $actual)
|
||||||
panic!("expected end of tokens, but {} was serialized",
|
)),
|
||||||
$actual);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user