1 use snapbox::assert_data_eq;
2 use snapbox::prelude::*;
3 use snapbox::str;
4
5 macro_rules! bad {
6 ($toml:expr, $msg:expr) => {
7 match $toml.parse::<toml_edit::DocumentMut>() {
8 Ok(s) => panic!("parsed to: {:#?}", s),
9 Err(e) => assert_data_eq!(e.to_string(), $msg.raw()),
10 }
11 };
12 }
13
14 #[test]
times()15 fn times() {
16 fn dogood(s: &str, serialized: &str) {
17 let to_parse = format!("foo = {}", s);
18 let document = to_parse.parse::<toml_edit::DocumentMut>().unwrap();
19 assert_eq!(
20 document["foo"].as_datetime().unwrap().to_string(),
21 serialized
22 );
23 }
24 fn good(s: &str) {
25 dogood(s, s);
26 dogood(&s.replace('T', " "), s);
27 dogood(&s.replace('T', "t"), s);
28 dogood(&s.replace('Z', "z"), s);
29 }
30
31 good("1997-09-09T09:09:09Z");
32 good("1997-09-09T09:09:09+09:09");
33 good("1997-09-09T09:09:09-09:09");
34 good("1997-09-09T09:09:09");
35 good("1997-09-09");
36 dogood("1997-09-09 ", "1997-09-09");
37 dogood("1997-09-09 # comment", "1997-09-09");
38 good("09:09:09");
39 good("1997-09-09T09:09:09.09Z");
40 good("1997-09-09T09:09:09.09+09:09");
41 good("1997-09-09T09:09:09.09-09:09");
42 good("1997-09-09T09:09:09.09");
43 good("09:09:09.09");
44 }
45
46 #[test]
bad_times()47 fn bad_times() {
48 bad!(
49 "foo = 199-09-09",
50 str![[r#"
51 TOML parse error at line 1, column 10
52 |
53 1 | foo = 199-09-09
54 | ^
55 expected newline, `#`
56
57 "#]]
58 );
59 bad!(
60 "foo = 199709-09",
61 str![[r#"
62 TOML parse error at line 1, column 13
63 |
64 1 | foo = 199709-09
65 | ^
66 expected newline, `#`
67
68 "#]]
69 );
70 bad!(
71 "foo = 1997-9-09",
72 str![[r#"
73 TOML parse error at line 1, column 12
74 |
75 1 | foo = 1997-9-09
76 | ^
77 invalid date-time
78
79 "#]]
80 );
81 bad!(
82 "foo = 1997-09-9",
83 str![[r#"
84 TOML parse error at line 1, column 15
85 |
86 1 | foo = 1997-09-9
87 | ^
88 invalid date-time
89
90 "#]]
91 );
92 bad!(
93 "foo = 1997-09-0909:09:09",
94 str![[r#"
95 TOML parse error at line 1, column 17
96 |
97 1 | foo = 1997-09-0909:09:09
98 | ^
99 expected newline, `#`
100
101 "#]]
102 );
103 bad!(
104 "foo = 1997-09-09T09:09:09.",
105 str![[r#"
106 TOML parse error at line 1, column 26
107 |
108 1 | foo = 1997-09-09T09:09:09.
109 | ^
110 expected newline, `#`
111
112 "#]]
113 );
114 bad!(
115 "foo = T",
116 str![[r#"
117 TOML parse error at line 1, column 7
118 |
119 1 | foo = T
120 | ^
121 invalid string
122 expected `"`, `'`
123
124 "#]]
125 );
126 bad!(
127 "foo = T.",
128 str![[r#"
129 TOML parse error at line 1, column 7
130 |
131 1 | foo = T.
132 | ^
133 invalid string
134 expected `"`, `'`
135
136 "#]]
137 );
138 bad!(
139 "foo = TZ",
140 str![[r#"
141 TOML parse error at line 1, column 7
142 |
143 1 | foo = TZ
144 | ^
145 invalid string
146 expected `"`, `'`
147
148 "#]]
149 );
150 bad!(
151 "foo = 1997-09-09T09:09:09.09+",
152 str![[r#"
153 TOML parse error at line 1, column 30
154 |
155 1 | foo = 1997-09-09T09:09:09.09+
156 | ^
157 invalid time offset
158
159 "#]]
160 );
161 bad!(
162 "foo = 1997-09-09T09:09:09.09+09",
163 str![[r#"
164 TOML parse error at line 1, column 32
165 |
166 1 | foo = 1997-09-09T09:09:09.09+09
167 | ^
168 invalid time offset
169
170 "#]]
171 );
172 bad!(
173 "foo = 1997-09-09T09:09:09.09+09:9",
174 str![[r#"
175 TOML parse error at line 1, column 33
176 |
177 1 | foo = 1997-09-09T09:09:09.09+09:9
178 | ^
179 invalid time offset
180
181 "#]]
182 );
183 bad!(
184 "foo = 1997-09-09T09:09:09.09+0909",
185 str![[r#"
186 TOML parse error at line 1, column 32
187 |
188 1 | foo = 1997-09-09T09:09:09.09+0909
189 | ^
190 invalid time offset
191
192 "#]]
193 );
194 bad!(
195 "foo = 1997-09-09T09:09:09.09-",
196 str![[r#"
197 TOML parse error at line 1, column 30
198 |
199 1 | foo = 1997-09-09T09:09:09.09-
200 | ^
201 invalid time offset
202
203 "#]]
204 );
205 bad!(
206 "foo = 1997-09-09T09:09:09.09-09",
207 str![[r#"
208 TOML parse error at line 1, column 32
209 |
210 1 | foo = 1997-09-09T09:09:09.09-09
211 | ^
212 invalid time offset
213
214 "#]]
215 );
216 bad!(
217 "foo = 1997-09-09T09:09:09.09-09:9",
218 str![[r#"
219 TOML parse error at line 1, column 33
220 |
221 1 | foo = 1997-09-09T09:09:09.09-09:9
222 | ^
223 invalid time offset
224
225 "#]]
226 );
227 bad!(
228 "foo = 1997-09-09T09:09:09.09-0909",
229 str![[r#"
230 TOML parse error at line 1, column 32
231 |
232 1 | foo = 1997-09-09T09:09:09.09-0909
233 | ^
234 invalid time offset
235
236 "#]]
237 );
238
239 bad!(
240 "foo = 1997-00-09T09:09:09.09Z",
241 str![[r#"
242 TOML parse error at line 1, column 12
243 |
244 1 | foo = 1997-00-09T09:09:09.09Z
245 | ^
246 invalid date-time
247 value is out of range
248
249 "#]]
250 );
251 bad!(
252 "foo = 1997-09-00T09:09:09.09Z",
253 str![[r#"
254 TOML parse error at line 1, column 15
255 |
256 1 | foo = 1997-09-00T09:09:09.09Z
257 | ^
258 invalid date-time
259 value is out of range
260
261 "#]]
262 );
263 bad!(
264 "foo = 1997-09-09T30:09:09.09Z",
265 str![[r#"
266 TOML parse error at line 1, column 17
267 |
268 1 | foo = 1997-09-09T30:09:09.09Z
269 | ^
270 expected newline, `#`
271
272 "#]]
273 );
274 bad!(
275 "foo = 1997-09-09T12:69:09.09Z",
276 str![[r#"
277 TOML parse error at line 1, column 21
278 |
279 1 | foo = 1997-09-09T12:69:09.09Z
280 | ^
281 invalid date-time
282 value is out of range
283
284 "#]]
285 );
286 bad!(
287 "foo = 1997-09-09T12:09:69.09Z",
288 str![[r#"
289 TOML parse error at line 1, column 24
290 |
291 1 | foo = 1997-09-09T12:09:69.09Z
292 | ^
293 invalid date-time
294 value is out of range
295
296 "#]]
297 );
298 }
299