Add tests with borrowed strings for the tag field name and tag value

This commit is contained in:
Mingun 2023-08-08 01:20:15 +05:00
parent 4987fd15f7
commit 47954502af

View File

@ -59,12 +59,32 @@ fn unit() {
Token::StructEnd,
],
);
assert_de_tokens(
&InternallyTagged::Unit,
&[
Token::Struct {
name: "InternallyTagged",
len: 1,
},
Token::BorrowedStr("tag"),
Token::BorrowedStr("Unit"),
Token::StructEnd,
],
);
assert_de_tokens(
&InternallyTagged::Unit,
&[
Token::Seq { len: Some(1) },
Token::Str("Unit"),
Token::Str("Unit"), // tag
Token::SeqEnd,
],
);
assert_de_tokens(
&InternallyTagged::Unit,
&[
Token::Seq { len: Some(1) },
Token::BorrowedStr("Unit"), // tag
Token::SeqEnd,
],
);
@ -83,6 +103,15 @@ fn newtype_unit() {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(1) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeUnit"),
Token::MapEnd,
],
);
}
#[test]
@ -98,6 +127,15 @@ fn newtype_unit_struct() {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(1) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeUnitStruct"),
Token::MapEnd,
],
);
assert_de_tokens(
&value,
@ -111,6 +149,18 @@ fn newtype_unit_struct() {
Token::StructEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Struct {
name: "InternallyTagged",
len: 1,
},
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeUnitStruct"),
Token::StructEnd,
],
);
assert_de_tokens(
&value,
@ -120,6 +170,14 @@ fn newtype_unit_struct() {
Token::SeqEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Seq { len: Some(1) },
Token::BorrowedStr("NewtypeUnitStruct"), // tag
Token::SeqEnd,
],
);
}
#[test]
@ -137,8 +195,10 @@ fn newtype_newtype() {
#[test]
fn newtype_map() {
let value = InternallyTagged::NewtypeMap(BTreeMap::new());
assert_tokens(
&InternallyTagged::NewtypeMap(BTreeMap::new()),
&value,
&[
Token::Map { len: Some(1) },
Token::Str("tag"),
@ -146,11 +206,20 @@ fn newtype_map() {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(1) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeMap"),
Token::MapEnd,
],
);
assert_de_tokens_error::<InternallyTagged>(
&[
Token::Seq { len: Some(2) },
Token::Str("NewtypeMap"),
Token::Str("NewtypeMap"), // tag
Token::Map { len: Some(0) },
Token::MapEnd,
Token::SeqEnd,
@ -161,8 +230,10 @@ fn newtype_map() {
#[test]
fn newtype_struct() {
let value = InternallyTagged::NewtypeStruct(Struct { f: 6 });
assert_tokens(
&InternallyTagged::NewtypeStruct(Struct { f: 6 }),
&value,
&[
Token::Struct {
name: "Struct",
@ -175,12 +246,35 @@ fn newtype_struct() {
Token::StructEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Struct {
name: "Struct",
len: 2,
},
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeStruct"),
Token::BorrowedStr("f"),
Token::U8(6),
Token::StructEnd,
],
);
assert_de_tokens(
&InternallyTagged::NewtypeStruct(Struct { f: 6 }),
&value,
&[
Token::Seq { len: Some(2) },
Token::Str("NewtypeStruct"),
Token::Str("NewtypeStruct"), // tag
Token::U8(6),
Token::SeqEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Seq { len: Some(2) },
Token::BorrowedStr("NewtypeStruct"), // tag
Token::U8(6),
Token::SeqEnd,
],
@ -192,8 +286,10 @@ mod newtype_enum {
#[test]
fn unit() {
let value = InternallyTagged::NewtypeEnum(Enum::Unit);
assert_tokens(
&InternallyTagged::NewtypeEnum(Enum::Unit),
&value,
&[
Token::Map { len: Some(2) },
Token::Str("tag"),
@ -203,12 +299,25 @@ mod newtype_enum {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeEnum"),
Token::BorrowedStr("Unit"),
Token::Unit,
Token::MapEnd,
],
);
}
#[test]
fn newtype() {
let value = InternallyTagged::NewtypeEnum(Enum::Newtype(1));
assert_tokens(
&InternallyTagged::NewtypeEnum(Enum::Newtype(1)),
&value,
&[
Token::Map { len: Some(2) },
Token::Str("tag"),
@ -218,15 +327,28 @@ mod newtype_enum {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeEnum"),
Token::BorrowedStr("Newtype"),
Token::U8(1),
Token::MapEnd,
],
);
}
#[test]
fn tuple() {
let value = InternallyTagged::NewtypeEnum(Enum::Tuple(1, 1));
// Reaches crate::private::de::content::VariantDeserializer::tuple_variant
// Content::Seq case
// via ContentDeserializer::deserialize_enum
assert_tokens(
&InternallyTagged::NewtypeEnum(Enum::Tuple(1, 1)),
&value,
&[
Token::Map { len: Some(2) },
Token::Str("tag"),
@ -242,15 +364,34 @@ mod newtype_enum {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeEnum"),
Token::BorrowedStr("Tuple"),
Token::TupleStruct {
name: "Tuple",
len: 2,
},
Token::U8(1),
Token::U8(1),
Token::TupleStructEnd,
Token::MapEnd,
],
);
}
#[test]
fn struct_() {
let value = InternallyTagged::NewtypeEnum(Enum::Struct { f: 1 });
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
// Content::Map case
// via ContentDeserializer::deserialize_enum
assert_tokens(
&InternallyTagged::NewtypeEnum(Enum::Struct { f: 1 }),
&value,
&[
Token::Map { len: Some(2) },
Token::Str("tag"),
@ -266,12 +407,29 @@ mod newtype_enum {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeEnum"),
Token::BorrowedStr("Struct"),
Token::Struct {
name: "Struct",
len: 1,
},
Token::BorrowedStr("f"),
Token::U8(1),
Token::StructEnd,
Token::MapEnd,
],
);
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
// Content::Seq case
// via ContentDeserializer::deserialize_enum
assert_de_tokens(
&InternallyTagged::NewtypeEnum(Enum::Struct { f: 1 }),
&value,
&[
Token::Map { len: Some(2) },
Token::Str("tag"),
@ -283,13 +441,28 @@ mod newtype_enum {
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("NewtypeEnum"),
Token::BorrowedStr("Struct"),
Token::Seq { len: Some(1) },
Token::U8(1), // f
Token::SeqEnd,
Token::MapEnd,
],
);
}
}
#[test]
fn struct_() {
let value = InternallyTagged::Struct { a: 1 };
assert_tokens(
&InternallyTagged::Struct { a: 1 },
&value,
&[
Token::Struct {
name: "InternallyTagged",
@ -302,12 +475,35 @@ fn struct_() {
Token::StructEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Struct {
name: "InternallyTagged",
len: 2,
},
Token::BorrowedStr("tag"),
Token::BorrowedStr("Struct"),
Token::BorrowedStr("a"),
Token::U8(1),
Token::StructEnd,
],
);
assert_de_tokens(
&InternallyTagged::Struct { a: 1 },
&value,
&[
Token::Seq { len: Some(2) },
Token::Str("Struct"),
Token::Str("Struct"), // tag
Token::U8(1),
Token::SeqEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Seq { len: Some(2) },
Token::BorrowedStr("Struct"), // tag
Token::U8(1),
Token::SeqEnd,
],
@ -330,7 +526,7 @@ mod struct_enum {
let value = InternallyTagged::StructEnum { enum_: Enum::Unit };
assert_de_tokens(
assert_tokens(
&value,
&[
Token::Struct {
@ -341,6 +537,22 @@ mod struct_enum {
Token::Str("StructEnum"),
Token::Str("enum_"),
Token::Enum { name: "Enum" },
Token::Str("Unit"),
Token::Unit,
Token::StructEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Struct {
name: "InternallyTagged",
len: 2,
},
Token::BorrowedStr("tag"),
Token::BorrowedStr("StructEnum"),
Token::BorrowedStr("enum_"),
Token::Enum { name: "Enum" },
Token::BorrowedStr("Unit"),
Token::Unit,
Token::StructEnd,
@ -355,6 +567,19 @@ mod struct_enum {
Token::Str("StructEnum"),
Token::Str("enum_"),
Token::Enum { name: "Enum" },
Token::Str("Unit"),
Token::Unit,
Token::MapEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Map { len: Some(2) },
Token::BorrowedStr("tag"),
Token::BorrowedStr("StructEnum"),
Token::BorrowedStr("enum_"),
Token::Enum { name: "Enum" },
Token::BorrowedStr("Unit"),
Token::Unit,
Token::MapEnd,
@ -367,6 +592,17 @@ mod struct_enum {
Token::Seq { len: Some(2) },
Token::Str("StructEnum"), // tag
Token::Enum { name: "Enum" }, // enum_
Token::Str("Unit"),
Token::Unit,
Token::SeqEnd,
],
);
assert_de_tokens(
&value,
&[
Token::Seq { len: Some(2) },
Token::BorrowedStr("StructEnum"), // tag
Token::Enum { name: "Enum" }, // enum_
Token::BorrowedStr("Unit"),
Token::Unit,
Token::SeqEnd,
@ -786,7 +1022,7 @@ fn unit_variant_with_unknown_fields() {
assert_de_tokens_error::<InternallyTagged>(
&[
Token::Seq { len: None },
Token::Str("Unit"),
Token::Str("Unit"), // tag
Token::I32(0),
Token::SeqEnd,
],