xref: /freebsd/contrib/lyaml/spec/ext_yaml_parser_spec.yaml (revision 2bc180ef045e5911cce0cea1c2a139cffd2b577a)
1*2bc180efSBaptiste Daroussin# LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
2*2bc180efSBaptiste Daroussin# Copyright (C) 2013-2022 Gary V. Vaughan
3*2bc180efSBaptiste Daroussin
4*2bc180efSBaptiste Daroussinspecify parsing:
5*2bc180efSBaptiste Daroussin- it parses empty streams:
6*2bc180efSBaptiste Daroussin    e = yaml.parser ""
7*2bc180efSBaptiste Daroussin    expect (e ().type).to_be "STREAM_START"
8*2bc180efSBaptiste Daroussin    expect (e ().type).to_be "STREAM_END"
9*2bc180efSBaptiste Daroussin    expect (e ()).to_be (nil)
10*2bc180efSBaptiste Daroussin    expect (e ()).to_be (nil)
11*2bc180efSBaptiste Daroussin- it ignores comments: '
12*2bc180efSBaptiste Daroussin    e = yaml.parser "# A comment\nnon-comment # trailing comment\n"
13*2bc180efSBaptiste Daroussin    expect (e ().type).to_be "STREAM_START"
14*2bc180efSBaptiste Daroussin    expect (e ().type).to_be "DOCUMENT_START"
15*2bc180efSBaptiste Daroussin    expect (e ().value).to_be "non-comment"
16*2bc180efSBaptiste Daroussin    expect (e ().type).to_be "DOCUMENT_END"'
17*2bc180efSBaptiste Daroussin
18*2bc180efSBaptiste Daroussin- describe STREAM_START:
19*2bc180efSBaptiste Daroussin  - before:
20*2bc180efSBaptiste Daroussin      e = yaml.parser "# no BOM"
21*2bc180efSBaptiste Daroussin  - it is the first event:
22*2bc180efSBaptiste Daroussin      expect (e ().type).to_be "STREAM_START"
23*2bc180efSBaptiste Daroussin  - it reports event start marker:
24*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 0, column = 0, index = 0}
25*2bc180efSBaptiste Daroussin  - it reports event end marker:
26*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 0, column = 0, index = 0}
27*2bc180efSBaptiste Daroussin  - it uses UTF-8 by default:
28*2bc180efSBaptiste Daroussin      expect (e ().encoding).to_be "UTF8"
29*2bc180efSBaptiste Daroussin  - it recognizes UTF-16 BOM:
30*2bc180efSBaptiste Daroussin      e = yaml.parser (BOM .. " BOM")
31*2bc180efSBaptiste Daroussin      expect (e ().encoding).to_match "UTF16[BL]E"
32*2bc180efSBaptiste Daroussin
33*2bc180efSBaptiste Daroussin- describe STREAM_END:
34*2bc180efSBaptiste Daroussin  - before:
35*2bc180efSBaptiste Daroussin      for t in yaml.parser "nothing to see" do ev = t end
36*2bc180efSBaptiste Daroussin  - it is the last event:
37*2bc180efSBaptiste Daroussin      expect (ev.type).to_be "STREAM_END"
38*2bc180efSBaptiste Daroussin  - it reports event start marker:
39*2bc180efSBaptiste Daroussin      expect (ev.start_mark).to_equal {line = 1, column = 0, index = 14}
40*2bc180efSBaptiste Daroussin  - it reports event end marker:
41*2bc180efSBaptiste Daroussin      expect (ev.end_mark).to_equal {line = 1, column = 0, index = 14}
42*2bc180efSBaptiste Daroussin
43*2bc180efSBaptiste Daroussin- describe DOCUMENT_START:
44*2bc180efSBaptiste Daroussin  - before:
45*2bc180efSBaptiste Daroussin      e = consume (1, "---")
46*2bc180efSBaptiste Daroussin  - it recognizes document start marker:
47*2bc180efSBaptiste Daroussin      expect (filter (e (), "type", "implicit")).
48*2bc180efSBaptiste Daroussin        to_equal {type = "DOCUMENT_START", implicit = false}
49*2bc180efSBaptiste Daroussin  - it reports implicit document start:
50*2bc180efSBaptiste Daroussin      e = consume (1, "foo")
51*2bc180efSBaptiste Daroussin      expect (e ().implicit).to_be (true)
52*2bc180efSBaptiste Daroussin  - it reports event start marker:
53*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 0, column = 0, index = 0}
54*2bc180efSBaptiste Daroussin  - it reports event end marker:
55*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 0, column = 3, index = 3}
56*2bc180efSBaptiste Daroussin
57*2bc180efSBaptiste Daroussin  - context parser directives:
58*2bc180efSBaptiste Daroussin    - it can recognize document versions:
59*2bc180efSBaptiste Daroussin        e = consume (1, "%YAML 1.1\n---")
60*2bc180efSBaptiste Daroussin        expect (e ().version_directive).to_equal {major = 1, minor = 1}
61*2bc180efSBaptiste Daroussin    - it can diagnose missing document start:
62*2bc180efSBaptiste Daroussin        e = consume (1, "%YAML 1.1\n")
63*2bc180efSBaptiste Daroussin        expect (e ()).to_error "expected <document start>"
64*2bc180efSBaptiste Daroussin    - it can diagnose multiple versions:
65*2bc180efSBaptiste Daroussin        e = consume (1, "%YAML 1.1\n%YAML 1.1\n---")
66*2bc180efSBaptiste Daroussin        expect (e ()).to_error "duplicate %YAML directive"
67*2bc180efSBaptiste Daroussin    - it can diagnose too-new versions:
68*2bc180efSBaptiste Daroussin        e = consume (1, "%YAML 2.0\n---")
69*2bc180efSBaptiste Daroussin        expect (e ()).to_error "incompatible YAML document"
70*2bc180efSBaptiste Daroussin    - it warns of newer minor versions:
71*2bc180efSBaptiste Daroussin        pending (github_issue "1")
72*2bc180efSBaptiste Daroussin        e = consume (1, "%YAML 1.9\n---")
73*2bc180efSBaptiste Daroussin        expect (e ()).
74*2bc180efSBaptiste Daroussin           to_error "attempting parsing of newer minor document version"
75*2bc180efSBaptiste Daroussin
76*2bc180efSBaptiste Daroussin    - it can recognize primary tag handles:
77*2bc180efSBaptiste Daroussin        e = consume (1, "%TAG ! tag:ben-kiki.org,2000:app/\n---")
78*2bc180efSBaptiste Daroussin        expect (e ().tag_directives).
79*2bc180efSBaptiste Daroussin           to_equal {{handle = "!", prefix = "tag:ben-kiki.org,2000:app/"}}
80*2bc180efSBaptiste Daroussin    - it can recognize secondary tag handles:
81*2bc180efSBaptiste Daroussin        e = consume (1, "%TAG !! tag:yaml.org,2002:\n---")
82*2bc180efSBaptiste Daroussin        expect (e ().tag_directives).
83*2bc180efSBaptiste Daroussin           to_equal {{handle = "!!", prefix = "tag:yaml.org,2002:"}}
84*2bc180efSBaptiste Daroussin    - it can recognize named tag handles:
85*2bc180efSBaptiste Daroussin        e = consume (1, "%TAG !o! tag:ben-kiki.org,2000:\n---")
86*2bc180efSBaptiste Daroussin        expect (e ().tag_directives).
87*2bc180efSBaptiste Daroussin           to_equal {{handle = "!o!", prefix = "tag:ben-kiki.org,2000:"}}
88*2bc180efSBaptiste Daroussin    - it can concatenate multiple tag handles:
89*2bc180efSBaptiste Daroussin        e = consume (1, "%TAG ! !\n" ..
90*2bc180efSBaptiste Daroussin                        "%TAG !! tag:yaml.org,2002:\n" ..
91*2bc180efSBaptiste Daroussin                        "%TAG !o! tag:ben-kiki.org,2000:\n" ..
92*2bc180efSBaptiste Daroussin                        "---")
93*2bc180efSBaptiste Daroussin        expect (e ().tag_directives).to_contain.
94*2bc180efSBaptiste Daroussin           all_of {{handle = "!", prefix = "!"},
95*2bc180efSBaptiste Daroussin                   {handle = "!!", prefix = "tag:yaml.org,2002:"},
96*2bc180efSBaptiste Daroussin                   {handle = "!o!", prefix = "tag:ben-kiki.org,2000:"}}
97*2bc180efSBaptiste Daroussin    - it can diagnose missing document start:
98*2bc180efSBaptiste Daroussin        e = consume (1, "%TAG ! !\n")
99*2bc180efSBaptiste Daroussin        expect (e ()).to_error "expected <document start>"
100*2bc180efSBaptiste Daroussin
101*2bc180efSBaptiste Daroussin- describe DOCUMENT_END:
102*2bc180efSBaptiste Daroussin  - before:
103*2bc180efSBaptiste Daroussin      e = consume (3, "foo\n...")
104*2bc180efSBaptiste Daroussin  - it recognizes the document end marker:
105*2bc180efSBaptiste Daroussin      expect (filter (e (), "type", "implicit")).
106*2bc180efSBaptiste Daroussin         to_equal {type = "DOCUMENT_END", implicit = false}
107*2bc180efSBaptiste Daroussin  - it reports an implicit document end marker:
108*2bc180efSBaptiste Daroussin      e = consume (3, "foo\n")
109*2bc180efSBaptiste Daroussin      expect (filter (e (), "type", "implicit")).
110*2bc180efSBaptiste Daroussin         to_equal {type = "DOCUMENT_END", implicit = true}
111*2bc180efSBaptiste Daroussin  - it reports event start marker:
112*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 1, column = 0, index = 4}
113*2bc180efSBaptiste Daroussin  - it reports event end marker:
114*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 1, column = 3, index = 7}
115*2bc180efSBaptiste Daroussin
116*2bc180efSBaptiste Daroussin- describe ALIAS:
117*2bc180efSBaptiste Daroussin  - before:
118*2bc180efSBaptiste Daroussin      e = consume (10, "---\n" ..
119*2bc180efSBaptiste Daroussin                      "hr:\n" ..
120*2bc180efSBaptiste Daroussin                      "- Mark McGwire\n" ..
121*2bc180efSBaptiste Daroussin                      "- &SS Sammy Sosa\n" ..
122*2bc180efSBaptiste Daroussin                      "rbi:\n" ..
123*2bc180efSBaptiste Daroussin                      "- *SS\n" ..
124*2bc180efSBaptiste Daroussin                      "- Ken Griffey")
125*2bc180efSBaptiste Daroussin  - it recognizes an alias event:
126*2bc180efSBaptiste Daroussin      expect (filter (e (), "type", "anchor")).
127*2bc180efSBaptiste Daroussin         to_equal {type = "ALIAS", anchor = "SS"}
128*2bc180efSBaptiste Daroussin  - it reports event start marker:
129*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 5, column = 2, index = 47}
130*2bc180efSBaptiste Daroussin  - it reports event end marker:
131*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 5, column = 5, index = 50}
132*2bc180efSBaptiste Daroussin
133*2bc180efSBaptiste Daroussin- describe SCALAR:
134*2bc180efSBaptiste Daroussin  - before:
135*2bc180efSBaptiste Daroussin      e = consume (6, "---\n" ..
136*2bc180efSBaptiste Daroussin                      "hr:\n" ..
137*2bc180efSBaptiste Daroussin                      "- Mark McGwire\n" ..
138*2bc180efSBaptiste Daroussin                      "- &SS Sammy Sosa\n" ..
139*2bc180efSBaptiste Daroussin                      "rbi:\n" ..
140*2bc180efSBaptiste Daroussin                      "- *SS\n" ..
141*2bc180efSBaptiste Daroussin                      "- Ken Griffey")
142*2bc180efSBaptiste Daroussin  - it recognizes a scalar event:
143*2bc180efSBaptiste Daroussin      expect (filter (e (), "type", "value")).
144*2bc180efSBaptiste Daroussin         to_equal {type = "SCALAR",  value = "Sammy Sosa"}
145*2bc180efSBaptiste Daroussin  - it records anchors:
146*2bc180efSBaptiste Daroussin      expect (e ().anchor).to_be "SS"
147*2bc180efSBaptiste Daroussin  - it reports event start marker:
148*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 3, column = 2, index = 25}
149*2bc180efSBaptiste Daroussin  - it reports event end marker:
150*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 3, column = 16, index = 39}
151*2bc180efSBaptiste Daroussin
152*2bc180efSBaptiste Daroussin  - context with quoting style:
153*2bc180efSBaptiste Daroussin    - context plain style:
154*2bc180efSBaptiste Daroussin      - before:
155*2bc180efSBaptiste Daroussin          e = consume (2, "---\n" ..
156*2bc180efSBaptiste Daroussin                          "  Mark McGwire's\n" ..
157*2bc180efSBaptiste Daroussin                          "  year was crippled\n" ..
158*2bc180efSBaptiste Daroussin                          "  by a knee injury.\n")
159*2bc180efSBaptiste Daroussin      - it ignores line-breaks and indentation:
160*2bc180efSBaptiste Daroussin          expect (e ().value).
161*2bc180efSBaptiste Daroussin             to_be "Mark McGwire's year was crippled by a knee injury."
162*2bc180efSBaptiste Daroussin      - it recognizes implicit plain style:
163*2bc180efSBaptiste Daroussin          e = consume (2, "---\n" ..
164*2bc180efSBaptiste Daroussin                          "  Mark McGwire's\n" ..
165*2bc180efSBaptiste Daroussin                          "  year was crippled\n" ..
166*2bc180efSBaptiste Daroussin                          "  by a knee injury.\n")
167*2bc180efSBaptiste Daroussin          expect (e ().plain_implicit).to_be (true)
168*2bc180efSBaptiste Daroussin      - it recognizes explicit plain style:
169*2bc180efSBaptiste Daroussin          e = consume (2, "|\n" ..
170*2bc180efSBaptiste Daroussin                          "  Mark McGwire's\n" ..
171*2bc180efSBaptiste Daroussin                          "  year was crippled\n" ..
172*2bc180efSBaptiste Daroussin                          "  by a knee injury.\n")
173*2bc180efSBaptiste Daroussin          expect (e ().plain_implicit).to_be (false)
174*2bc180efSBaptiste Daroussin      - it recognizes implicit quoted style:
175*2bc180efSBaptiste Daroussin          e = consume (2, "|\n" ..
176*2bc180efSBaptiste Daroussin                          "  Mark McGwire's\n" ..
177*2bc180efSBaptiste Daroussin                          "  year was crippled\n" ..
178*2bc180efSBaptiste Daroussin                          "  by a knee injury.\n")
179*2bc180efSBaptiste Daroussin          expect (e ().quoted_implicit).to_be (true)
180*2bc180efSBaptiste Daroussin      - it recognizes explicit quoted style:
181*2bc180efSBaptiste Daroussin          e = consume (2, "'\n" ..
182*2bc180efSBaptiste Daroussin                          "  Mark McGwire's\n" ..
183*2bc180efSBaptiste Daroussin                          "  year was crippled\n" ..
184*2bc180efSBaptiste Daroussin                          "  by a knee injury.'\n")
185*2bc180efSBaptiste Daroussin          expect (e ().plain_implicit).to_be (false)
186*2bc180efSBaptiste Daroussin    - context folded style:
187*2bc180efSBaptiste Daroussin      - it preserves blank lines and deeper indentation:
188*2bc180efSBaptiste Daroussin          e = consume (2, ">\n" ..
189*2bc180efSBaptiste Daroussin                          "  Sammy Sosa completed another\n" ..
190*2bc180efSBaptiste Daroussin                          "  fine season with great stats.\n" ..
191*2bc180efSBaptiste Daroussin                          "\n" ..
192*2bc180efSBaptiste Daroussin                          "    63 Home Runs\n" ..
193*2bc180efSBaptiste Daroussin                          "    0.288 Batting Average\n" ..
194*2bc180efSBaptiste Daroussin                          "\n" ..
195*2bc180efSBaptiste Daroussin                          "  What a year!\n")
196*2bc180efSBaptiste Daroussin          expect (e ().value).
197*2bc180efSBaptiste Daroussin             to_be ("Sammy Sosa completed another fine season with great stats.\n" ..
198*2bc180efSBaptiste Daroussin                       "\n" ..
199*2bc180efSBaptiste Daroussin                       "  63 Home Runs\n" ..
200*2bc180efSBaptiste Daroussin                       "  0.288 Batting Average\n" ..
201*2bc180efSBaptiste Daroussin                       "\n" ..
202*2bc180efSBaptiste Daroussin                       "What a year!\n")
203*2bc180efSBaptiste Daroussin    - context literal style:
204*2bc180efSBaptiste Daroussin      - it removes indentation but preserves all line-breaks:
205*2bc180efSBaptiste Daroussin          e = consume (2, [[# ASCII Art]] .. "\n" ..
206*2bc180efSBaptiste Daroussin                          [[--- |]] .. "\n" ..
207*2bc180efSBaptiste Daroussin                          [[  \//||\/||]] .. "\n" ..
208*2bc180efSBaptiste Daroussin                          [[  // ||  ||__]] .. "\n")
209*2bc180efSBaptiste Daroussin          expect (e ().value).
210*2bc180efSBaptiste Daroussin             to_be ([[\//||\/||]] .. "\n" ..
211*2bc180efSBaptiste Daroussin                        [[// ||  ||__]] .. "\n")
212*2bc180efSBaptiste Daroussin
213*2bc180efSBaptiste Daroussin    - context single quoted style:
214*2bc180efSBaptiste Daroussin      - it folds line breaks:
215*2bc180efSBaptiste Daroussin          e = consume (2, [['This quoted scalar]] .. "\n" ..
216*2bc180efSBaptiste Daroussin                          [[  spans two lines.']])
217*2bc180efSBaptiste Daroussin          expect (e ().value).
218*2bc180efSBaptiste Daroussin             to_be "This quoted scalar spans two lines."
219*2bc180efSBaptiste Daroussin      - it does not process escape sequences:
220*2bc180efSBaptiste Daroussin          # Lua [[ quoting makes sure libyaml sees all the quotes.
221*2bc180efSBaptiste Daroussin          e = consume (2, [['"Howdy!"\t\u263A']])
222*2bc180efSBaptiste Daroussin          expect (e ().value).to_be [["Howdy!"\t\u263A]]
223*2bc180efSBaptiste Daroussin
224*2bc180efSBaptiste Daroussin    # Note that we have to single quote the Lua snippets to prevent
225*2bc180efSBaptiste Daroussin    # libyaml from interpreting the bytes as the spec file is read, so
226*2bc180efSBaptiste Daroussin    # that the raw strings get correctly passed to the Lua compiler.
227*2bc180efSBaptiste Daroussin    - context double quoted style:
228*2bc180efSBaptiste Daroussin      - it folds line breaks: '
229*2bc180efSBaptiste Daroussin          e = consume (4, [[quoted: "This quoted scalar]] .. "\n" ..
230*2bc180efSBaptiste Daroussin                          [[  spans two lines\n"]])
231*2bc180efSBaptiste Daroussin          expect (e ().value).
232*2bc180efSBaptiste Daroussin             to_be "This quoted scalar spans two lines\n"'
233*2bc180efSBaptiste Daroussin      - it recognizes unicode escape sequences: '
234*2bc180efSBaptiste Daroussin          e = consume (4, [[unicode: "Sosa did fine.\u263A"]])
235*2bc180efSBaptiste Daroussin          expect (e ().value).to_be "Sosa did fine.\226\152\186"'
236*2bc180efSBaptiste Daroussin      - it recognizes control escape sequences: '
237*2bc180efSBaptiste Daroussin          e = consume (4, [[control: "\b1998\t1999\t2000\n"]])
238*2bc180efSBaptiste Daroussin          expect (e ().value).to_be "\b1998\t1999\t2000\n"'
239*2bc180efSBaptiste Daroussin      - it recognizes hexadecimal escape sequences: '
240*2bc180efSBaptiste Daroussin          e = consume (4, [[hexesc: "\x41\x42\x43 is ABC"]])
241*2bc180efSBaptiste Daroussin          expect (e ().value).to_be "ABC is ABC"'
242*2bc180efSBaptiste Daroussin
243*2bc180efSBaptiste Daroussin    - context indentation determines scope: '
244*2bc180efSBaptiste Daroussin        e = consume (4, "name: Mark McGwire\n" ..
245*2bc180efSBaptiste Daroussin                        "accomplishment: >\n" ..
246*2bc180efSBaptiste Daroussin                        "  Mark set a major league\n" ..
247*2bc180efSBaptiste Daroussin                        "  home run record in 1998.\n" ..
248*2bc180efSBaptiste Daroussin                        "stats: |\n" ..
249*2bc180efSBaptiste Daroussin                        "  65 Home Runs\n" ..
250*2bc180efSBaptiste Daroussin                        "  0.278 Batting Average\n")
251*2bc180efSBaptiste Daroussin        expect (e ().value).to_be "Mark McGwire"
252*2bc180efSBaptiste Daroussin        expect (e ().value).to_be "accomplishment"
253*2bc180efSBaptiste Daroussin        expect (e ().value).
254*2bc180efSBaptiste Daroussin           to_be "Mark set a major league home run record in 1998.\n"
255*2bc180efSBaptiste Daroussin        expect (e ().value).to_be "stats"
256*2bc180efSBaptiste Daroussin        expect (e ().value).to_be "65 Home Runs\n0.278 Batting Average\n"'
257*2bc180efSBaptiste Daroussin
258*2bc180efSBaptiste Daroussin  - context with tag:
259*2bc180efSBaptiste Daroussin    - it recognizes local tags: '
260*2bc180efSBaptiste Daroussin        e = consume (4, "application specific tag: !something |\n" ..
261*2bc180efSBaptiste Daroussin                        " The semantics of the tag\n" ..
262*2bc180efSBaptiste Daroussin                        " above may be different for\n" ..
263*2bc180efSBaptiste Daroussin                        " different documents.")
264*2bc180efSBaptiste Daroussin        expect (e ().tag).to_be "!something"'
265*2bc180efSBaptiste Daroussin    - it recognizes global tags: '
266*2bc180efSBaptiste Daroussin        e = consume (4, "picture: !!binary |\n" ..
267*2bc180efSBaptiste Daroussin                        " R0lGODlhDAAMAIQAAP//9/X\n" ..
268*2bc180efSBaptiste Daroussin                        " 17unp5WZmZgAAAOfn515eXv\n" ..
269*2bc180efSBaptiste Daroussin                        " Pz7Y6OjuDg4J+fn5OTk6enp\n" ..
270*2bc180efSBaptiste Daroussin                        " 56enmleECcgggoBADs=")
271*2bc180efSBaptiste Daroussin        expect (e ().tag).to_be "tag:yaml.org,2002:binary"'
272*2bc180efSBaptiste Daroussin    - it resolves %TAG declarations: '
273*2bc180efSBaptiste Daroussin        e = consume (5, "%TAG ! tag:clarkevans.com,2002:\n" ..
274*2bc180efSBaptiste Daroussin                        "---\n" ..
275*2bc180efSBaptiste Daroussin                        "shape:\n" ..
276*2bc180efSBaptiste Daroussin                        "- !circle\n" ..
277*2bc180efSBaptiste Daroussin                        "  center: &ORIGIN {x: 73, y: 129}\n" ..
278*2bc180efSBaptiste Daroussin                        "  radius: 7")
279*2bc180efSBaptiste Daroussin        expect (e ().tag).to_be "tag:clarkevans.com,2002:circle"'
280*2bc180efSBaptiste Daroussin
281*2bc180efSBaptiste Daroussin- describe SEQUENCE_START:
282*2bc180efSBaptiste Daroussin  - before: '
283*2bc180efSBaptiste Daroussin      e = consume (4, "fubar: &FOO\n" ..
284*2bc180efSBaptiste Daroussin                      "  - foo\n" ..
285*2bc180efSBaptiste Daroussin                      "  - bar\n")'
286*2bc180efSBaptiste Daroussin  - it recognizes a sequence start event:
287*2bc180efSBaptiste Daroussin      expect (e ().type).to_be "SEQUENCE_START"
288*2bc180efSBaptiste Daroussin  - it records anchors:
289*2bc180efSBaptiste Daroussin      expect (e ().anchor).to_be "FOO"
290*2bc180efSBaptiste Daroussin  - it reports event start marker:
291*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 0, column = 7, index = 7}
292*2bc180efSBaptiste Daroussin  - it reports event end marker:
293*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 1, column = 2, index = 14}
294*2bc180efSBaptiste Daroussin
295*2bc180efSBaptiste Daroussin  - context with tag:
296*2bc180efSBaptiste Daroussin    - it recognizes local tags: '
297*2bc180efSBaptiste Daroussin        e = consume (2, "--- !something\n" ..
298*2bc180efSBaptiste Daroussin                        "- foo\n")
299*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
300*2bc180efSBaptiste Daroussin           to_equal {type = "SEQUENCE_START", tag = "!something"}'
301*2bc180efSBaptiste Daroussin    - it recognizes global tags: '
302*2bc180efSBaptiste Daroussin        e = consume (2, "--- !!omap\n" ..
303*2bc180efSBaptiste Daroussin                        "- Mark McGwire: 65\n" ..
304*2bc180efSBaptiste Daroussin                        "- Sammy Sosa: 63\n" ..
305*2bc180efSBaptiste Daroussin                        "- Ken Griffy: 58\n")
306*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
307*2bc180efSBaptiste Daroussin           to_equal {type = "SEQUENCE_START",
308*2bc180efSBaptiste Daroussin                        tag  = "tag:yaml.org,2002:omap"}'
309*2bc180efSBaptiste Daroussin    - it resolves %TAG declarations: '
310*2bc180efSBaptiste Daroussin        e = consume (2, "%TAG ! tag:clarkevans.com,2002:\n" ..
311*2bc180efSBaptiste Daroussin                        "--- !shape\n" ..
312*2bc180efSBaptiste Daroussin                        "- !circle\n" ..
313*2bc180efSBaptiste Daroussin                        "  center: &ORIGIN {x: 73, y: 129}\n" ..
314*2bc180efSBaptiste Daroussin                        "  radius: 7\n")
315*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
316*2bc180efSBaptiste Daroussin           to_equal {type = "SEQUENCE_START",
317*2bc180efSBaptiste Daroussin                        tag  = "tag:clarkevans.com,2002:shape"}'
318*2bc180efSBaptiste Daroussin
319*2bc180efSBaptiste Daroussin  - context with style:
320*2bc180efSBaptiste Daroussin    - it recognizes block style:
321*2bc180efSBaptiste Daroussin        e = consume (2, "- first\n- second")
322*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "style")).
323*2bc180efSBaptiste Daroussin           to_equal {type = "SEQUENCE_START", style = "BLOCK"}
324*2bc180efSBaptiste Daroussin    - it recognizes flow style:
325*2bc180efSBaptiste Daroussin        e = consume (2, "[first, second]")
326*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "style")).
327*2bc180efSBaptiste Daroussin           to_equal {type = "SEQUENCE_START", style = "FLOW"}
328*2bc180efSBaptiste Daroussin
329*2bc180efSBaptiste Daroussin- describe SEQUENCE_END:
330*2bc180efSBaptiste Daroussin  - before:
331*2bc180efSBaptiste Daroussin      e = consume (5, "- foo\n- bar\n")
332*2bc180efSBaptiste Daroussin  - it recognizes a sequence end event:
333*2bc180efSBaptiste Daroussin      expect (e ().type).to_equal "SEQUENCE_END"
334*2bc180efSBaptiste Daroussin  - it reports event start marker:
335*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 2, column = 0, index = 12}
336*2bc180efSBaptiste Daroussin  - it reports event end marker:
337*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 2, column = 0, index = 12}
338*2bc180efSBaptiste Daroussin
339*2bc180efSBaptiste Daroussin- describe MAPPING_START:
340*2bc180efSBaptiste Daroussin  - before: 'e = consume (3, "- &FUBAR\n  foo: bar\n")'
341*2bc180efSBaptiste Daroussin  - it recognizes a mapping start event:
342*2bc180efSBaptiste Daroussin        expect (e ().type).to_be "MAPPING_START"
343*2bc180efSBaptiste Daroussin  - it records anchors:
344*2bc180efSBaptiste Daroussin      expect (e ().anchor).to_be "FUBAR"
345*2bc180efSBaptiste Daroussin  - it reports event start marker:
346*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 0, column = 2, index = 2}
347*2bc180efSBaptiste Daroussin  - it reports event end marker:
348*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 1, column = 2, index = 11}
349*2bc180efSBaptiste Daroussin
350*2bc180efSBaptiste Daroussin  - context with tag:
351*2bc180efSBaptiste Daroussin    - it recognizes local tags: '
352*2bc180efSBaptiste Daroussin    e = consume (2, "--- !something\nfoo: bar\n")
353*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
354*2bc180efSBaptiste Daroussin           to_equal {type = "MAPPING_START", tag = "!something"}'
355*2bc180efSBaptiste Daroussin    - it recognizes global tags: '
356*2bc180efSBaptiste Daroussin        e = consume (2, "--- !!set\n" ..
357*2bc180efSBaptiste Daroussin                        "? Mark McGwire\n" ..
358*2bc180efSBaptiste Daroussin                        "? Sammy Sosa\n" ..
359*2bc180efSBaptiste Daroussin                        "? Ken Griffy\n")
360*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
361*2bc180efSBaptiste Daroussin           to_equal {type = "MAPPING_START",
362*2bc180efSBaptiste Daroussin                        tag  = "tag:yaml.org,2002:set"}'
363*2bc180efSBaptiste Daroussin    - it resolves %TAG declarations: '
364*2bc180efSBaptiste Daroussin        e = consume (3, "%TAG ! tag:clarkevans.com,2002:\n" ..
365*2bc180efSBaptiste Daroussin                        "--- !shape\n" ..
366*2bc180efSBaptiste Daroussin                        "- !circle\n" ..
367*2bc180efSBaptiste Daroussin                        "  center: &ORIGIN {x: 73, y: 129}\n" ..
368*2bc180efSBaptiste Daroussin                        "  radius: 7\n")
369*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "tag")).
370*2bc180efSBaptiste Daroussin           to_equal {type = "MAPPING_START",
371*2bc180efSBaptiste Daroussin                        tag  = "tag:clarkevans.com,2002:circle"}'
372*2bc180efSBaptiste Daroussin
373*2bc180efSBaptiste Daroussin  - context with style:
374*2bc180efSBaptiste Daroussin    - it recognizes block style: '
375*2bc180efSBaptiste Daroussin        e = consume (2, "foo: bar\nbaz:\n  quux")
376*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "style")).
377*2bc180efSBaptiste Daroussin           to_equal {type = "MAPPING_START", style = "BLOCK"}'
378*2bc180efSBaptiste Daroussin    - it recognizes flow style: '
379*2bc180efSBaptiste Daroussin        e = consume (2, "{foo: bar, baz: quux}")
380*2bc180efSBaptiste Daroussin        expect (filter (e (), "type", "style")).
381*2bc180efSBaptiste Daroussin           to_equal {type = "MAPPING_START", style = "FLOW"}'
382*2bc180efSBaptiste Daroussin
383*2bc180efSBaptiste Daroussin
384*2bc180efSBaptiste Daroussin- describe MAPPING_END:
385*2bc180efSBaptiste Daroussin  - before: 'e = consume (5, "foo: bar\n")'
386*2bc180efSBaptiste Daroussin  - it recognizes the mapping end event:
387*2bc180efSBaptiste Daroussin      expect (e ().type).to_equal "MAPPING_END"
388*2bc180efSBaptiste Daroussin  - it reports event start marker:
389*2bc180efSBaptiste Daroussin      expect (e ().start_mark).to_equal {line = 1, column = 0, index = 9}
390*2bc180efSBaptiste Daroussin  - it reports event end marker:
391*2bc180efSBaptiste Daroussin      expect (e ().end_mark).to_equal {line = 1, column = 0, index = 9}
392