Skip to content

Commit 0093f74

Browse files
committed
Split test newtype_enum into four tests for each variant
(review this commit with "ignore whitespace changes" option on)
1 parent 171c6da commit 0093f74

File tree

2 files changed

+80
-46
lines changed

2 files changed

+80
-46
lines changed

serde/src/private/de.rs

+16
Original file line numberDiff line numberDiff line change
@@ -2153,6 +2153,10 @@ mod content {
21532153
fn unit_variant(self) -> Result<(), E> {
21542154
match self.value {
21552155
Some(value) => de::Deserialize::deserialize(ContentRefDeserializer::new(value)),
2156+
// Covered by tests/test_annotations.rs
2157+
// test_partially_untagged_adjacently_tagged_enum
2158+
// Covered by tests/test_enum_untagged.rs
2159+
// newtype_enum::unit
21562160
None => Ok(()),
21572161
}
21582162
}
@@ -2162,6 +2166,11 @@ mod content {
21622166
T: de::DeserializeSeed<'de>,
21632167
{
21642168
match self.value {
2169+
// Covered by tests/test_annotations.rs
2170+
// test_partially_untagged_enum_desugared
2171+
// test_partially_untagged_enum_generic
2172+
// Covered by tests/test_enum_untagged.rs
2173+
// newtype_enum::newtype
21652174
Some(value) => seed.deserialize(ContentRefDeserializer::new(value)),
21662175
None => Err(de::Error::invalid_type(
21672176
de::Unexpected::UnitVariant,
@@ -2175,6 +2184,11 @@ mod content {
21752184
V: de::Visitor<'de>,
21762185
{
21772186
match self.value {
2187+
// Covered by tests/test_annotations.rs
2188+
// test_partially_untagged_enum
2189+
// test_partially_untagged_enum_desugared
2190+
// Covered by tests/test_enum_untagged.rs
2191+
// newtype_enum::tuple2
21782192
Some(Content::Seq(v)) => {
21792193
de::Deserializer::deserialize_any(SeqRefDeserializer::new(v), visitor)
21802194
}
@@ -2198,6 +2212,8 @@ mod content {
21982212
V: de::Visitor<'de>,
21992213
{
22002214
match self.value {
2215+
// Covered by tests/test_enum_untagged.rs
2216+
// newtype_enum::struct_from_map
22012217
Some(Content::Map(v)) => {
22022218
de::Deserializer::deserialize_any(MapRefDeserializer::new(v), visitor)
22032219
}

test_suite/tests/test_enum_untagged.rs

+64-46
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ fn newtype_struct() {
134134
assert_de_tokens(&value, &[Token::U32(5)]);
135135
}
136136

137-
#[test]
138-
fn newtype_enum() {
137+
mod newtype_enum {
138+
use super::*;
139+
139140
#[derive(Debug, PartialEq, Serialize, Deserialize)]
140141
#[serde(untagged)]
141142
enum Outer {
@@ -146,56 +147,73 @@ fn newtype_enum() {
146147
enum Inner {
147148
Unit,
148149
Newtype(u8),
149-
Tuple(u8, u8),
150+
Tuple2(u8, u8),
150151
Struct { f: u8 },
151152
}
152153

153-
assert_tokens(
154-
&Outer::Inner(Inner::Unit),
155-
&[Token::UnitVariant {
156-
name: "Inner",
157-
variant: "Unit",
158-
}],
159-
);
160-
161-
assert_tokens(
162-
&Outer::Inner(Inner::Newtype(1)),
163-
&[
164-
Token::NewtypeVariant {
154+
// Reaches crate::private::de::content::VariantRefDeserializer::unit_variant
155+
#[test]
156+
fn unit() {
157+
assert_tokens(
158+
&Outer::Inner(Inner::Unit),
159+
&[Token::UnitVariant {
165160
name: "Inner",
166-
variant: "Newtype",
167-
},
168-
Token::U8(1),
169-
],
170-
);
161+
variant: "Unit",
162+
}],
163+
);
164+
}
171165

172-
assert_tokens(
173-
&Outer::Inner(Inner::Tuple(1, 1)),
174-
&[
175-
Token::TupleVariant {
176-
name: "Inner",
177-
variant: "Tuple",
178-
len: 2,
179-
},
180-
Token::U8(1),
181-
Token::U8(1),
182-
Token::TupleVariantEnd,
183-
],
184-
);
166+
// Reaches crate::private::de::content::VariantRefDeserializer::newtype_variant_seed
167+
#[test]
168+
fn newtype() {
169+
assert_tokens(
170+
&Outer::Inner(Inner::Newtype(1)),
171+
&[
172+
Token::NewtypeVariant {
173+
name: "Inner",
174+
variant: "Newtype",
175+
},
176+
Token::U8(1),
177+
],
178+
);
179+
}
185180

186-
assert_tokens(
187-
&Outer::Inner(Inner::Struct { f: 1 }),
188-
&[
189-
Token::StructVariant {
190-
name: "Inner",
191-
variant: "Struct",
192-
len: 1,
193-
},
194-
Token::Str("f"),
195-
Token::U8(1),
196-
Token::StructVariantEnd,
197-
],
198-
);
181+
// Reaches crate::private::de::content::VariantRefDeserializer::tuple_variant
182+
#[test]
183+
fn tuple2() {
184+
assert_tokens(
185+
&Outer::Inner(Inner::Tuple2(1, 1)),
186+
&[
187+
Token::TupleVariant {
188+
name: "Inner",
189+
variant: "Tuple2",
190+
len: 2,
191+
},
192+
Token::U8(1),
193+
Token::U8(1),
194+
Token::TupleVariantEnd,
195+
],
196+
);
197+
}
198+
199+
// Reaches crate::private::de::content::VariantRefDeserializer::struct_variant
200+
// Content::Map case
201+
#[test]
202+
fn struct_from_map() {
203+
assert_tokens(
204+
&Outer::Inner(Inner::Struct { f: 1 }),
205+
&[
206+
Token::StructVariant {
207+
name: "Inner",
208+
variant: "Struct",
209+
len: 1,
210+
},
211+
Token::Str("f"),
212+
Token::U8(1),
213+
Token::StructVariantEnd,
214+
],
215+
);
216+
}
199217
}
200218

201219
// Reaches crate::private::de::content::ContentRefDeserializer::deserialize_option

0 commit comments

Comments
 (0)