Skip to content

Commit 2d65a88

Browse files
committed
test(serde): Show existing key behavior
1 parent 80217f8 commit 2d65a88

File tree

6 files changed

+794
-0
lines changed

6 files changed

+794
-0
lines changed

crates/toml/tests/serde/de_key.rs

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
use std::collections::BTreeMap;
2+
3+
use serde::Deserialize;
4+
use snapbox::assert_data_eq;
5+
use snapbox::prelude::*;
6+
use snapbox::str;
7+
8+
#[derive(Debug, Deserialize, PartialEq)]
9+
struct Document<K: Ord> {
10+
map: Map<K>,
11+
}
12+
13+
type Map<K> = BTreeMap<K, String>;
14+
15+
mod string_key {
16+
use super::*;
17+
18+
type Map = super::Map<String>;
19+
type Document = super::Document<String>;
20+
21+
#[test]
22+
fn from_str() {
23+
let input = "key = 'value'";
24+
let expected = str![[r#"
25+
{
26+
"key": "value",
27+
}
28+
29+
"#]];
30+
let result = crate::from_str::<Map>(input);
31+
assert_data_eq!(result.unwrap().to_debug(), expected);
32+
}
33+
34+
#[test]
35+
fn value_from_inline_table() {
36+
let input = "{ key = 'value' }";
37+
let expected = str![[r#"
38+
{
39+
"key": "value",
40+
}
41+
42+
"#]];
43+
let result = crate::value_from_str::<Map>(input);
44+
assert_data_eq!(result.unwrap().to_debug(), expected);
45+
}
46+
47+
#[test]
48+
fn from_inline_table() {
49+
let input = "map = { key = 'value' }";
50+
let expected = str![[r#"
51+
Document {
52+
map: {
53+
"key": "value",
54+
},
55+
}
56+
57+
"#]];
58+
let result = crate::from_str::<Document>(input);
59+
assert_data_eq!(result.unwrap().to_debug(), expected);
60+
}
61+
62+
#[test]
63+
fn from_std_table() {
64+
let input = "[map]
65+
key = 'value'";
66+
let expected = str![[r#"
67+
Document {
68+
map: {
69+
"key": "value",
70+
},
71+
}
72+
73+
"#]];
74+
let result = crate::from_str::<Document>(input);
75+
assert_data_eq!(result.unwrap().to_debug(), expected);
76+
}
77+
}
78+
79+
mod variant_key {
80+
use super::*;
81+
82+
#[derive(Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
83+
enum Keys {
84+
#[allow(non_camel_case_types)]
85+
key,
86+
}
87+
88+
type Map = super::Map<Keys>;
89+
type Document = super::Document<Keys>;
90+
91+
#[test]
92+
fn from_str() {
93+
let input = "key = 'value'";
94+
let expected = str![[r#"
95+
{
96+
key: "value",
97+
}
98+
99+
"#]];
100+
let result = crate::from_str::<Map>(input);
101+
assert_data_eq!(result.unwrap().to_debug(), expected);
102+
}
103+
104+
#[test]
105+
fn value_from_inline_table() {
106+
let input = "{ key = 'value' }";
107+
let expected = str![[r#"
108+
{
109+
key: "value",
110+
}
111+
112+
"#]];
113+
let result = crate::value_from_str::<Map>(input);
114+
assert_data_eq!(result.unwrap().to_debug(), expected);
115+
}
116+
117+
#[test]
118+
fn from_inline_table() {
119+
let input = "map = { key = 'value' }";
120+
let expected = str![[r#"
121+
Document {
122+
map: {
123+
key: "value",
124+
},
125+
}
126+
127+
"#]];
128+
let result = crate::from_str::<Document>(input);
129+
assert_data_eq!(result.unwrap().to_debug(), expected);
130+
}
131+
132+
#[test]
133+
fn from_std_table() {
134+
let input = "[map]
135+
key = 'value'";
136+
let expected = str![[r#"
137+
Document {
138+
map: {
139+
key: "value",
140+
},
141+
}
142+
143+
"#]];
144+
let result = crate::from_str::<Document>(input);
145+
assert_data_eq!(result.unwrap().to_debug(), expected);
146+
}
147+
}

crates/toml/tests/serde/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ macro_rules! t {
1212

1313
mod de_enum;
1414
mod de_errors;
15+
mod de_key;
1516
mod general;
1617
mod ser_enum;
18+
mod ser_key;
1719
mod ser_tables_last;
1820
mod ser_to_string;
1921
mod ser_to_string_pretty;

0 commit comments

Comments
 (0)