Skip to content

Commit 31ca16d

Browse files
authored
Merge pull request #2804 from Mingun/adjacently-tagged-tests
Consolidate and add new tests of adjacently tagged enums
2 parents 1a9ffdb + 9f72ce6 commit 31ca16d

File tree

4 files changed

+803
-579
lines changed

4 files changed

+803
-579
lines changed

serde/src/private/de.rs

+4
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,9 @@ mod content {
904904

905905
/// Not public API.
906906
pub struct TagOrContentFieldVisitor {
907+
/// Name of the tag field of the adjacently tagged enum
907908
pub tag: &'static str,
909+
/// Name of the content field of the adjacently tagged enum
908910
pub content: &'static str,
909911
}
910912

@@ -979,7 +981,9 @@ mod content {
979981

980982
/// Not public API.
981983
pub struct TagContentOtherFieldVisitor {
984+
/// Name of the tag field of the adjacently tagged enum
982985
pub tag: &'static str,
986+
/// Name of the content field of the adjacently tagged enum
983987
pub content: &'static str,
984988
}
985989

test_suite/tests/test_annotations.rs

-157
Original file line numberDiff line numberDiff line change
@@ -1607,59 +1607,6 @@ fn test_collect_other() {
16071607
);
16081608
}
16091609

1610-
#[test]
1611-
fn test_adjacently_tagged_enum_bytes() {
1612-
#[derive(Serialize, Deserialize, PartialEq, Debug)]
1613-
#[serde(tag = "t", content = "c")]
1614-
enum Data {
1615-
A { a: i32 },
1616-
}
1617-
1618-
let data = Data::A { a: 0 };
1619-
1620-
assert_tokens(
1621-
&data,
1622-
&[
1623-
Token::Struct {
1624-
name: "Data",
1625-
len: 2,
1626-
},
1627-
Token::Str("t"),
1628-
Token::UnitVariant {
1629-
name: "Data",
1630-
variant: "A",
1631-
},
1632-
Token::Str("c"),
1633-
Token::Struct { name: "A", len: 1 },
1634-
Token::Str("a"),
1635-
Token::I32(0),
1636-
Token::StructEnd,
1637-
Token::StructEnd,
1638-
],
1639-
);
1640-
1641-
assert_de_tokens(
1642-
&data,
1643-
&[
1644-
Token::Struct {
1645-
name: "Data",
1646-
len: 2,
1647-
},
1648-
Token::Bytes(b"t"),
1649-
Token::UnitVariant {
1650-
name: "Data",
1651-
variant: "A",
1652-
},
1653-
Token::Bytes(b"c"),
1654-
Token::Struct { name: "A", len: 1 },
1655-
Token::Str("a"),
1656-
Token::I32(0),
1657-
Token::StructEnd,
1658-
Token::StructEnd,
1659-
],
1660-
);
1661-
}
1662-
16631610
#[test]
16641611
fn test_partially_untagged_enum() {
16651612
#[derive(Serialize, Deserialize, PartialEq, Debug)]
@@ -1846,38 +1793,6 @@ fn test_partially_untagged_internally_tagged_enum() {
18461793
// TODO test error output
18471794
}
18481795

1849-
#[test]
1850-
fn test_partially_untagged_adjacently_tagged_enum() {
1851-
#[derive(Serialize, Deserialize, PartialEq, Debug)]
1852-
#[serde(tag = "t", content = "c")]
1853-
enum Data {
1854-
A(u32),
1855-
B,
1856-
#[serde(untagged)]
1857-
Var(u32),
1858-
}
1859-
1860-
let data = Data::A(7);
1861-
1862-
assert_de_tokens(
1863-
&data,
1864-
&[
1865-
Token::Map { len: None },
1866-
Token::Str("t"),
1867-
Token::Str("A"),
1868-
Token::Str("c"),
1869-
Token::U32(7),
1870-
Token::MapEnd,
1871-
],
1872-
);
1873-
1874-
let data = Data::Var(42);
1875-
1876-
assert_de_tokens(&data, &[Token::U32(42)]);
1877-
1878-
// TODO test error output
1879-
}
1880-
18811796
#[test]
18821797
fn test_transparent_struct() {
18831798
#[derive(Serialize, Deserialize, PartialEq, Debug)]
@@ -1980,32 +1895,6 @@ fn test_expecting_message_externally_tagged_enum() {
19801895
);
19811896
}
19821897

1983-
#[test]
1984-
fn test_expecting_message_adjacently_tagged_enum() {
1985-
#[derive(Deserialize)]
1986-
#[serde(tag = "tag", content = "content")]
1987-
#[serde(expecting = "something strange...")]
1988-
enum Enum {
1989-
AdjacentlyTagged,
1990-
}
1991-
1992-
assert_de_tokens_error::<Enum>(
1993-
&[Token::Str("AdjacentlyTagged")],
1994-
r#"invalid type: string "AdjacentlyTagged", expected something strange..."#,
1995-
);
1996-
1997-
assert_de_tokens_error::<Enum>(
1998-
&[Token::Map { len: None }, Token::Unit],
1999-
r#"invalid type: unit value, expected "tag", "content", or other ignored fields"#,
2000-
);
2001-
2002-
// Check that #[serde(expecting = "...")] doesn't affect variant identifier error message
2003-
assert_de_tokens_error::<Enum>(
2004-
&[Token::Map { len: None }, Token::Str("tag"), Token::Unit],
2005-
"invalid type: unit value, expected variant of enum Enum",
2006-
);
2007-
}
2008-
20091898
#[test]
20101899
fn test_expecting_message_untagged_tagged_enum() {
20111900
#[derive(Deserialize)]
@@ -2891,52 +2780,6 @@ mod flatten {
28912780
mod adjacently_tagged {
28922781
use super::*;
28932782

2894-
#[test]
2895-
fn straightforward() {
2896-
#[derive(Serialize, Deserialize, PartialEq, Debug)]
2897-
#[serde(tag = "t", content = "c")]
2898-
enum Data {
2899-
A {
2900-
a: i32,
2901-
#[serde(flatten)]
2902-
flat: Flat,
2903-
},
2904-
}
2905-
2906-
#[derive(Serialize, Deserialize, PartialEq, Debug)]
2907-
struct Flat {
2908-
b: i32,
2909-
}
2910-
2911-
let data = Data::A {
2912-
a: 0,
2913-
flat: Flat { b: 0 },
2914-
};
2915-
2916-
assert_tokens(
2917-
&data,
2918-
&[
2919-
Token::Struct {
2920-
name: "Data",
2921-
len: 2,
2922-
},
2923-
Token::Str("t"),
2924-
Token::UnitVariant {
2925-
name: "Data",
2926-
variant: "A",
2927-
},
2928-
Token::Str("c"),
2929-
Token::Map { len: None },
2930-
Token::Str("a"),
2931-
Token::I32(0),
2932-
Token::Str("b"),
2933-
Token::I32(0),
2934-
Token::MapEnd,
2935-
Token::StructEnd,
2936-
],
2937-
);
2938-
}
2939-
29402783
#[derive(Debug, PartialEq, Serialize, Deserialize)]
29412784
struct Flatten {
29422785
outer: u32,

0 commit comments

Comments
 (0)