master
1const std = @import("std");
2const mem = std.mem;
3const testing = std.testing;
4const parse = @import("../parse.zig");
5
6const Node = parse.Node;
7const Tree = parse.Tree;
8
9test "explicit doc" {
10 const source =
11 \\--- !tapi-tbd
12 \\tbd-version: 4
13 \\abc-version: 5
14 \\...
15 ;
16
17 var tree = Tree.init(testing.allocator);
18 defer tree.deinit();
19 try tree.parse(source);
20
21 try testing.expectEqual(tree.docs.items.len, 1);
22
23 const doc = tree.docs.items[0].cast(Node.Doc).?;
24 try testing.expectEqual(doc.base.start, 0);
25 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
26
27 const directive = tree.tokens[doc.directive.?];
28 try testing.expectEqual(directive.id, .literal);
29 try testing.expectEqualStrings("tapi-tbd", tree.source[directive.start..directive.end]);
30
31 try testing.expect(doc.value != null);
32 try testing.expectEqual(doc.value.?.tag, .map);
33
34 const map = doc.value.?.cast(Node.Map).?;
35 try testing.expectEqual(map.base.start, 5);
36 try testing.expectEqual(map.base.end, 14);
37 try testing.expectEqual(map.values.items.len, 2);
38
39 {
40 const entry = map.values.items[0];
41
42 const key = tree.tokens[entry.key];
43 try testing.expectEqual(key.id, .literal);
44 try testing.expectEqualStrings("tbd-version", tree.source[key.start..key.end]);
45
46 const value = entry.value.?.cast(Node.Value).?;
47 const value_tok = tree.tokens[value.base.start];
48 try testing.expectEqual(value_tok.id, .literal);
49 try testing.expectEqualStrings("4", tree.source[value_tok.start..value_tok.end]);
50 }
51
52 {
53 const entry = map.values.items[1];
54
55 const key = tree.tokens[entry.key];
56 try testing.expectEqual(key.id, .literal);
57 try testing.expectEqualStrings("abc-version", tree.source[key.start..key.end]);
58
59 const value = entry.value.?.cast(Node.Value).?;
60 const value_tok = tree.tokens[value.base.start];
61 try testing.expectEqual(value_tok.id, .literal);
62 try testing.expectEqualStrings("5", tree.source[value_tok.start..value_tok.end]);
63 }
64}
65
66test "leaf in quotes" {
67 const source =
68 \\key1: no quotes
69 \\key2: 'single quoted'
70 \\key3: "double quoted"
71 ;
72
73 var tree = Tree.init(testing.allocator);
74 defer tree.deinit();
75 try tree.parse(source);
76
77 try testing.expectEqual(tree.docs.items.len, 1);
78
79 const doc = tree.docs.items[0].cast(Node.Doc).?;
80 try testing.expectEqual(doc.base.start, 0);
81 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
82 try testing.expect(doc.directive == null);
83
84 try testing.expect(doc.value != null);
85 try testing.expectEqual(doc.value.?.tag, .map);
86
87 const map = doc.value.?.cast(Node.Map).?;
88 try testing.expectEqual(map.base.start, 0);
89 try testing.expectEqual(map.base.end, tree.tokens.len - 2);
90 try testing.expectEqual(map.values.items.len, 3);
91
92 {
93 const entry = map.values.items[0];
94
95 const key = tree.tokens[entry.key];
96 try testing.expectEqual(key.id, .literal);
97 try testing.expectEqualStrings("key1", tree.source[key.start..key.end]);
98
99 const value = entry.value.?.cast(Node.Value).?;
100 const start = tree.tokens[value.base.start];
101 const end = tree.tokens[value.base.end];
102 try testing.expectEqual(start.id, .literal);
103 try testing.expectEqual(end.id, .literal);
104 try testing.expectEqualStrings("no quotes", tree.source[start.start..end.end]);
105 }
106}
107
108test "nested maps" {
109 const source =
110 \\key1:
111 \\ key1_1 : value1_1
112 \\ key1_2 : value1_2
113 \\key2 : value2
114 ;
115
116 var tree = Tree.init(testing.allocator);
117 defer tree.deinit();
118 try tree.parse(source);
119
120 try testing.expectEqual(tree.docs.items.len, 1);
121
122 const doc = tree.docs.items[0].cast(Node.Doc).?;
123 try testing.expectEqual(doc.base.start, 0);
124 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
125 try testing.expect(doc.directive == null);
126
127 try testing.expect(doc.value != null);
128 try testing.expectEqual(doc.value.?.tag, .map);
129
130 const map = doc.value.?.cast(Node.Map).?;
131 try testing.expectEqual(map.base.start, 0);
132 try testing.expectEqual(map.base.end, tree.tokens.len - 2);
133 try testing.expectEqual(map.values.items.len, 2);
134
135 {
136 const entry = map.values.items[0];
137
138 const key = tree.tokens[entry.key];
139 try testing.expectEqual(key.id, .literal);
140 try testing.expectEqualStrings("key1", tree.source[key.start..key.end]);
141
142 const nested_map = entry.value.?.cast(Node.Map).?;
143 try testing.expectEqual(nested_map.base.start, 4);
144 try testing.expectEqual(nested_map.base.end, 16);
145 try testing.expectEqual(nested_map.values.items.len, 2);
146
147 {
148 const nested_entry = nested_map.values.items[0];
149
150 const nested_key = tree.tokens[nested_entry.key];
151 try testing.expectEqual(nested_key.id, .literal);
152 try testing.expectEqualStrings("key1_1", tree.source[nested_key.start..nested_key.end]);
153
154 const nested_value = nested_entry.value.?.cast(Node.Value).?;
155 const nested_value_tok = tree.tokens[nested_value.base.start];
156 try testing.expectEqual(nested_value_tok.id, .literal);
157 try testing.expectEqualStrings(
158 "value1_1",
159 tree.source[nested_value_tok.start..nested_value_tok.end],
160 );
161 }
162
163 {
164 const nested_entry = nested_map.values.items[1];
165
166 const nested_key = tree.tokens[nested_entry.key];
167 try testing.expectEqual(nested_key.id, .literal);
168 try testing.expectEqualStrings("key1_2", tree.source[nested_key.start..nested_key.end]);
169
170 const nested_value = nested_entry.value.?.cast(Node.Value).?;
171 const nested_value_tok = tree.tokens[nested_value.base.start];
172 try testing.expectEqual(nested_value_tok.id, .literal);
173 try testing.expectEqualStrings(
174 "value1_2",
175 tree.source[nested_value_tok.start..nested_value_tok.end],
176 );
177 }
178 }
179
180 {
181 const entry = map.values.items[1];
182
183 const key = tree.tokens[entry.key];
184 try testing.expectEqual(key.id, .literal);
185 try testing.expectEqualStrings("key2", tree.source[key.start..key.end]);
186
187 const value = entry.value.?.cast(Node.Value).?;
188 const value_tok = tree.tokens[value.base.start];
189 try testing.expectEqual(value_tok.id, .literal);
190 try testing.expectEqualStrings("value2", tree.source[value_tok.start..value_tok.end]);
191 }
192}
193
194test "map of list of values" {
195 const source =
196 \\ints:
197 \\ - 0
198 \\ - 1
199 \\ - 2
200 ;
201 var tree = Tree.init(testing.allocator);
202 defer tree.deinit();
203 try tree.parse(source);
204
205 try testing.expectEqual(tree.docs.items.len, 1);
206
207 const doc = tree.docs.items[0].cast(Node.Doc).?;
208 try testing.expectEqual(doc.base.start, 0);
209 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
210
211 try testing.expect(doc.value != null);
212 try testing.expectEqual(doc.value.?.tag, .map);
213
214 const map = doc.value.?.cast(Node.Map).?;
215 try testing.expectEqual(map.base.start, 0);
216 try testing.expectEqual(map.base.end, tree.tokens.len - 2);
217 try testing.expectEqual(map.values.items.len, 1);
218
219 const entry = map.values.items[0];
220 const key = tree.tokens[entry.key];
221 try testing.expectEqual(key.id, .literal);
222 try testing.expectEqualStrings("ints", tree.source[key.start..key.end]);
223
224 const value = entry.value.?.cast(Node.List).?;
225 try testing.expectEqual(value.base.start, 4);
226 try testing.expectEqual(value.base.end, tree.tokens.len - 2);
227 try testing.expectEqual(value.values.items.len, 3);
228
229 {
230 const elem = value.values.items[0].cast(Node.Value).?;
231 const leaf = tree.tokens[elem.base.start];
232 try testing.expectEqual(leaf.id, .literal);
233 try testing.expectEqualStrings("0", tree.source[leaf.start..leaf.end]);
234 }
235
236 {
237 const elem = value.values.items[1].cast(Node.Value).?;
238 const leaf = tree.tokens[elem.base.start];
239 try testing.expectEqual(leaf.id, .literal);
240 try testing.expectEqualStrings("1", tree.source[leaf.start..leaf.end]);
241 }
242
243 {
244 const elem = value.values.items[2].cast(Node.Value).?;
245 const leaf = tree.tokens[elem.base.start];
246 try testing.expectEqual(leaf.id, .literal);
247 try testing.expectEqualStrings("2", tree.source[leaf.start..leaf.end]);
248 }
249}
250
251test "map of list of maps" {
252 const source =
253 \\key1:
254 \\- key2 : value2
255 \\- key3 : value3
256 \\- key4 : value4
257 ;
258
259 var tree = Tree.init(testing.allocator);
260 defer tree.deinit();
261 try tree.parse(source);
262
263 try testing.expectEqual(tree.docs.items.len, 1);
264
265 const doc = tree.docs.items[0].cast(Node.Doc).?;
266 try testing.expectEqual(doc.base.start, 0);
267 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
268
269 try testing.expect(doc.value != null);
270 try testing.expectEqual(doc.value.?.tag, .map);
271
272 const map = doc.value.?.cast(Node.Map).?;
273 try testing.expectEqual(map.base.start, 0);
274 try testing.expectEqual(map.base.end, tree.tokens.len - 2);
275 try testing.expectEqual(map.values.items.len, 1);
276
277 const entry = map.values.items[0];
278 const key = tree.tokens[entry.key];
279 try testing.expectEqual(key.id, .literal);
280 try testing.expectEqualStrings("key1", tree.source[key.start..key.end]);
281
282 const value = entry.value.?.cast(Node.List).?;
283 try testing.expectEqual(value.base.start, 3);
284 try testing.expectEqual(value.base.end, tree.tokens.len - 2);
285 try testing.expectEqual(value.values.items.len, 3);
286
287 {
288 const elem = value.values.items[0].cast(Node.Map).?;
289 const nested = elem.values.items[0];
290 const nested_key = tree.tokens[nested.key];
291 try testing.expectEqual(nested_key.id, .literal);
292 try testing.expectEqualStrings("key2", tree.source[nested_key.start..nested_key.end]);
293
294 const nested_v = nested.value.?.cast(Node.Value).?;
295 const leaf = tree.tokens[nested_v.base.start];
296 try testing.expectEqual(leaf.id, .literal);
297 try testing.expectEqualStrings("value2", tree.source[leaf.start..leaf.end]);
298 }
299
300 {
301 const elem = value.values.items[1].cast(Node.Map).?;
302 const nested = elem.values.items[0];
303 const nested_key = tree.tokens[nested.key];
304 try testing.expectEqual(nested_key.id, .literal);
305 try testing.expectEqualStrings("key3", tree.source[nested_key.start..nested_key.end]);
306
307 const nested_v = nested.value.?.cast(Node.Value).?;
308 const leaf = tree.tokens[nested_v.base.start];
309 try testing.expectEqual(leaf.id, .literal);
310 try testing.expectEqualStrings("value3", tree.source[leaf.start..leaf.end]);
311 }
312
313 {
314 const elem = value.values.items[2].cast(Node.Map).?;
315 const nested = elem.values.items[0];
316 const nested_key = tree.tokens[nested.key];
317 try testing.expectEqual(nested_key.id, .literal);
318 try testing.expectEqualStrings("key4", tree.source[nested_key.start..nested_key.end]);
319
320 const nested_v = nested.value.?.cast(Node.Value).?;
321 const leaf = tree.tokens[nested_v.base.start];
322 try testing.expectEqual(leaf.id, .literal);
323 try testing.expectEqualStrings("value4", tree.source[leaf.start..leaf.end]);
324 }
325}
326
327test "list of lists" {
328 const source =
329 \\- [name , hr, avg ]
330 \\- [Mark McGwire , 65, 0.278]
331 \\- [Sammy Sosa , 63, 0.288]
332 ;
333
334 var tree = Tree.init(testing.allocator);
335 defer tree.deinit();
336 try tree.parse(source);
337
338 try testing.expectEqual(tree.docs.items.len, 1);
339
340 const doc = tree.docs.items[0].cast(Node.Doc).?;
341 try testing.expectEqual(doc.base.start, 0);
342 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
343
344 try testing.expect(doc.value != null);
345 try testing.expectEqual(doc.value.?.tag, .list);
346
347 const list = doc.value.?.cast(Node.List).?;
348 try testing.expectEqual(list.base.start, 0);
349 try testing.expectEqual(list.base.end, tree.tokens.len - 2);
350 try testing.expectEqual(list.values.items.len, 3);
351
352 {
353 try testing.expectEqual(list.values.items[0].tag, .list);
354 const nested = list.values.items[0].cast(Node.List).?;
355 try testing.expectEqual(nested.values.items.len, 3);
356
357 {
358 try testing.expectEqual(nested.values.items[0].tag, .value);
359 const value = nested.values.items[0].cast(Node.Value).?;
360 const leaf = tree.tokens[value.base.start];
361 try testing.expectEqualStrings("name", tree.source[leaf.start..leaf.end]);
362 }
363
364 {
365 try testing.expectEqual(nested.values.items[1].tag, .value);
366 const value = nested.values.items[1].cast(Node.Value).?;
367 const leaf = tree.tokens[value.base.start];
368 try testing.expectEqualStrings("hr", tree.source[leaf.start..leaf.end]);
369 }
370
371 {
372 try testing.expectEqual(nested.values.items[2].tag, .value);
373 const value = nested.values.items[2].cast(Node.Value).?;
374 const leaf = tree.tokens[value.base.start];
375 try testing.expectEqualStrings("avg", tree.source[leaf.start..leaf.end]);
376 }
377 }
378
379 {
380 try testing.expectEqual(list.values.items[1].tag, .list);
381 const nested = list.values.items[1].cast(Node.List).?;
382 try testing.expectEqual(nested.values.items.len, 3);
383
384 {
385 try testing.expectEqual(nested.values.items[0].tag, .value);
386 const value = nested.values.items[0].cast(Node.Value).?;
387 const start = tree.tokens[value.base.start];
388 const end = tree.tokens[value.base.end];
389 try testing.expectEqualStrings("Mark McGwire", tree.source[start.start..end.end]);
390 }
391
392 {
393 try testing.expectEqual(nested.values.items[1].tag, .value);
394 const value = nested.values.items[1].cast(Node.Value).?;
395 const leaf = tree.tokens[value.base.start];
396 try testing.expectEqualStrings("65", tree.source[leaf.start..leaf.end]);
397 }
398
399 {
400 try testing.expectEqual(nested.values.items[2].tag, .value);
401 const value = nested.values.items[2].cast(Node.Value).?;
402 const leaf = tree.tokens[value.base.start];
403 try testing.expectEqualStrings("0.278", tree.source[leaf.start..leaf.end]);
404 }
405 }
406
407 {
408 try testing.expectEqual(list.values.items[2].tag, .list);
409 const nested = list.values.items[2].cast(Node.List).?;
410 try testing.expectEqual(nested.values.items.len, 3);
411
412 {
413 try testing.expectEqual(nested.values.items[0].tag, .value);
414 const value = nested.values.items[0].cast(Node.Value).?;
415 const start = tree.tokens[value.base.start];
416 const end = tree.tokens[value.base.end];
417 try testing.expectEqualStrings("Sammy Sosa", tree.source[start.start..end.end]);
418 }
419
420 {
421 try testing.expectEqual(nested.values.items[1].tag, .value);
422 const value = nested.values.items[1].cast(Node.Value).?;
423 const leaf = tree.tokens[value.base.start];
424 try testing.expectEqualStrings("63", tree.source[leaf.start..leaf.end]);
425 }
426
427 {
428 try testing.expectEqual(nested.values.items[2].tag, .value);
429 const value = nested.values.items[2].cast(Node.Value).?;
430 const leaf = tree.tokens[value.base.start];
431 try testing.expectEqualStrings("0.288", tree.source[leaf.start..leaf.end]);
432 }
433 }
434}
435
436test "inline list" {
437 const source =
438 \\[name , hr, avg ]
439 ;
440
441 var tree = Tree.init(testing.allocator);
442 defer tree.deinit();
443 try tree.parse(source);
444
445 try testing.expectEqual(tree.docs.items.len, 1);
446
447 const doc = tree.docs.items[0].cast(Node.Doc).?;
448 try testing.expectEqual(doc.base.start, 0);
449 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
450
451 try testing.expect(doc.value != null);
452 try testing.expectEqual(doc.value.?.tag, .list);
453
454 const list = doc.value.?.cast(Node.List).?;
455 try testing.expectEqual(list.base.start, 0);
456 try testing.expectEqual(list.base.end, tree.tokens.len - 2);
457 try testing.expectEqual(list.values.items.len, 3);
458
459 {
460 try testing.expectEqual(list.values.items[0].tag, .value);
461 const value = list.values.items[0].cast(Node.Value).?;
462 const leaf = tree.tokens[value.base.start];
463 try testing.expectEqualStrings("name", tree.source[leaf.start..leaf.end]);
464 }
465
466 {
467 try testing.expectEqual(list.values.items[1].tag, .value);
468 const value = list.values.items[1].cast(Node.Value).?;
469 const leaf = tree.tokens[value.base.start];
470 try testing.expectEqualStrings("hr", tree.source[leaf.start..leaf.end]);
471 }
472
473 {
474 try testing.expectEqual(list.values.items[2].tag, .value);
475 const value = list.values.items[2].cast(Node.Value).?;
476 const leaf = tree.tokens[value.base.start];
477 try testing.expectEqualStrings("avg", tree.source[leaf.start..leaf.end]);
478 }
479}
480
481test "inline list as mapping value" {
482 const source =
483 \\key : [
484 \\ name ,
485 \\ hr, avg ]
486 ;
487
488 var tree = Tree.init(testing.allocator);
489 defer tree.deinit();
490 try tree.parse(source);
491
492 try testing.expectEqual(tree.docs.items.len, 1);
493
494 const doc = tree.docs.items[0].cast(Node.Doc).?;
495 try testing.expectEqual(doc.base.start, 0);
496 try testing.expectEqual(doc.base.end, tree.tokens.len - 2);
497
498 try testing.expect(doc.value != null);
499 try testing.expectEqual(doc.value.?.tag, .map);
500
501 const map = doc.value.?.cast(Node.Map).?;
502 try testing.expectEqual(map.base.start, 0);
503 try testing.expectEqual(map.base.end, tree.tokens.len - 2);
504 try testing.expectEqual(map.values.items.len, 1);
505
506 const entry = map.values.items[0];
507 const key = tree.tokens[entry.key];
508 try testing.expectEqual(key.id, .literal);
509 try testing.expectEqualStrings("key", tree.source[key.start..key.end]);
510
511 const list = entry.value.?.cast(Node.List).?;
512 try testing.expectEqual(list.base.start, 4);
513 try testing.expectEqual(list.base.end, tree.tokens.len - 2);
514 try testing.expectEqual(list.values.items.len, 3);
515
516 {
517 try testing.expectEqual(list.values.items[0].tag, .value);
518 const value = list.values.items[0].cast(Node.Value).?;
519 const leaf = tree.tokens[value.base.start];
520 try testing.expectEqualStrings("name", tree.source[leaf.start..leaf.end]);
521 }
522
523 {
524 try testing.expectEqual(list.values.items[1].tag, .value);
525 const value = list.values.items[1].cast(Node.Value).?;
526 const leaf = tree.tokens[value.base.start];
527 try testing.expectEqualStrings("hr", tree.source[leaf.start..leaf.end]);
528 }
529
530 {
531 try testing.expectEqual(list.values.items[2].tag, .value);
532 const value = list.values.items[2].cast(Node.Value).?;
533 const leaf = tree.tokens[value.base.start];
534 try testing.expectEqualStrings("avg", tree.source[leaf.start..leaf.end]);
535 }
536}
537
538fn parseSuccess(comptime source: []const u8) !void {
539 var tree = Tree.init(testing.allocator);
540 defer tree.deinit();
541 try tree.parse(source);
542}
543
544fn parseError(comptime source: []const u8, err: parse.ParseError) !void {
545 var tree = Tree.init(testing.allocator);
546 defer tree.deinit();
547 try testing.expectError(err, tree.parse(source));
548}
549
550test "empty doc with spaces and comments" {
551 try parseSuccess(
552 \\
553 \\
554 \\ # this is a comment in a weird place
555 \\# and this one is too
556 );
557}
558
559test "comment between --- and ! in document start" {
560 try parseError(
561 \\--- # what is it?
562 \\!
563 , error.UnexpectedToken);
564}
565
566test "correct doc start with tag" {
567 try parseSuccess(
568 \\--- !some-tag
569 \\
570 );
571}
572
573test "doc close without explicit doc open" {
574 try parseError(
575 \\
576 \\
577 \\# something cool
578 \\...
579 , error.UnexpectedToken);
580}
581
582test "doc open and close are ok" {
583 try parseSuccess(
584 \\---
585 \\# first doc
586 \\
587 \\
588 \\---
589 \\# second doc
590 \\
591 \\
592 \\...
593 );
594}
595
596test "doc with a single string is ok" {
597 try parseSuccess(
598 \\a string of some sort
599 \\
600 );
601}
602
603test "explicit doc with a single string is ok" {
604 try parseSuccess(
605 \\--- !anchor
606 \\# nothing to see here except one string
607 \\ # not a lot to go on with
608 \\a single string
609 \\...
610 );
611}
612
613test "doc with two string is bad" {
614 try parseError(
615 \\first
616 \\second
617 \\# this should fail already
618 , error.UnexpectedToken);
619}
620
621test "single quote string can have new lines" {
622 try parseSuccess(
623 \\'what is this
624 \\ thing?'
625 );
626}
627
628test "single quote string on one line is fine" {
629 try parseSuccess(
630 \\'here''s an apostrophe'
631 );
632}
633
634test "double quote string can have new lines" {
635 try parseSuccess(
636 \\"what is this
637 \\ thing?"
638 );
639}
640
641test "double quote string on one line is fine" {
642 try parseSuccess(
643 \\"a newline\nand a\ttab"
644 );
645}
646
647test "map with key and value literals" {
648 try parseSuccess(
649 \\key1: val1
650 \\key2 : val2
651 );
652}
653
654test "map of maps" {
655 try parseSuccess(
656 \\
657 \\# the first key
658 \\key1:
659 \\ # the first subkey
660 \\ key1_1: 0
661 \\ key1_2: 1
662 \\# the second key
663 \\key2:
664 \\ key2_1: -1
665 \\ key2_2: -2
666 \\# the end of map
667 );
668}
669
670test "map value indicator needs to be on the same line" {
671 try parseError(
672 \\a
673 \\ : b
674 , error.UnexpectedToken);
675}
676
677test "value needs to be indented" {
678 try parseError(
679 \\a:
680 \\b
681 , error.MalformedYaml);
682}
683
684test "comment between a key and a value is fine" {
685 try parseSuccess(
686 \\a:
687 \\ # this is a value
688 \\ b
689 );
690}
691
692test "simple list" {
693 try parseSuccess(
694 \\# first el
695 \\- a
696 \\# second el
697 \\- b
698 \\# third el
699 \\- c
700 );
701}
702
703test "list indentation matters" {
704 try parseSuccess(
705 \\ - a
706 \\- b
707 );
708
709 try parseSuccess(
710 \\- a
711 \\ - b
712 );
713}
714
715test "unindented list is fine too" {
716 try parseSuccess(
717 \\a:
718 \\- 0
719 \\- 1
720 );
721}
722
723test "empty values in a map" {
724 try parseSuccess(
725 \\a:
726 \\b:
727 \\- 0
728 );
729}
730
731test "weirdly nested map of maps of lists" {
732 try parseSuccess(
733 \\a:
734 \\ b:
735 \\ - 0
736 \\ - 1
737 );
738}
739
740test "square brackets denote a list" {
741 try parseSuccess(
742 \\[ a,
743 \\ b, c ]
744 );
745}
746
747test "empty list" {
748 try parseSuccess(
749 \\[ ]
750 );
751}
752
753test "comment within a bracketed list is an error" {
754 try parseError(
755 \\[ # something
756 \\]
757 , error.MalformedYaml);
758}
759
760test "mixed ints with floats in a list" {
761 try parseSuccess(
762 \\[0, 1.0]
763 );
764}