Newtype: add tests for deserialization from sequence

(review this commit with "ignore whitespace changes" option on)
This commit is contained in:
Mingun 2024-08-16 22:10:26 +05:00
parent d5a9c11b5c
commit b0d651be40

View File

@ -302,64 +302,112 @@ mod unit {
} }
} }
#[test] mod newtype {
fn newtype() { use super::*;
let value = AdjacentlyTagged::Newtype::<u8>(1);
// newtype with tag first #[test]
assert_tokens( fn map_tag_content() {
&value, let value = AdjacentlyTagged::Newtype::<u8>(1);
&[
Token::Struct {
name: "AdjacentlyTagged",
len: 2,
},
Token::Str("t"),
Token::UnitVariant {
name: "AdjacentlyTagged",
variant: "Newtype",
},
Token::Str("c"),
Token::U8(1),
Token::StructEnd,
],
);
// newtype with content first // Map: tag + content
assert_de_tokens( assert_tokens(
&value, &value,
&[ &[
Token::Struct { Token::Struct {
name: "AdjacentlyTagged", name: "AdjacentlyTagged",
len: 2, len: 2,
}, },
Token::Str("c"), Token::Str("t"),
Token::U8(1), Token::UnitVariant {
Token::Str("t"), name: "AdjacentlyTagged",
Token::UnitVariant { variant: "Newtype",
name: "AdjacentlyTagged", },
variant: "Newtype", Token::Str("c"),
}, Token::U8(1),
Token::StructEnd, Token::StructEnd,
], ],
); );
// optional newtype with no content field // Map: content + tag
assert_de_tokens( assert_de_tokens(
&AdjacentlyTagged::Newtype::<Option<u8>>(None), &value,
&[ &[
Token::Struct { Token::Struct {
name: "AdjacentlyTagged", name: "AdjacentlyTagged",
len: 1, len: 2,
}, },
Token::Str("t"), Token::Str("c"),
Token::UnitVariant { Token::U8(1),
name: "AdjacentlyTagged", Token::Str("t"),
variant: "Newtype", Token::UnitVariant {
}, name: "AdjacentlyTagged",
Token::StructEnd, variant: "Newtype",
], },
); Token::StructEnd,
],
);
}
#[test]
fn map_tag_only() {
// optional newtype with no content field
assert_de_tokens(
&AdjacentlyTagged::Newtype::<Option<u8>>(None),
&[
Token::Struct {
name: "AdjacentlyTagged",
len: 1,
},
Token::Str("t"),
Token::UnitVariant {
name: "AdjacentlyTagged",
variant: "Newtype",
},
Token::StructEnd,
],
);
}
#[test]
fn seq() {
let value = AdjacentlyTagged::Newtype::<u8>(1);
// Seq: tag and content
assert_de_tokens(
&value,
&[
Token::Seq { len: Some(2) },
Token::UnitVariant {
name: "AdjacentlyTagged",
variant: "Newtype",
},
Token::U8(1),
Token::SeqEnd,
],
);
// Seq: tag (as string) and content
assert_de_tokens(
&value,
&[
Token::Seq { len: None },
Token::Str("Newtype"), // tag
Token::U8(1), // content
Token::SeqEnd,
],
);
// Seq: tag (as borrowed string) and content
assert_de_tokens(
&value,
&[
Token::Seq { len: None },
Token::BorrowedStr("Newtype"), // tag
Token::U8(1), // content
Token::SeqEnd,
],
);
}
} }
#[test] #[test]