Tests for tuple default attribute

This commit is contained in:
David Tolnay 2018-12-10 21:47:56 -08:00
parent 85fbd8793a
commit 8b4074ee77
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -93,6 +93,17 @@ where
a5: E,
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct DefaultTupleStruct<A, B, C>(
A,
#[serde(default)]
B,
#[serde(default = "MyDefault::my_default")]
C,
)
where
C: MyDefault;
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct CollectOther {
a: u32,
@ -186,8 +197,37 @@ fn test_default_struct() {
);
}
#[test]
fn test_default_tuple() {
assert_de_tokens(
&DefaultTupleStruct(1, 2, 3),
&[
Token::TupleStruct {
name: "DefaultTupleStruct",
len: 3,
},
Token::I32(1),
Token::I32(2),
Token::I32(3),
Token::TupleStructEnd,
],
);
assert_de_tokens(
&DefaultTupleStruct(1, 0, 123),
&[
Token::TupleStruct {
name: "DefaultTupleStruct",
len: 3,
},
Token::I32(1),
Token::TupleStructEnd,
],
);
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
enum DefaultEnum<A, B, C, D, E>
enum DefaultStructVariant<A, B, C, D, E>
where
C: MyDefault,
E: MyDefault,
@ -205,10 +245,24 @@ where
},
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
enum DefaultTupleVariant<A, B, C>
where
C: MyDefault,
{
Tuple(
A,
#[serde(default)]
B,
#[serde(default = "MyDefault::my_default")]
C,
),
}
#[test]
fn test_default_enum() {
fn test_default_struct_variant() {
assert_de_tokens(
&DefaultEnum::Struct {
&DefaultStructVariant::Struct {
a1: 1,
a2: 2,
a3: 3,
@ -217,7 +271,7 @@ fn test_default_enum() {
},
&[
Token::StructVariant {
name: "DefaultEnum",
name: "DefaultStructVariant",
variant: "Struct",
len: 3,
},
@ -236,7 +290,7 @@ fn test_default_enum() {
);
assert_de_tokens(
&DefaultEnum::Struct {
&DefaultStructVariant::Struct {
a1: 1,
a2: 0,
a3: 123,
@ -245,7 +299,7 @@ fn test_default_enum() {
},
&[
Token::StructVariant {
name: "DefaultEnum",
name: "DefaultStructVariant",
variant: "Struct",
len: 3,
},
@ -256,6 +310,37 @@ fn test_default_enum() {
);
}
#[test]
fn test_default_tuple_variant() {
assert_de_tokens(
&DefaultTupleVariant::Tuple(1, 2, 3),
&[
Token::TupleVariant {
name: "DefaultTupleVariant",
variant: "Tuple",
len: 3,
},
Token::I32(1),
Token::I32(2),
Token::I32(3),
Token::TupleVariantEnd,
],
);
assert_de_tokens(
&DefaultTupleVariant::Tuple(1, 0, 123),
&[
Token::TupleVariant {
name: "DefaultTupleVariant",
variant: "Tuple",
len: 3,
},
Token::I32(1),
Token::TupleVariantEnd,
],
);
}
// Does not implement std::default::Default.
#[derive(Debug, PartialEq, Deserialize)]
struct NoStdDefault(i8);