• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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