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