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