Skip to content

Commit b0d651b

Browse files
committed
Newtype: add tests for deserialization from sequence
(review this commit with "ignore whitespace changes" option on)
1 parent d5a9c11 commit b0d651b

File tree

1 file changed

+103
-55
lines changed

1 file changed

+103
-55
lines changed

test_suite/tests/test_enum_adjacently_tagged.rs

Lines changed: 103 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -302,64 +302,112 @@ mod unit {
302302
}
303303
}
304304

305-
#[test]
306-
fn newtype() {
307-
let value = AdjacentlyTagged::Newtype::<u8>(1);
305+
mod newtype {
306+
use super::*;
308307

309-
// newtype with tag first
310-
assert_tokens(
311-
&value,
312-
&[
313-
Token::Struct {
314-
name: "AdjacentlyTagged",
315-
len: 2,
316-
},
317-
Token::Str("t"),
318-
Token::UnitVariant {
319-
name: "AdjacentlyTagged",
320-
variant: "Newtype",
321-
},
322-
Token::Str("c"),
323-
Token::U8(1),
324-
Token::StructEnd,
325-
],
326-
);
308+
#[test]
309+
fn map_tag_content() {
310+
let value = AdjacentlyTagged::Newtype::<u8>(1);
327311

328-
// newtype with content first
329-
assert_de_tokens(
330-
&value,
331-
&[
332-
Token::Struct {
333-
name: "AdjacentlyTagged",
334-
len: 2,
335-
},
336-
Token::Str("c"),
337-
Token::U8(1),
338-
Token::Str("t"),
339-
Token::UnitVariant {
340-
name: "AdjacentlyTagged",
341-
variant: "Newtype",
342-
},
343-
Token::StructEnd,
344-
],
345-
);
312+
// Map: tag + content
313+
assert_tokens(
314+
&value,
315+
&[
316+
Token::Struct {
317+
name: "AdjacentlyTagged",
318+
len: 2,
319+
},
320+
Token::Str("t"),
321+
Token::UnitVariant {
322+
name: "AdjacentlyTagged",
323+
variant: "Newtype",
324+
},
325+
Token::Str("c"),
326+
Token::U8(1),
327+
Token::StructEnd,
328+
],
329+
);
346330

347-
// optional newtype with no content field
348-
assert_de_tokens(
349-
&AdjacentlyTagged::Newtype::<Option<u8>>(None),
350-
&[
351-
Token::Struct {
352-
name: "AdjacentlyTagged",
353-
len: 1,
354-
},
355-
Token::Str("t"),
356-
Token::UnitVariant {
357-
name: "AdjacentlyTagged",
358-
variant: "Newtype",
359-
},
360-
Token::StructEnd,
361-
],
362-
);
331+
// Map: content + tag
332+
assert_de_tokens(
333+
&value,
334+
&[
335+
Token::Struct {
336+
name: "AdjacentlyTagged",
337+
len: 2,
338+
},
339+
Token::Str("c"),
340+
Token::U8(1),
341+
Token::Str("t"),
342+
Token::UnitVariant {
343+
name: "AdjacentlyTagged",
344+
variant: "Newtype",
345+
},
346+
Token::StructEnd,
347+
],
348+
);
349+
}
350+
351+
#[test]
352+
fn map_tag_only() {
353+
// optional newtype with no content field
354+
assert_de_tokens(
355+
&AdjacentlyTagged::Newtype::<Option<u8>>(None),
356+
&[
357+
Token::Struct {
358+
name: "AdjacentlyTagged",
359+
len: 1,
360+
},
361+
Token::Str("t"),
362+
Token::UnitVariant {
363+
name: "AdjacentlyTagged",
364+
variant: "Newtype",
365+
},
366+
Token::StructEnd,
367+
],
368+
);
369+
}
370+
371+
#[test]
372+
fn seq() {
373+
let value = AdjacentlyTagged::Newtype::<u8>(1);
374+
375+
// Seq: tag and content
376+
assert_de_tokens(
377+
&value,
378+
&[
379+
Token::Seq { len: Some(2) },
380+
Token::UnitVariant {
381+
name: "AdjacentlyTagged",
382+
variant: "Newtype",
383+
},
384+
Token::U8(1),
385+
Token::SeqEnd,
386+
],
387+
);
388+
389+
// Seq: tag (as string) and content
390+
assert_de_tokens(
391+
&value,
392+
&[
393+
Token::Seq { len: None },
394+
Token::Str("Newtype"), // tag
395+
Token::U8(1), // content
396+
Token::SeqEnd,
397+
],
398+
);
399+
400+
// Seq: tag (as borrowed string) and content
401+
assert_de_tokens(
402+
&value,
403+
&[
404+
Token::Seq { len: None },
405+
Token::BorrowedStr("Newtype"), // tag
406+
Token::U8(1), // content
407+
Token::SeqEnd,
408+
],
409+
);
410+
}
363411
}
364412

365413
#[test]

0 commit comments

Comments
 (0)