Tests for tuple default attribute

This commit is contained in:
David Tolnay
2018-12-10 21:47:56 -08:00
parent 85fbd8793a
commit 8b4074ee77
+91 -6
View File
@@ -93,6 +93,17 @@ where
a5: E, 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)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
struct CollectOther { struct CollectOther {
a: u32, 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)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
enum DefaultEnum<A, B, C, D, E> enum DefaultStructVariant<A, B, C, D, E>
where where
C: MyDefault, C: MyDefault,
E: 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] #[test]
fn test_default_enum() { fn test_default_struct_variant() {
assert_de_tokens( assert_de_tokens(
&DefaultEnum::Struct { &DefaultStructVariant::Struct {
a1: 1, a1: 1,
a2: 2, a2: 2,
a3: 3, a3: 3,
@@ -217,7 +271,7 @@ fn test_default_enum() {
}, },
&[ &[
Token::StructVariant { Token::StructVariant {
name: "DefaultEnum", name: "DefaultStructVariant",
variant: "Struct", variant: "Struct",
len: 3, len: 3,
}, },
@@ -236,7 +290,7 @@ fn test_default_enum() {
); );
assert_de_tokens( assert_de_tokens(
&DefaultEnum::Struct { &DefaultStructVariant::Struct {
a1: 1, a1: 1,
a2: 0, a2: 0,
a3: 123, a3: 123,
@@ -245,7 +299,7 @@ fn test_default_enum() {
}, },
&[ &[
Token::StructVariant { Token::StructVariant {
name: "DefaultEnum", name: "DefaultStructVariant",
variant: "Struct", variant: "Struct",
len: 3, 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. // Does not implement std::default::Default.
#[derive(Debug, PartialEq, Deserialize)] #[derive(Debug, PartialEq, Deserialize)]
struct NoStdDefault(i8); struct NoStdDefault(i8);