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