authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-08-25 01:50:55 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-08-25 01:50:55 -07:00
logc416992e11dc37d3f8ec7d27e605526bb6b04cd2
treeeb76fc8d1a0e12e17606f19f03e24ef34acdd82c
parentfa2b7fe08a7737c859ba2bef0bb3595b25a0ba07

add tests from yaml-test-suite


5 files changed, 426 insertions(+), 26 deletions(-)

build.zig+4
...@@ -15,6 +15,10 @@ pub fn build(b: *std.Build) void {...@@ -15,6 +15,10 @@ pub fn build(b: *std.Build) void {
15 tests.use_llvm = !disable_llvm;15 tests.use_llvm = !disable_llvm;
16 tests.use_lld = !disable_llvm;16 tests.use_lld = !disable_llvm;
1717
18 const build_options = b.addOptions();
19 build_options.addOption([:0]const u8, "yamltestsuite_root", deps.dirs._hi7zwl8ps6jd);
20 tests.root_module.addImport("build_options", build_options.createModule());
21
18 const test_step = b.step("test", "Run all library tests");22 const test_step = b.step("test", "Run all library tests");
19 const tests_run = b.addRunArtifact(tests);23 const tests_run = b.addRunArtifact(tests);
20 tests_run.has_side_effects = true;24 tests_run.has_side_effects = true;
licenses.txt+13
...@@ -1,6 +1,19 @@...@@ -1,6 +1,19 @@
1MIT:1MIT:
2= https://spdx.org/licenses/MIT2= https://spdx.org/licenses/MIT
3- This3- This
4- git https://github.com/nektro/zig-errno
4- git https://github.com/nektro/zig-expect5- git https://github.com/nektro/zig-expect
5- git https://github.com/nektro/zig-extras6- git https://github.com/nektro/zig-extras
7- git https://github.com/nektro/zig-libc
8- git https://github.com/nektro/zig-sys-libc
9- git https://github.com/nektro/zig-time
6- git https://github.com/yaml/libyaml10- git https://github.com/yaml/libyaml
11- git https://github.com/yaml/yaml-test-suite
12
13MPL-2.0:
14= https://spdx.org/licenses/MPL-2.0
15- git https://github.com/nektro/zig-nfs
16- git https://github.com/nektro/zig-nio
17
18Unspecified:
19- system_lib c
test.zig+367-3
...@@ -1,12 +1,376 @@...@@ -1,12 +1,376 @@
1const std = @import("std");1const std = @import("std");
2const yaml = @import("yaml");2const yaml = @import("yaml");
3const expect = @import("expect").expect;3const expect = @import("expect").expect;
44const nfs = @import("nfs");
5const file = @embedFile("./zigmod.yml");5const build_options = @import("build_options");
6const yamltestsuite_root = build_options.yamltestsuite_root;
67
7test {8test {
8 const doc = try yaml.parse(std.testing.allocator, file);9 const doc = try yaml.parse(std.testing.allocator, @embedFile("./zigmod.yml"));
9 defer doc.deinit(std.testing.allocator);10 defer doc.deinit(std.testing.allocator);
1011
11 try expect(doc.mapping.get_string("id").?).toEqualString("g982zq6e8wsvnmduerpbf8787hu85brugmngn8wf");12 try expect(doc.mapping.get_string("id").?).toEqualString("g982zq6e8wsvnmduerpbf8787hu85brugmngn8wf");
12}13}
14
15fn parseTest(comptime basename: [:0]const u8) !void {
16 const alloc = std.testing.allocator;
17 const file = try nfs.cwd().openFile(yamltestsuite_root ++ "/src/" ++ basename, .{});
18 defer file.close();
19 const input = try file.readToEndAlloc(alloc, 1024 * 1024, null);
20 defer alloc.free(input);
21 const doc = try yaml.parse(alloc, input);
22 defer doc.deinit(alloc);
23}
24
25// zig fmt: off
26test { try parseTest("229Q.yaml"); }
27test { try parseTest("236B.yaml"); }
28test { try parseTest("26DV.yaml"); }
29test { try parseTest("27NA.yaml"); }
30// test { try parseTest("2AUY.yaml"); }
31test { try parseTest("2CMS.yaml"); }
32test { try parseTest("2EBW.yaml"); }
33test { try parseTest("2G84.yaml"); }
34test { try parseTest("2JQS.yaml"); }
35test { try parseTest("2LFX.yaml"); }
36test { try parseTest("2SXE.yaml"); }
37test { try parseTest("2XXW.yaml"); }
38test { try parseTest("33X3.yaml"); }
39test { try parseTest("35KP.yaml"); }
40test { try parseTest("36F6.yaml"); }
41test { try parseTest("3ALJ.yaml"); }
42test { try parseTest("3GZX.yaml"); }
43test { try parseTest("3HFZ.yaml"); }
44test { try parseTest("3MYT.yaml"); }
45test { try parseTest("3R3P.yaml"); }
46test { try parseTest("3RLN.yaml"); }
47test { try parseTest("3UYS.yaml"); }
48test { try parseTest("4ABK.yaml"); }
49test { try parseTest("4CQQ.yaml"); }
50test { try parseTest("4EJS.yaml"); }
51test { try parseTest("4FJ6.yaml"); }
52test { try parseTest("4GC6.yaml"); }
53test { try parseTest("4H7K.yaml"); }
54test { try parseTest("4HVU.yaml"); }
55test { try parseTest("4JVG.yaml"); }
56test { try parseTest("4MUZ.yaml"); }
57test { try parseTest("4Q9F.yaml"); }
58test { try parseTest("4QFQ.yaml"); }
59// test { try parseTest("4RWC.yaml"); }
60test { try parseTest("4UYU.yaml"); }
61test { try parseTest("4V8U.yaml"); }
62test { try parseTest("4WA9.yaml"); }
63test { try parseTest("4ZYM.yaml"); }
64test { try parseTest("52DL.yaml"); }
65test { try parseTest("54T7.yaml"); }
66test { try parseTest("55WF.yaml"); }
67test { try parseTest("565N.yaml"); }
68test { try parseTest("57H4.yaml"); }
69test { try parseTest("58MP.yaml"); }
70test { try parseTest("5BVJ.yaml"); }
71test { try parseTest("5C5M.yaml"); }
72test { try parseTest("5GBF.yaml"); }
73test { try parseTest("5KJE.yaml"); }
74test { try parseTest("5LLU.yaml"); }
75test { try parseTest("5MUD.yaml"); }
76test { try parseTest("5NYZ.yaml"); }
77test { try parseTest("5T43.yaml"); }
78test { try parseTest("5TRB.yaml"); }
79test { try parseTest("5TYM.yaml"); }
80test { try parseTest("5U3A.yaml"); }
81test { try parseTest("5WE3.yaml"); }
82test { try parseTest("62EZ.yaml"); }
83test { try parseTest("652Z.yaml"); }
84test { try parseTest("65WH.yaml"); }
85test { try parseTest("6BCT.yaml"); }
86test { try parseTest("6BFJ.yaml"); }
87test { try parseTest("6CA3.yaml"); }
88test { try parseTest("6CK3.yaml"); }
89test { try parseTest("6FWR.yaml"); }
90test { try parseTest("6H3V.yaml"); }
91// test { try parseTest("6HB6.yaml"); }
92test { try parseTest("6JQW.yaml"); }
93test { try parseTest("6JTT.yaml"); }
94test { try parseTest("6JWB.yaml"); }
95test { try parseTest("6KGN.yaml"); }
96test { try parseTest("6LVF.yaml"); }
97test { try parseTest("6M2F.yaml"); }
98test { try parseTest("6PBE.yaml"); }
99test { try parseTest("6S55.yaml"); }
100test { try parseTest("6SLA.yaml"); }
101test { try parseTest("6VJK.yaml"); }
102test { try parseTest("6WLZ.yaml"); }
103test { try parseTest("6WPF.yaml"); }
104test { try parseTest("6XDY.yaml"); }
105test { try parseTest("6ZKB.yaml"); }
106test { try parseTest("735Y.yaml"); }
107test { try parseTest("74H7.yaml"); }
108test { try parseTest("753E.yaml"); }
109test { try parseTest("7A4E.yaml"); }
110test { try parseTest("7BMT.yaml"); }
111test { try parseTest("7BUB.yaml"); }
112test { try parseTest("7FWL.yaml"); }
113test { try parseTest("7LBH.yaml"); }
114test { try parseTest("7MNF.yaml"); }
115test { try parseTest("7T8X.yaml"); }
116test { try parseTest("7TMG.yaml"); }
117test { try parseTest("7W2P.yaml"); }
118test { try parseTest("7Z25.yaml"); }
119test { try parseTest("7ZZ5.yaml"); }
120test { try parseTest("82AN.yaml"); }
121test { try parseTest("87E4.yaml"); }
122test { try parseTest("8CWC.yaml"); }
123// test { try parseTest("8G76.yaml"); }
124test { try parseTest("8KB6.yaml"); }
125test { try parseTest("8MK2.yaml"); }
126test { try parseTest("8QBE.yaml"); }
127test { try parseTest("8UDB.yaml"); }
128test { try parseTest("8XDJ.yaml"); }
129test { try parseTest("8XYN.yaml"); }
130// test { try parseTest("93JH.yaml"); }
131test { try parseTest("93WF.yaml"); }
132test { try parseTest("96L6.yaml"); }
133test { try parseTest("96NN.yaml"); }
134test { try parseTest("98YD.yaml"); }
135test { try parseTest("9BXH.yaml"); }
136test { try parseTest("9C9N.yaml"); }
137test { try parseTest("9CWY.yaml"); }
138test { try parseTest("9DXL.yaml"); }
139test { try parseTest("9FMG.yaml"); }
140test { try parseTest("9HCY.yaml"); }
141test { try parseTest("9J7A.yaml"); }
142test { try parseTest("9JBA.yaml"); }
143test { try parseTest("9KAX.yaml"); }
144test { try parseTest("9KBC.yaml"); }
145test { try parseTest("9MAG.yaml"); }
146test { try parseTest("9MMA.yaml"); }
147test { try parseTest("9MMW.yaml"); }
148test { try parseTest("9MQT.yaml"); }
149test { try parseTest("9SA2.yaml"); }
150test { try parseTest("9SHH.yaml"); }
151test { try parseTest("9TFX.yaml"); }
152test { try parseTest("9U5K.yaml"); }
153test { try parseTest("9WXW.yaml"); }
154test { try parseTest("9YRD.yaml"); }
155test { try parseTest("A2M4.yaml"); }
156test { try parseTest("A6F9.yaml"); }
157test { try parseTest("A984.yaml"); }
158test { try parseTest("AB8U.yaml"); }
159test { try parseTest("AVM7.yaml"); }
160test { try parseTest("AZ63.yaml"); }
161test { try parseTest("AZW3.yaml"); }
162test { try parseTest("B3HG.yaml"); }
163test { try parseTest("B63P.yaml"); }
164test { try parseTest("BD7L.yaml"); }
165test { try parseTest("BEC7.yaml"); }
166test { try parseTest("BF9H.yaml"); }
167test { try parseTest("BS4K.yaml"); }
168test { try parseTest("BU8L.yaml"); }
169test { try parseTest("C2DT.yaml"); }
170test { try parseTest("C2SP.yaml"); }
171test { try parseTest("C4HZ.yaml"); }
172test { try parseTest("CC74.yaml"); }
173test { try parseTest("CFD4.yaml"); }
174test { try parseTest("CML9.yaml"); }
175test { try parseTest("CN3R.yaml"); }
176test { try parseTest("CPZ3.yaml"); }
177test { try parseTest("CQ3W.yaml"); }
178test { try parseTest("CT4Q.yaml"); }
179test { try parseTest("CTN5.yaml"); }
180test { try parseTest("CUP7.yaml"); }
181test { try parseTest("CVW2.yaml"); }
182test { try parseTest("CXX2.yaml"); }
183test { try parseTest("D49Q.yaml"); }
184test { try parseTest("D83L.yaml"); }
185test { try parseTest("D88J.yaml"); }
186test { try parseTest("D9TU.yaml"); }
187test { try parseTest("DBG4.yaml"); }
188test { try parseTest("DC7X.yaml"); }
189test { try parseTest("DE56.yaml"); }
190test { try parseTest("DFF7.yaml"); }
191test { try parseTest("DHP8.yaml"); }
192test { try parseTest("DK3J.yaml"); }
193test { try parseTest("DK4H.yaml"); }
194// test { try parseTest("DK95.yaml"); }
195test { try parseTest("DMG6.yaml"); }
196test { try parseTest("DWX9.yaml"); }
197test { try parseTest("E76Z.yaml"); }
198test { try parseTest("EB22.yaml"); }
199test { try parseTest("EHF6.yaml"); }
200test { try parseTest("EW3V.yaml"); }
201test { try parseTest("EX5H.yaml"); }
202test { try parseTest("EXG3.yaml"); }
203// test { try parseTest("F2C7.yaml"); }
204test { try parseTest("F3CP.yaml"); }
205test { try parseTest("F6MC.yaml"); }
206// test { try parseTest("F8F9.yaml"); }
207test { try parseTest("FBC9.yaml"); }
208test { try parseTest("FH7J.yaml"); }
209test { try parseTest("FP8R.yaml"); }
210test { try parseTest("FQ7F.yaml"); }
211test { try parseTest("FRK4.yaml"); }
212test { try parseTest("FTA2.yaml"); }
213test { try parseTest("FUP4.yaml"); }
214test { try parseTest("G4RS.yaml"); }
215test { try parseTest("G5U8.yaml"); }
216test { try parseTest("G7JE.yaml"); }
217test { try parseTest("G992.yaml"); }
218test { try parseTest("G9HC.yaml"); }
219test { try parseTest("GDY7.yaml"); }
220test { try parseTest("GH63.yaml"); }
221test { try parseTest("GT5M.yaml"); }
222test { try parseTest("H2RW.yaml"); }
223test { try parseTest("H3Z8.yaml"); }
224test { try parseTest("H7J7.yaml"); }
225test { try parseTest("H7TQ.yaml"); }
226test { try parseTest("HM87.yaml"); }
227test { try parseTest("HMK4.yaml"); }
228test { try parseTest("HMQ5.yaml"); }
229test { try parseTest("HRE5.yaml"); }
230test { try parseTest("HS5T.yaml"); }
231test { try parseTest("HU3P.yaml"); }
232test { try parseTest("HWV9.yaml"); }
233test { try parseTest("J3BT.yaml"); }
234test { try parseTest("J5UC.yaml"); }
235test { try parseTest("J7PZ.yaml"); }
236test { try parseTest("J7VC.yaml"); }
237test { try parseTest("J9HZ.yaml"); }
238test { try parseTest("JEF9.yaml"); }
239test { try parseTest("JHB9.yaml"); }
240test { try parseTest("JKF3.yaml"); }
241test { try parseTest("JQ4R.yaml"); }
242test { try parseTest("JR7V.yaml"); }
243test { try parseTest("JS2J.yaml"); }
244test { try parseTest("JTV5.yaml"); }
245test { try parseTest("JY7Z.yaml"); }
246test { try parseTest("K3WX.yaml"); }
247test { try parseTest("K4SU.yaml"); }
248test { try parseTest("K527.yaml"); }
249test { try parseTest("K54U.yaml"); }
250test { try parseTest("K858.yaml"); }
251test { try parseTest("KH5V.yaml"); }
252test { try parseTest("KK5P.yaml"); }
253test { try parseTest("KMK3.yaml"); }
254test { try parseTest("KS4U.yaml"); }
255test { try parseTest("KSS4.yaml"); }
256test { try parseTest("L24T.yaml"); }
257test { try parseTest("L383.yaml"); }
258test { try parseTest("L94M.yaml"); }
259test { try parseTest("L9U5.yaml"); }
260test { try parseTest("LE5A.yaml"); }
261test { try parseTest("LHL4.yaml"); }
262test { try parseTest("LP6E.yaml"); }
263test { try parseTest("LQZ7.yaml"); }
264test { try parseTest("LX3P.yaml"); }
265test { try parseTest("M29M.yaml"); }
266test { try parseTest("M2N8.yaml"); }
267test { try parseTest("M5C3.yaml"); }
268test { try parseTest("M5DY.yaml"); }
269test { try parseTest("M6YH.yaml"); }
270test { try parseTest("M7A3.yaml"); }
271test { try parseTest("M7NX.yaml"); }
272test { try parseTest("M9B4.yaml"); }
273test { try parseTest("MJS9.yaml"); }
274test { try parseTest("MUS6.yaml"); }
275test { try parseTest("MXS3.yaml"); }
276test { try parseTest("MYW6.yaml"); }
277test { try parseTest("MZX3.yaml"); }
278test { try parseTest("N4JP.yaml"); }
279test { try parseTest("N782.yaml"); }
280test { try parseTest("NAT4.yaml"); }
281test { try parseTest("NB6Z.yaml"); }
282test { try parseTest("NHX8.yaml"); }
283test { try parseTest("NJ66.yaml"); }
284test { try parseTest("NKF9.yaml"); }
285test { try parseTest("NP9H.yaml"); }
286test { try parseTest("P2AD.yaml"); }
287test { try parseTest("P2EQ.yaml"); }
288test { try parseTest("P76L.yaml"); }
289test { try parseTest("P94K.yaml"); }
290test { try parseTest("PBJ2.yaml"); }
291test { try parseTest("PRH3.yaml"); }
292test { try parseTest("PUW8.yaml"); }
293test { try parseTest("PW8X.yaml"); }
294test { try parseTest("Q4CL.yaml"); }
295test { try parseTest("Q5MG.yaml"); }
296test { try parseTest("Q88A.yaml"); }
297test { try parseTest("Q8AD.yaml"); }
298test { try parseTest("Q9WF.yaml"); }
299test { try parseTest("QB6E.yaml"); }
300test { try parseTest("QF4Y.yaml"); }
301test { try parseTest("QLJ7.yaml"); }
302test { try parseTest("QT73.yaml"); }
303test { try parseTest("R4YG.yaml"); }
304test { try parseTest("R52L.yaml"); }
305test { try parseTest("RHX7.yaml"); }
306test { try parseTest("RLU9.yaml"); }
307test { try parseTest("RR7F.yaml"); }
308test { try parseTest("RTP8.yaml"); }
309test { try parseTest("RXY3.yaml"); }
310test { try parseTest("RZP5.yaml"); }
311test { try parseTest("RZT7.yaml"); }
312test { try parseTest("S3PD.yaml"); }
313test { try parseTest("S4GJ.yaml"); }
314test { try parseTest("S4JQ.yaml"); }
315test { try parseTest("S4T7.yaml"); }
316test { try parseTest("S7BG.yaml"); }
317test { try parseTest("S98Z.yaml"); }
318test { try parseTest("S9E8.yaml"); }
319test { try parseTest("SBG9.yaml"); }
320test { try parseTest("SF5V.yaml"); }
321test { try parseTest("SKE5.yaml"); }
322test { try parseTest("SM9W.yaml"); }
323test { try parseTest("SR86.yaml"); }
324test { try parseTest("SSW6.yaml"); }
325test { try parseTest("SU5Z.yaml"); }
326test { try parseTest("SU74.yaml"); }
327test { try parseTest("SY6V.yaml"); }
328test { try parseTest("SYW4.yaml"); }
329test { try parseTest("T26H.yaml"); }
330test { try parseTest("T4YY.yaml"); }
331test { try parseTest("T5N4.yaml"); }
332test { try parseTest("T833.yaml"); }
333test { try parseTest("TD5N.yaml"); }
334test { try parseTest("TE2A.yaml"); }
335test { try parseTest("TL85.yaml"); }
336test { try parseTest("TS54.yaml"); }
337test { try parseTest("U3C3.yaml"); }
338test { try parseTest("U3XV.yaml"); }
339test { try parseTest("U44R.yaml"); }
340test { try parseTest("U99R.yaml"); }
341test { try parseTest("U9NS.yaml"); }
342test { try parseTest("UDM2.yaml"); }
343test { try parseTest("UDR7.yaml"); }
344test { try parseTest("UGM3.yaml"); }
345test { try parseTest("UKK6.yaml"); }
346test { try parseTest("UT92.yaml"); }
347test { try parseTest("UV7Q.yaml"); }
348test { try parseTest("V55R.yaml"); }
349test { try parseTest("V9D5.yaml"); }
350test { try parseTest("VJP3.yaml"); }
351test { try parseTest("W42U.yaml"); }
352test { try parseTest("W4TN.yaml"); }
353test { try parseTest("W5VH.yaml"); }
354test { try parseTest("W9L4.yaml"); }
355test { try parseTest("WZ62.yaml"); }
356test { try parseTest("X38W.yaml"); }
357test { try parseTest("X4QW.yaml"); }
358test { try parseTest("X8DW.yaml"); }
359test { try parseTest("XLQ9.yaml"); }
360test { try parseTest("XV9V.yaml"); }
361test { try parseTest("XW4D.yaml"); }
362test { try parseTest("Y2GN.yaml"); }
363test { try parseTest("Y79Y.yaml"); }
364test { try parseTest("YD5X.yaml"); }
365test { try parseTest("YJV2.yaml"); }
366test { try parseTest("Z67P.yaml"); }
367test { try parseTest("Z9M4.yaml"); }
368test { try parseTest("ZCZ6.yaml"); }
369test { try parseTest("ZF4X.yaml"); }
370test { try parseTest("ZH7C.yaml"); }
371test { try parseTest("ZK9H.yaml"); }
372test { try parseTest("ZL4Z.yaml"); }
373test { try parseTest("ZVH3.yaml"); }
374test { try parseTest("ZWK4.yaml"); }
375test { try parseTest("ZXT5.yaml"); }
376// test { try parseTest("ZYU8.yaml"); }
yaml.zig+37-23
...@@ -18,11 +18,18 @@ pub const Stream = struct {...@@ -18,11 +18,18 @@ pub const Stream = struct {
18 }18 }
19};19};
2020
21pub const Document = struct {21pub const Document = union(enum) {
22 mapping: Mapping,22 mapping: Mapping,
23 sequence: Sequence,
2324
24 pub fn deinit(self: *const Document, alloc: std.mem.Allocator) void {25 pub fn deinit(self: *const Document, alloc: std.mem.Allocator) void {
25 self.mapping.deinit(alloc);26 switch (self.*) {
27 .mapping => |m| m.deinit(alloc),
28 .sequence => |s| {
29 for (s) |*item| item.deinit(alloc);
30 alloc.free(s);
31 },
32 }
26 }33 }
27};34};
2835
...@@ -43,9 +50,7 @@ pub const Item = union(enum) {...@@ -43,9 +50,7 @@ pub const Item = union(enum) {
43 for (s) |*item| item.deinit(alloc);50 for (s) |*item| item.deinit(alloc);
44 alloc.free(s);51 alloc.free(s);
45 },52 },
46 .string => |s| {53 .string => |s| alloc.free(s),
47 _ = s;
48 },
49 .stream => |s| s.deinit(alloc),54 .stream => |s| s.deinit(alloc),
50 }55 }
51 }56 }
...@@ -87,7 +92,7 @@ pub const Key = struct {...@@ -87,7 +92,7 @@ pub const Key = struct {
87 value: Value,92 value: Value,
8893
89 pub fn deinit(self: *const Key, alloc: std.mem.Allocator) void {94 pub fn deinit(self: *const Key, alloc: std.mem.Allocator) void {
90 // alloc.free(self.key);95 alloc.free(self.key);
91 self.value.deinit(alloc);96 self.value.deinit(alloc);
92 }97 }
93};98};
...@@ -99,10 +104,7 @@ pub const Value = union(enum) {...@@ -99,10 +104,7 @@ pub const Value = union(enum) {
99104
100 pub fn deinit(self: *const Value, alloc: std.mem.Allocator) void {105 pub fn deinit(self: *const Value, alloc: std.mem.Allocator) void {
101 switch (self.*) {106 switch (self.*) {
102 .string => |s| {107 .string => |s| alloc.free(s),
103 _ = s;
104 // alloc.free(s);
105 },
106 .mapping => |*m| {108 .mapping => |*m| {
107 m.deinit(alloc);109 m.deinit(alloc);
108 },110 },
...@@ -297,17 +299,28 @@ fn parse_stream(p: *Parser) Error!Stream {...@@ -297,17 +299,28 @@ fn parse_stream(p: *Parser) Error!Stream {
297}299}
298300
299fn parse_document(p: *Parser) Error!Document {301fn parse_document(p: *Parser) Error!Document {
300 var tok = try p.next();302 const tok = try p.next();
301 if (tok.type != c.YAML_MAPPING_START_EVENT) {303 switch (tok.type) {
302 return error.YamlUnexpectedToken;304 c.YAML_MAPPING_START_EVENT => {
303 }305 const item = try parse_item(p, tok);
304 const item = try parse_item(p, tok);306 const tok2 = try p.next();
305307 if (tok2.type != c.YAML_DOCUMENT_END_EVENT) {
306 tok = try p.next();308 return error.YamlUnexpectedToken;
307 if (tok.type != c.YAML_DOCUMENT_END_EVENT) {309 }
308 return error.YamlUnexpectedToken;310 return Document{ .mapping = item.mapping };
311 },
312 c.YAML_SEQUENCE_START_EVENT => {
313 const item = try parse_item(p, tok);
314 const tok2 = try p.next();
315 if (tok2.type != c.YAML_DOCUMENT_END_EVENT) {
316 return error.YamlUnexpectedToken;
317 }
318 return Document{ .sequence = item.sequence };
319 },
320 else => {
321 return error.YamlUnexpectedToken;
322 },
309 }323 }
310 return Document{ .mapping = item.mapping };
311}324}
312325
313fn parse_mapping(p: *Parser) Error!Mapping {326fn parse_mapping(p: *Parser) Error!Mapping {
...@@ -374,9 +387,10 @@ fn get_event_string(event: Token, p: *const Parser) !string {...@@ -374,9 +387,10 @@ fn get_event_string(event: Token, p: *const Parser) !string {
374 }387 }
375 }388 }
376 const s = lines[sm.line][sm.column..em.column];389 const s = lines[sm.line][sm.column..em.column];
377 if (s.len < 2) return s;390 if (s.len < 2) return try p.alloc.dupe(u8, s);
378 if (s[0] == '"' and s[s.len - 1] == '"') return std.mem.trim(u8, s, "\"");391 if (s[0] == '"' and s[s.len - 1] == '"') return try p.alloc.dupe(u8, std.mem.trim(u8, s, "\""));
379 return s;392 if (s[0] == '\'' and s[s.len - 1] == '\'') return try p.alloc.dupe(u8, std.mem.trim(u8, s, "'"));
393 return try p.alloc.dupe(u8, s);
380}394}
381395
382//396//
zigmod.yml+5
...@@ -29,3 +29,8 @@ dependencies:...@@ -29,3 +29,8 @@ dependencies:
2929
30root_dependencies:30root_dependencies:
31 - src: git https://github.com/nektro/zig-expect31 - src: git https://github.com/nektro/zig-expect
32 - src: git https://github.com/nektro/zig-nfs
33 - src: git https://github.com/yaml/yaml-test-suite commit-ccfa74e56afb53da960847ff6e6976c0a0825709
34 id: hi7zwl8ps6jdi4noam1ilxj1mp792qxf87u5tjlo4fz5p4ks
35 license: MIT
36 keep: true