mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 22:31:02 +00:00
Unit: add tests for deserialization from sequence
(review this commit with "ignore whitespace changes" option on)
This commit is contained in:
@@ -18,104 +18,149 @@ enum AdjacentlyTagged<T> {
|
|||||||
Struct { f: u8 },
|
Struct { f: u8 },
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
mod unit {
|
||||||
fn unit() {
|
use super::*;
|
||||||
// unit with no content
|
|
||||||
assert_tokens(
|
|
||||||
&AdjacentlyTagged::Unit::<u8>,
|
|
||||||
&[
|
|
||||||
Token::Struct {
|
|
||||||
name: "AdjacentlyTagged",
|
|
||||||
len: 1,
|
|
||||||
},
|
|
||||||
Token::Str("t"),
|
|
||||||
Token::UnitVariant {
|
|
||||||
name: "AdjacentlyTagged",
|
|
||||||
variant: "Unit",
|
|
||||||
},
|
|
||||||
Token::StructEnd,
|
|
||||||
],
|
|
||||||
);
|
|
||||||
|
|
||||||
// unit with no content and incorrect hint for number of elements
|
#[test]
|
||||||
assert_de_tokens(
|
fn map_str_tag_only() {
|
||||||
&AdjacentlyTagged::Unit::<u8>,
|
// Map: tag only
|
||||||
&[
|
assert_tokens(
|
||||||
Token::Struct {
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
name: "AdjacentlyTagged",
|
&[
|
||||||
len: 2,
|
Token::Struct {
|
||||||
},
|
name: "AdjacentlyTagged",
|
||||||
Token::Str("t"),
|
len: 1,
|
||||||
Token::UnitVariant {
|
},
|
||||||
name: "AdjacentlyTagged",
|
Token::Str("t"),
|
||||||
variant: "Unit",
|
Token::UnitVariant {
|
||||||
},
|
name: "AdjacentlyTagged",
|
||||||
Token::StructEnd,
|
variant: "Unit",
|
||||||
],
|
},
|
||||||
);
|
Token::StructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
// unit with tag first
|
// Map: tag only and incorrect hint for number of elements
|
||||||
assert_de_tokens(
|
assert_de_tokens(
|
||||||
&AdjacentlyTagged::Unit::<u8>,
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
&[
|
&[
|
||||||
Token::Struct {
|
Token::Struct {
|
||||||
name: "AdjacentlyTagged",
|
name: "AdjacentlyTagged",
|
||||||
len: 2,
|
len: 2,
|
||||||
},
|
},
|
||||||
Token::Str("t"),
|
Token::Str("t"),
|
||||||
Token::UnitVariant {
|
Token::UnitVariant {
|
||||||
name: "AdjacentlyTagged",
|
name: "AdjacentlyTagged",
|
||||||
variant: "Unit",
|
variant: "Unit",
|
||||||
},
|
},
|
||||||
Token::Str("c"),
|
Token::StructEnd,
|
||||||
Token::Unit,
|
],
|
||||||
Token::StructEnd,
|
);
|
||||||
],
|
}
|
||||||
);
|
|
||||||
|
|
||||||
// unit with content first
|
#[test]
|
||||||
assert_de_tokens(
|
fn map_str_tag_content() {
|
||||||
&AdjacentlyTagged::Unit::<u8>,
|
// Map: tag + content
|
||||||
&[
|
assert_de_tokens(
|
||||||
Token::Struct {
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
name: "AdjacentlyTagged",
|
&[
|
||||||
len: 2,
|
Token::Struct {
|
||||||
},
|
name: "AdjacentlyTagged",
|
||||||
Token::Str("c"),
|
len: 2,
|
||||||
Token::Unit,
|
},
|
||||||
Token::Str("t"),
|
Token::Str("t"),
|
||||||
Token::UnitVariant {
|
Token::UnitVariant {
|
||||||
name: "AdjacentlyTagged",
|
name: "AdjacentlyTagged",
|
||||||
variant: "Unit",
|
variant: "Unit",
|
||||||
},
|
},
|
||||||
Token::StructEnd,
|
Token::Str("c"),
|
||||||
],
|
Token::Unit,
|
||||||
);
|
Token::StructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Map: content + tag
|
||||||
|
assert_de_tokens(
|
||||||
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
|
&[
|
||||||
|
Token::Struct {
|
||||||
|
name: "AdjacentlyTagged",
|
||||||
|
len: 2,
|
||||||
|
},
|
||||||
|
Token::Str("c"),
|
||||||
|
Token::Unit,
|
||||||
|
Token::Str("t"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "AdjacentlyTagged",
|
||||||
|
variant: "Unit",
|
||||||
|
},
|
||||||
|
Token::StructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
// unit with excess content (f, g, h)
|
// Map: tag + content + excess fields (f, g, h)
|
||||||
assert_de_tokens(
|
assert_de_tokens(
|
||||||
&AdjacentlyTagged::Unit::<u8>,
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
&[
|
&[
|
||||||
Token::Struct {
|
Token::Struct {
|
||||||
name: "AdjacentlyTagged",
|
name: "AdjacentlyTagged",
|
||||||
len: 2,
|
len: 2,
|
||||||
},
|
},
|
||||||
Token::Str("f"),
|
Token::Str("f"),
|
||||||
Token::Unit,
|
Token::Unit,
|
||||||
Token::Str("t"),
|
Token::Str("t"),
|
||||||
Token::UnitVariant {
|
Token::UnitVariant {
|
||||||
name: "AdjacentlyTagged",
|
name: "AdjacentlyTagged",
|
||||||
variant: "Unit",
|
variant: "Unit",
|
||||||
},
|
},
|
||||||
Token::Str("g"),
|
Token::Str("g"),
|
||||||
Token::Unit,
|
Token::Unit,
|
||||||
Token::Str("c"),
|
Token::Str("c"),
|
||||||
Token::Unit,
|
Token::Unit,
|
||||||
Token::Str("h"),
|
Token::Str("h"),
|
||||||
Token::Unit,
|
Token::Unit,
|
||||||
Token::StructEnd,
|
Token::StructEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn seq_tag_content() {
|
||||||
|
// Seq: tag and content
|
||||||
|
assert_de_tokens(
|
||||||
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
|
&[
|
||||||
|
Token::Seq { len: Some(2) },
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "AdjacentlyTagged",
|
||||||
|
variant: "Unit",
|
||||||
|
},
|
||||||
|
Token::Unit,
|
||||||
|
Token::SeqEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
// Seq: tag (as string) and content
|
||||||
|
assert_de_tokens(
|
||||||
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
|
&[
|
||||||
|
Token::Seq { len: None },
|
||||||
|
Token::Str("Unit"), // tag
|
||||||
|
Token::Unit, // content
|
||||||
|
Token::SeqEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
// Seq: tag (as borrowed string) and content
|
||||||
|
assert_de_tokens(
|
||||||
|
&AdjacentlyTagged::Unit::<u8>,
|
||||||
|
&[
|
||||||
|
Token::Seq { len: None },
|
||||||
|
Token::BorrowedStr("Unit"), // tag
|
||||||
|
Token::Unit, // content
|
||||||
|
Token::SeqEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user