diff --git a/test/core/spectests.cpp b/test/core/spectests.cpp deleted file mode 100644 index 66692bf..0000000 --- a/test/core/spectests.cpp +++ /dev/null @@ -1,1859 +0,0 @@ -#include - -#include "handlermacros.h" -#include "specexamples.h" // IWYU pragma: keep -#include "spectests.h" // IWYU pragma: keep -#include "yaml-cpp/yaml.h" // IWYU pragma: keep - -namespace Test { -namespace Spec { -// 2.1 -TEST SeqScalars() { - HANDLE(ex2_1); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.2 -TEST MappingScalarsToScalars() { - HANDLE(ex2_2); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.278"); - EXPECT_SCALAR("?", 0, "rbi"); - EXPECT_SCALAR("?", 0, "147"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.3 -TEST MappingScalarsToSequences() { - HANDLE(ex2_3); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "american"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Boston Red Sox"); - EXPECT_SCALAR("?", 0, "Detroit Tigers"); - EXPECT_SCALAR("?", 0, "New York Yankees"); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "national"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "New York Mets"); - EXPECT_SCALAR("?", 0, "Chicago Cubs"); - EXPECT_SCALAR("?", 0, "Atlanta Braves"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.4 -TEST SequenceOfMappings() { - HANDLE(ex2_4); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "name"); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.278"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "name"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "63"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.288"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.5 -TEST SequenceOfSequences() { - HANDLE(ex2_5); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "name"); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_SCALAR("?", 0, "0.278"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "63"); - EXPECT_SCALAR("?", 0, "0.288"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.6 -TEST MappingOfMappings() { - HANDLE(ex2_6); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.278"); - EXPECT_MAP_END(); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "63"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.288"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.7 -TEST TwoDocumentsInAStream() { - HANDLE(ex2_7); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Chicago Cubs"); - EXPECT_SCALAR("?", 0, "St Louis Cardinals"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.8 -TEST PlayByPlayFeed() { - HANDLE(ex2_8); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "time"); - EXPECT_SCALAR("?", 0, "20:03:20"); - EXPECT_SCALAR("?", 0, "player"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "action"); - EXPECT_SCALAR("?", 0, "strike (miss)"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "time"); - EXPECT_SCALAR("?", 0, "20:03:47"); - EXPECT_SCALAR("?", 0, "player"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "action"); - EXPECT_SCALAR("?", 0, "grand slam"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.9 -TEST SingleDocumentWithTwoComments() { - HANDLE(ex2_9); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "rbi"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.10 -TEST SimpleAnchor() { - HANDLE(ex2_10); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 1, "Sammy Sosa"); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "rbi"); - EXPECT_SEQ_START("?", 0); - EXPECT_ALIAS(1); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.11 -TEST MappingBetweenSequences() { - HANDLE(ex2_11); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "Detroit Tigers"); - EXPECT_SCALAR("?", 0, "Chicago cubs"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "2001-07-23"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "New York Yankees"); - EXPECT_SCALAR("?", 0, "Atlanta Braves"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "2001-07-02"); - EXPECT_SCALAR("?", 0, "2001-08-12"); - EXPECT_SCALAR("?", 0, "2001-08-14"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.12 -TEST CompactNestedMapping() { - HANDLE(ex2_12); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "item"); - EXPECT_SCALAR("?", 0, "Super Hoop"); - EXPECT_SCALAR("?", 0, "quantity"); - EXPECT_SCALAR("?", 0, "1"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "item"); - EXPECT_SCALAR("?", 0, "Basketball"); - EXPECT_SCALAR("?", 0, "quantity"); - EXPECT_SCALAR("?", 0, "4"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "item"); - EXPECT_SCALAR("?", 0, "Big Shoes"); - EXPECT_SCALAR("?", 0, "quantity"); - EXPECT_SCALAR("?", 0, "1"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.13 -TEST InLiteralsNewlinesArePreserved() { - HANDLE(ex2_13); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "\\//||\\/||\n" - "// || ||__"); - EXPECT_DOC_END(); - DONE(); -} - -// 2.14 -TEST InFoldedScalarsNewlinesBecomeSpaces() { - HANDLE(ex2_14); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "Mark McGwire's year was crippled by a knee injury."); - EXPECT_DOC_END(); - DONE(); -} - -// 2.15 -TEST FoldedNewlinesArePreservedForMoreIndentedAndBlankLines() { - HANDLE(ex2_15); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "Sammy Sosa completed another fine season with great stats.\n" - "\n" - " 63 Home Runs\n" - " 0.288 Batting Average\n" - "\n" - "What a year!"); - EXPECT_DOC_END(); - DONE(); -} - -// 2.16 -TEST IndentationDeterminesScope() { - HANDLE(ex2_16); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "name"); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "accomplishment"); - EXPECT_SCALAR("!", 0, "Mark set a major league home run record in 1998.\n"); - EXPECT_SCALAR("?", 0, "stats"); - EXPECT_SCALAR("!", 0, - "65 Home Runs\n" - "0.278 Batting Average\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.17 -TEST QuotedScalars() { - HANDLE(ex2_17); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "unicode"); - EXPECT_SCALAR("!", 0, "Sosa did fine.\u263A"); - EXPECT_SCALAR("?", 0, "control"); - EXPECT_SCALAR("!", 0, "\b1998\t1999\t2000\n"); - EXPECT_SCALAR("?", 0, "hex esc"); - EXPECT_SCALAR("!", 0, "\x0d\x0a is \r\n"); - EXPECT_SCALAR("?", 0, "single"); - EXPECT_SCALAR("!", 0, "\"Howdy!\" he cried."); - EXPECT_SCALAR("?", 0, "quoted"); - EXPECT_SCALAR("!", 0, " # Not a 'comment'."); - EXPECT_SCALAR("?", 0, "tie-fighter"); - EXPECT_SCALAR("!", 0, "|\\-*-/|"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.18 -TEST MultiLineFlowScalars() { - HANDLE(ex2_18); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "plain"); - EXPECT_SCALAR("?", 0, "This unquoted scalar spans many lines."); - EXPECT_SCALAR("?", 0, "quoted"); - EXPECT_SCALAR("!", 0, "So does this quoted scalar.\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// TODO: 2.19 - 2.22 schema tags - -// 2.23 -TEST VariousExplicitTags() { - HANDLE(ex2_23); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "not-date"); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "2002-04-28"); - EXPECT_SCALAR("?", 0, "picture"); - EXPECT_SCALAR("tag:yaml.org,2002:binary", 0, - "R0lGODlhDAAMAIQAAP//9/X\n" - "17unp5WZmZgAAAOfn515eXv\n" - "Pz7Y6OjuDg4J+fn5OTk6enp\n" - "56enmleECcgggoBADs=\n"); - EXPECT_SCALAR("?", 0, "application specific tag"); - EXPECT_SCALAR("!something", 0, - "The semantics of the tag\n" - "above may be different for\n" - "different documents."); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.24 -TEST GlobalTags() { - HANDLE(ex2_24); - EXPECT_DOC_START(); - EXPECT_SEQ_START("tag:clarkevans.com,2002:shape", 0); - EXPECT_MAP_START("tag:clarkevans.com,2002:circle", 0); - EXPECT_SCALAR("?", 0, "center"); - EXPECT_MAP_START("?", 1); - EXPECT_SCALAR("?", 0, "x"); - EXPECT_SCALAR("?", 0, "73"); - EXPECT_SCALAR("?", 0, "y"); - EXPECT_SCALAR("?", 0, "129"); - EXPECT_MAP_END(); - EXPECT_SCALAR("?", 0, "radius"); - EXPECT_SCALAR("?", 0, "7"); - EXPECT_MAP_END(); - EXPECT_MAP_START("tag:clarkevans.com,2002:line", 0); - EXPECT_SCALAR("?", 0, "start"); - EXPECT_ALIAS(1); - EXPECT_SCALAR("?", 0, "finish"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "x"); - EXPECT_SCALAR("?", 0, "89"); - EXPECT_SCALAR("?", 0, "y"); - EXPECT_SCALAR("?", 0, "102"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_MAP_START("tag:clarkevans.com,2002:label", 0); - EXPECT_SCALAR("?", 0, "start"); - EXPECT_ALIAS(1); - EXPECT_SCALAR("?", 0, "color"); - EXPECT_SCALAR("?", 0, "0xFFEEBB"); - EXPECT_SCALAR("?", 0, "text"); - EXPECT_SCALAR("?", 0, "Pretty vector drawing."); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.25 -TEST UnorderedSets() { - HANDLE(ex2_25); - EXPECT_DOC_START(); - EXPECT_MAP_START("tag:yaml.org,2002:set", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_NULL(0); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.26 -TEST OrderedMappings() { - HANDLE(ex2_26); - EXPECT_DOC_START(); - EXPECT_SEQ_START("tag:yaml.org,2002:omap", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Mark McGwire"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Sammy Sosa"); - EXPECT_SCALAR("?", 0, "63"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Ken Griffey"); - EXPECT_SCALAR("?", 0, "58"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.27 -TEST Invoice() { - HANDLE(ex2_27); - EXPECT_DOC_START(); - EXPECT_MAP_START("tag:clarkevans.com,2002:invoice", 0); - EXPECT_SCALAR("?", 0, "invoice"); - EXPECT_SCALAR("?", 0, "34843"); - EXPECT_SCALAR("?", 0, "date"); - EXPECT_SCALAR("?", 0, "2001-01-23"); - EXPECT_SCALAR("?", 0, "bill-to"); - EXPECT_MAP_START("?", 1); - EXPECT_SCALAR("?", 0, "given"); - EXPECT_SCALAR("?", 0, "Chris"); - EXPECT_SCALAR("?", 0, "family"); - EXPECT_SCALAR("?", 0, "Dumars"); - EXPECT_SCALAR("?", 0, "address"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "lines"); - EXPECT_SCALAR("!", 0, - "458 Walkman Dr.\n" - "Suite #292\n"); - EXPECT_SCALAR("?", 0, "city"); - EXPECT_SCALAR("?", 0, "Royal Oak"); - EXPECT_SCALAR("?", 0, "state"); - EXPECT_SCALAR("?", 0, "MI"); - EXPECT_SCALAR("?", 0, "postal"); - EXPECT_SCALAR("?", 0, "48046"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_SCALAR("?", 0, "ship-to"); - EXPECT_ALIAS(1); - EXPECT_SCALAR("?", 0, "product"); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sku"); - EXPECT_SCALAR("?", 0, "BL394D"); - EXPECT_SCALAR("?", 0, "quantity"); - EXPECT_SCALAR("?", 0, "4"); - EXPECT_SCALAR("?", 0, "description"); - EXPECT_SCALAR("?", 0, "Basketball"); - EXPECT_SCALAR("?", 0, "price"); - EXPECT_SCALAR("?", 0, "450.00"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sku"); - EXPECT_SCALAR("?", 0, "BL4438H"); - EXPECT_SCALAR("?", 0, "quantity"); - EXPECT_SCALAR("?", 0, "1"); - EXPECT_SCALAR("?", 0, "description"); - EXPECT_SCALAR("?", 0, "Super Hoop"); - EXPECT_SCALAR("?", 0, "price"); - EXPECT_SCALAR("?", 0, "2392.00"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "tax"); - EXPECT_SCALAR("?", 0, "251.42"); - EXPECT_SCALAR("?", 0, "total"); - EXPECT_SCALAR("?", 0, "4443.52"); - EXPECT_SCALAR("?", 0, "comments"); - EXPECT_SCALAR( - "?", 0, - "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 2.28 -TEST LogFile() { - HANDLE(ex2_28); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Time"); - EXPECT_SCALAR("?", 0, "2001-11-23 15:01:42 -5"); - EXPECT_SCALAR("?", 0, "User"); - EXPECT_SCALAR("?", 0, "ed"); - EXPECT_SCALAR("?", 0, "Warning"); - EXPECT_SCALAR("?", 0, "This is an error message for the log file"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Time"); - EXPECT_SCALAR("?", 0, "2001-11-23 15:02:31 -5"); - EXPECT_SCALAR("?", 0, "User"); - EXPECT_SCALAR("?", 0, "ed"); - EXPECT_SCALAR("?", 0, "Warning"); - EXPECT_SCALAR("?", 0, "A slightly different error message."); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Date"); - EXPECT_SCALAR("?", 0, "2001-11-23 15:03:17 -5"); - EXPECT_SCALAR("?", 0, "User"); - EXPECT_SCALAR("?", 0, "ed"); - EXPECT_SCALAR("?", 0, "Fatal"); - EXPECT_SCALAR("?", 0, "Unknown variable \"bar\""); - EXPECT_SCALAR("?", 0, "Stack"); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "file"); - EXPECT_SCALAR("?", 0, "TopClass.py"); - EXPECT_SCALAR("?", 0, "line"); - EXPECT_SCALAR("?", 0, "23"); - EXPECT_SCALAR("?", 0, "code"); - EXPECT_SCALAR("!", 0, "x = MoreObject(\"345\\n\")\n"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "file"); - EXPECT_SCALAR("?", 0, "MoreClass.py"); - EXPECT_SCALAR("?", 0, "line"); - EXPECT_SCALAR("?", 0, "58"); - EXPECT_SCALAR("?", 0, "code"); - EXPECT_SCALAR("!", 0, "foo = bar"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// TODO: 5.1 - 5.2 BOM - -// 5.3 -TEST BlockStructureIndicators() { - HANDLE(ex5_3); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sequence"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "mapping"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sky"); - EXPECT_SCALAR("?", 0, "blue"); - EXPECT_SCALAR("?", 0, "sea"); - EXPECT_SCALAR("?", 0, "green"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 5.4 -TEST FlowStructureIndicators() { - HANDLE(ex5_4); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sequence"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "mapping"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sky"); - EXPECT_SCALAR("?", 0, "blue"); - EXPECT_SCALAR("?", 0, "sea"); - EXPECT_SCALAR("?", 0, "green"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 5.5 -TEST CommentIndicator() { - HANDLE(ex5_5); - DONE(); -} - -// 5.6 -TEST NodePropertyIndicators() { - HANDLE(ex5_6); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "anchored"); - EXPECT_SCALAR("!local", 1, "value"); - EXPECT_SCALAR("?", 0, "alias"); - EXPECT_ALIAS(1); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 5.7 -TEST BlockScalarIndicators() { - HANDLE(ex5_7); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "literal"); - EXPECT_SCALAR("!", 0, "some\ntext\n"); - EXPECT_SCALAR("?", 0, "folded"); - EXPECT_SCALAR("!", 0, "some text\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 5.8 -TEST QuotedScalarIndicators() { - HANDLE(ex5_8); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "single"); - EXPECT_SCALAR("!", 0, "text"); - EXPECT_SCALAR("?", 0, "double"); - EXPECT_SCALAR("!", 0, "text"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// TODO: 5.9 directive -// TODO: 5.10 reserved indicator - -// 5.11 -TEST LineBreakCharacters() { - HANDLE(ex5_11); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "Line break (no glyph)\n" - "Line break (glyphed)\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 5.12 -TEST TabsAndSpaces() { - HANDLE(ex5_12); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "quoted"); - EXPECT_SCALAR("!", 0, "Quoted\t"); - EXPECT_SCALAR("?", 0, "block"); - EXPECT_SCALAR("!", 0, - "void main() {\n" - "\tprintf(\"Hello, world!\\n\");\n" - "}"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 5.13 -TEST EscapedCharacters() { - HANDLE(ex5_13); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " + - std::string("\x00", 1) + - " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A"); - EXPECT_DOC_END(); - DONE(); -} - -// 5.14 -TEST InvalidEscapedCharacters() { - try { - HANDLE(ex5_14); - } - catch (const YAML::ParserException& e) { - YAML_ASSERT(e.msg == std::string(YAML::ErrorMsg::INVALID_ESCAPE) + "c"); - return true; - } - return " no exception caught"; -} - -// 6.1 -TEST IndentationSpaces() { - HANDLE(ex6_1); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Not indented"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "By one space"); - EXPECT_SCALAR("!", 0, "By four\n spaces\n"); - EXPECT_SCALAR("?", 0, "Flow style"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "By two"); - EXPECT_SCALAR("?", 0, "Also by two"); - EXPECT_SCALAR("?", 0, "Still by two"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.2 -TEST IndentationIndicators() { - HANDLE(ex6_2); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "a"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "b"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "c"); - EXPECT_SCALAR("?", 0, "d"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.3 -TEST SeparationSpaces() { - HANDLE(ex6_3); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "baz"); - EXPECT_SCALAR("?", 0, "baz"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.4 -TEST LinePrefixes() { - HANDLE(ex6_4); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "plain"); - EXPECT_SCALAR("?", 0, "text lines"); - EXPECT_SCALAR("?", 0, "quoted"); - EXPECT_SCALAR("!", 0, "text lines"); - EXPECT_SCALAR("?", 0, "block"); - EXPECT_SCALAR("!", 0, "text\n \tlines\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.5 -TEST EmptyLines() { - HANDLE(ex6_5); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "Folding"); - EXPECT_SCALAR("!", 0, "Empty line\nas a line feed"); - EXPECT_SCALAR("?", 0, "Chomping"); - EXPECT_SCALAR("!", 0, "Clipped empty lines\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.6 -TEST LineFolding() { - HANDLE(ex6_6); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "trimmed\n\n\nas space"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.7 -TEST BlockFolding() { - HANDLE(ex6_7); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "foo \n\n\t bar\n\nbaz\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.8 -TEST FlowFolding() { - HANDLE(ex6_8); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, " foo\nbar\nbaz "); - EXPECT_DOC_END(); - DONE(); -} - -// 6.9 -TEST SeparatedComment() { - HANDLE(ex6_9); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.10 -TEST CommentLines() { - HANDLE(ex6_10); - DONE(); -} - -// 6.11 -TEST MultiLineComments() { - HANDLE(ex6_11); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.12 -TEST SeparationSpacesII() { - HANDLE(ex6_12); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "first"); - EXPECT_SCALAR("?", 0, "Sammy"); - EXPECT_SCALAR("?", 0, "last"); - EXPECT_SCALAR("?", 0, "Sosa"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "hr"); - EXPECT_SCALAR("?", 0, "65"); - EXPECT_SCALAR("?", 0, "avg"); - EXPECT_SCALAR("?", 0, "0.278"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.13 -TEST ReservedDirectives() { - HANDLE(ex6_13); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "foo"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.14 -TEST YAMLDirective() { - HANDLE(ex6_14); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "foo"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.15 -TEST InvalidRepeatedYAMLDirective() { - try { - HANDLE(ex6_15); - } - catch (const YAML::ParserException& e) { - if (e.msg == YAML::ErrorMsg::REPEATED_YAML_DIRECTIVE) - return true; - - throw; - } - - return " No exception was thrown"; -} - -// 6.16 -TEST TagDirective() { - HANDLE(ex6_16); - EXPECT_DOC_START(); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "foo"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.17 -TEST InvalidRepeatedTagDirective() { - try { - HANDLE(ex6_17); - } - catch (const YAML::ParserException& e) { - if (e.msg == YAML::ErrorMsg::REPEATED_TAG_DIRECTIVE) - return true; - - throw; - } - - return " No exception was thrown"; -} - -// 6.18 -TEST PrimaryTagHandle() { - HANDLE(ex6_18); - EXPECT_DOC_START(); - EXPECT_SCALAR("!foo", 0, "bar"); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_SCALAR("tag:example.com,2000:app/foo", 0, "bar"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.19 -TEST SecondaryTagHandle() { - HANDLE(ex6_19); - EXPECT_DOC_START(); - EXPECT_SCALAR("tag:example.com,2000:app/int", 0, "1 - 3"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.20 -TEST TagHandles() { - HANDLE(ex6_20); - EXPECT_DOC_START(); - EXPECT_SCALAR("tag:example.com,2000:app/foo", 0, "bar"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.21 -TEST LocalTagPrefix() { - HANDLE(ex6_21); - EXPECT_DOC_START(); - EXPECT_SCALAR("!my-light", 0, "fluorescent"); - EXPECT_DOC_END(); - EXPECT_DOC_START(); - EXPECT_SCALAR("!my-light", 0, "green"); - EXPECT_DOC_END(); - DONE(); -} - -// 6.22 -TEST GlobalTagPrefix() { - HANDLE(ex6_22); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("tag:example.com,2000:app/foo", 0, "bar"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.23 -TEST NodeProperties() { - HANDLE(ex6_23); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("tag:yaml.org,2002:str", 1, "foo"); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "bar"); - EXPECT_SCALAR("?", 2, "baz"); - EXPECT_ALIAS(1); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.24 -TEST VerbatimTags() { - HANDLE(ex6_24); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "foo"); - EXPECT_SCALAR("!bar", 0, "baz"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.25 -TEST InvalidVerbatimTags() { - HANDLE(ex6_25); - return " not implemented yet"; -} - -// 6.26 -TEST TagShorthands() { - HANDLE(ex6_26); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!local", 0, "foo"); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "bar"); - EXPECT_SCALAR("tag:example.com,2000:app/tag%21", 0, "baz"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.27 -TEST InvalidTagShorthands() { - bool threw = false; - try { - HANDLE(ex6_27a); - } - catch (const YAML::ParserException& e) { - threw = true; - if (e.msg != YAML::ErrorMsg::TAG_WITH_NO_SUFFIX) - throw; - } - - if (!threw) - return " No exception was thrown for a tag with no suffix"; - - HANDLE( - ex6_27b); // TODO: should we reject this one (since !h! is not declared)? - return " not implemented yet"; -} - -// 6.28 -TEST NonSpecificTags() { - HANDLE(ex6_28); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!", 0, "12"); - EXPECT_SCALAR("?", 0, "12"); - EXPECT_SCALAR("!", 0, "12"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 6.29 -TEST NodeAnchors() { - HANDLE(ex6_29); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "First occurrence"); - EXPECT_SCALAR("?", 1, "Value"); - EXPECT_SCALAR("?", 0, "Second occurrence"); - EXPECT_ALIAS(1); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.1 -TEST AliasNodes() { - HANDLE(ex7_1); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "First occurrence"); - EXPECT_SCALAR("?", 1, "Foo"); - EXPECT_SCALAR("?", 0, "Second occurrence"); - EXPECT_ALIAS(1); - EXPECT_SCALAR("?", 0, "Override anchor"); - EXPECT_SCALAR("?", 2, "Bar"); - EXPECT_SCALAR("?", 0, "Reuse anchor"); - EXPECT_ALIAS(2); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.2 -TEST EmptyNodes() { - HANDLE(ex7_2); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, ""); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, ""); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.3 -TEST CompletelyEmptyNodes() { - HANDLE(ex7_3); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_NULL(0); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.4 -TEST DoubleQuotedImplicitKeys() { - HANDLE(ex7_4); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("!", 0, "implicit block key"); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("!", 0, "implicit flow key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.5 -TEST DoubleQuotedLineBreaks() { - HANDLE(ex7_5); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "folded to a space,\nto a line feed, or \t \tnon-content"); - EXPECT_DOC_END(); - DONE(); -} - -// 7.6 -TEST DoubleQuotedLines() { - HANDLE(ex7_6); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "); - EXPECT_DOC_END(); - DONE(); -} - -// 7.7 -TEST SingleQuotedCharacters() { - HANDLE(ex7_7); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "here's to \"quotes\""); - EXPECT_DOC_END(); - DONE(); -} - -// 7.8 -TEST SingleQuotedImplicitKeys() { - HANDLE(ex7_8); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("!", 0, "implicit block key"); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("!", 0, "implicit flow key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.9 -TEST SingleQuotedLines() { - HANDLE(ex7_9); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "); - EXPECT_DOC_END(); - DONE(); -} - -// 7.10 -TEST PlainCharacters() { - HANDLE(ex7_10); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "::vector"); - EXPECT_SCALAR("!", 0, ": - ()"); - EXPECT_SCALAR("?", 0, "Up, up, and away!"); - EXPECT_SCALAR("?", 0, "-123"); - EXPECT_SCALAR("?", 0, "http://example.com/foo#bar"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "::vector"); - EXPECT_SCALAR("!", 0, ": - ()"); - EXPECT_SCALAR("!", 0, "Up, up, and away!"); - EXPECT_SCALAR("?", 0, "-123"); - EXPECT_SCALAR("?", 0, "http://example.com/foo#bar"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.11 -TEST PlainImplicitKeys() { - HANDLE(ex7_11); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "implicit block key"); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "implicit flow key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.12 -TEST PlainLines() { - HANDLE(ex7_12); - EXPECT_DOC_START(); - EXPECT_SCALAR("?", 0, "1st non-empty\n2nd non-empty 3rd non-empty"); - EXPECT_DOC_END(); - DONE(); -} - -// 7.13 -TEST FlowSequence() { - HANDLE(ex7_13); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "three"); - EXPECT_SCALAR("?", 0, "four"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.14 -TEST FlowSequenceEntries() { - HANDLE(ex7_14); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!", 0, "double quoted"); - EXPECT_SCALAR("!", 0, "single quoted"); - EXPECT_SCALAR("?", 0, "plain text"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "nested"); - EXPECT_SEQ_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "single"); - EXPECT_SCALAR("?", 0, "pair"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.15 -TEST FlowMappings() { - HANDLE(ex7_15); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SCALAR("?", 0, "three"); - EXPECT_SCALAR("?", 0, "four"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "five"); - EXPECT_SCALAR("?", 0, "six"); - EXPECT_SCALAR("?", 0, "seven"); - EXPECT_SCALAR("?", 0, "eight"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.16 -TEST FlowMappingEntries() { - HANDLE(ex7_16); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "explicit"); - EXPECT_SCALAR("?", 0, "entry"); - EXPECT_SCALAR("?", 0, "implicit"); - EXPECT_SCALAR("?", 0, "entry"); - EXPECT_NULL(0); - EXPECT_NULL(0); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.17 -TEST FlowMappingSeparateValues() { - HANDLE(ex7_17); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "unquoted"); - EXPECT_SCALAR("!", 0, "separate"); - EXPECT_SCALAR("?", 0, "http://foo.com"); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "omitted value"); - EXPECT_NULL(0); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "omitted key"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.18 -TEST FlowMappingAdjacentValues() { - HANDLE(ex7_18); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("!", 0, "adjacent"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_SCALAR("!", 0, "readable"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_SCALAR("!", 0, "empty"); - EXPECT_NULL(0); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.19 -TEST SinglePairFlowMappings() { - HANDLE(ex7_19); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.20 -TEST SinglePairExplicitEntry() { - HANDLE(ex7_20); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "foo bar"); - EXPECT_SCALAR("?", 0, "baz"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.21 -TEST SinglePairImplicitEntries() { - HANDLE(ex7_21); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "YAML"); - EXPECT_SCALAR("?", 0, "separate"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_NULL(0); - EXPECT_SCALAR("?", 0, "empty key entry"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "JSON"); - EXPECT_SCALAR("?", 0, "like"); - EXPECT_MAP_END(); - EXPECT_SCALAR("?", 0, "adjacent"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.22 -TEST InvalidImplicitKeys() { - try { - HANDLE(ex7_22); - } - catch (const YAML::Exception& e) { - if (e.msg == YAML::ErrorMsg::END_OF_SEQ_FLOW) - return true; - - throw; - } - return " no exception thrown"; -} - -// 7.23 -TEST FlowContent() { - HANDLE(ex7_23); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "a"); - EXPECT_SCALAR("?", 0, "b"); - EXPECT_SEQ_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "a"); - EXPECT_SCALAR("?", 0, "b"); - EXPECT_MAP_END(); - EXPECT_SCALAR("!", 0, "a"); - EXPECT_SCALAR("!", 0, "b"); - EXPECT_SCALAR("?", 0, "c"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 7.24 -TEST FlowNodes() { - HANDLE(ex7_24); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, "a"); - EXPECT_SCALAR("!", 0, "b"); - EXPECT_SCALAR("!", 1, "c"); - EXPECT_ALIAS(1); - EXPECT_SCALAR("tag:yaml.org,2002:str", 0, ""); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.1 -TEST BlockScalarHeader() { - HANDLE(ex8_1); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!", 0, "literal\n"); - EXPECT_SCALAR("!", 0, " folded\n"); - EXPECT_SCALAR("!", 0, "keep\n\n"); - EXPECT_SCALAR("!", 0, " strip"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.2 -TEST BlockIndentationHeader() { - HANDLE(ex8_2); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!", 0, "detected\n"); - EXPECT_SCALAR("!", 0, "\n\n# detected\n"); - EXPECT_SCALAR("!", 0, " explicit\n"); - EXPECT_SCALAR("!", 0, "\t\ndetected\n"); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.3 -TEST InvalidBlockScalarIndentationIndicators() { - { - bool threw = false; - try { - HANDLE(ex8_3a); - } - catch (const YAML::Exception& e) { - if (e.msg != YAML::ErrorMsg::END_OF_SEQ) - throw; - - threw = true; - } - - if (!threw) - return " no exception thrown for less indented auto-detecting " - "indentation for a literal block scalar"; - } - - { - bool threw = false; - try { - HANDLE(ex8_3b); - } - catch (const YAML::Exception& e) { - if (e.msg != YAML::ErrorMsg::END_OF_SEQ) - throw; - - threw = true; - } - - if (!threw) - return " no exception thrown for less indented auto-detecting " - "indentation for a folded block scalar"; - } - - { - bool threw = false; - try { - HANDLE(ex8_3c); - } - catch (const YAML::Exception& e) { - if (e.msg != YAML::ErrorMsg::END_OF_SEQ) - throw; - - threw = true; - } - - if (!threw) - return " no exception thrown for less indented explicit indentation for " - "a literal block scalar"; - } - - return true; -} - -// 8.4 -TEST ChompingFinalLineBreak() { - HANDLE(ex8_4); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "strip"); - EXPECT_SCALAR("!", 0, "text"); - EXPECT_SCALAR("?", 0, "clip"); - EXPECT_SCALAR("!", 0, "text\n"); - EXPECT_SCALAR("?", 0, "keep"); - EXPECT_SCALAR("!", 0, "text\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.5 -TEST ChompingTrailingLines() { - HANDLE(ex8_5); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "strip"); - EXPECT_SCALAR("!", 0, "# text"); - EXPECT_SCALAR("?", 0, "clip"); - EXPECT_SCALAR("!", 0, "# text\n"); - EXPECT_SCALAR("?", 0, "keep"); - EXPECT_SCALAR("!", 0, "# text\n"); // Note: I believe this is a bug in the - // YAML spec - it should be "# text\n\n" - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.6 -TEST EmptyScalarChomping() { - HANDLE(ex8_6); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "strip"); - EXPECT_SCALAR("!", 0, ""); - EXPECT_SCALAR("?", 0, "clip"); - EXPECT_SCALAR("!", 0, ""); - EXPECT_SCALAR("?", 0, "keep"); - EXPECT_SCALAR("!", 0, "\n"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.7 -TEST LiteralScalar() { - HANDLE(ex8_7); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "literal\n\ttext\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.8 -TEST LiteralContent() { - HANDLE(ex8_8); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "\n\nliteral\n \n\ntext\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.9 -TEST FoldedScalar() { - HANDLE(ex8_9); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, "folded text\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.10 -TEST FoldedLines() { - HANDLE(ex8_10); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "\nfolded line\nnext line\n * bullet\n\n * list\n * " - "lines\n\nlast line\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.11 -TEST MoreIndentedLines() { - HANDLE(ex8_11); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "\nfolded line\nnext line\n * bullet\n\n * list\n * " - "lines\n\nlast line\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.12 -TEST EmptySeparationLines() { - HANDLE(ex8_12); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "\nfolded line\nnext line\n * bullet\n\n * list\n * " - "lines\n\nlast line\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.13 -TEST FinalEmptyLines() { - HANDLE(ex8_13); - EXPECT_DOC_START(); - EXPECT_SCALAR("!", 0, - "\nfolded line\nnext line\n * bullet\n\n * list\n * " - "lines\n\nlast line\n"); - EXPECT_DOC_END(); - DONE(); -} - -// 8.14 -TEST BlockSequence() { - HANDLE(ex8_14); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "block sequence"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SCALAR("?", 0, "three"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.15 -TEST BlockSequenceEntryTypes() { - HANDLE(ex8_15); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_NULL(0); - EXPECT_SCALAR("!", 0, "block node\n"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SEQ_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.16 -TEST BlockMappings() { - HANDLE(ex8_16); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "block mapping"); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "key"); - EXPECT_SCALAR("?", 0, "value"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.17 -TEST ExplicitBlockMappingEntries() { - HANDLE(ex8_17); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "explicit key"); - EXPECT_NULL(0); - EXPECT_SCALAR("!", 0, "block key\n"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "one"); - EXPECT_SCALAR("?", 0, "two"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.18 -TEST ImplicitBlockMappingEntries() { - HANDLE(ex8_18); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "plain key"); - EXPECT_SCALAR("?", 0, "in-line value"); - EXPECT_NULL(0); - EXPECT_NULL(0); - EXPECT_SCALAR("!", 0, "quoted key"); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("?", 0, "entry"); - EXPECT_SEQ_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.19 -TEST CompactBlockMappings() { - HANDLE(ex8_19); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sun"); - EXPECT_SCALAR("?", 0, "yellow"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "earth"); - EXPECT_SCALAR("?", 0, "blue"); - EXPECT_MAP_END(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "moon"); - EXPECT_SCALAR("?", 0, "white"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.20 -TEST BlockNodeTypes() { - HANDLE(ex8_20); - EXPECT_DOC_START(); - EXPECT_SEQ_START("?", 0); - EXPECT_SCALAR("!", 0, "flow in block"); - EXPECT_SCALAR("!", 0, "Block scalar\n"); - EXPECT_MAP_START("tag:yaml.org,2002:map", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_SEQ_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.21 -TEST BlockScalarNodes() { - HANDLE(ex8_21); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "literal"); - EXPECT_SCALAR("!", 0, "value"); // Note: I believe this is a bug in the YAML - // spec - it should be "value\n" - EXPECT_SCALAR("?", 0, "folded"); - EXPECT_SCALAR("!foo", 0, "value"); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} - -// 8.22 -TEST BlockCollectionNodes() { - HANDLE(ex8_22); - EXPECT_DOC_START(); - EXPECT_MAP_START("?", 0); - EXPECT_SCALAR("?", 0, "sequence"); - EXPECT_SEQ_START("tag:yaml.org,2002:seq", 0); - EXPECT_SCALAR("?", 0, "entry"); - EXPECT_SEQ_START("tag:yaml.org,2002:seq", 0); - EXPECT_SCALAR("?", 0, "nested"); - EXPECT_SEQ_END(); - EXPECT_SEQ_END(); - EXPECT_SCALAR("?", 0, "mapping"); - EXPECT_MAP_START("tag:yaml.org,2002:map", 0); - EXPECT_SCALAR("?", 0, "foo"); - EXPECT_SCALAR("?", 0, "bar"); - EXPECT_MAP_END(); - EXPECT_MAP_END(); - EXPECT_DOC_END(); - DONE(); -} -} -} diff --git a/test/integration/handler_spec_test.cpp b/test/integration/handler_spec_test.cpp new file mode 100644 index 0000000..1903f59 --- /dev/null +++ b/test/integration/handler_spec_test.cpp @@ -0,0 +1,1751 @@ +#include "specexamples.h" // IWYU pragma: keep +#include "yaml-cpp/eventhandler.h" +#include "yaml-cpp/yaml.h" // IWYU pragma: keep + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using ::testing::_; +using ::testing::InSequence; +using ::testing::NiceMock; +using ::testing::StrictMock; + +#define EXPECT_THROW_PARSER_EXCEPTION(statement, message) \ + ASSERT_THROW(statement, ParserException); \ + try { \ + statement; \ + } \ + catch (const ParserException& e) { \ + EXPECT_EQ(e.msg, message); \ + } + +namespace YAML { +namespace { + +class MockEventHandler : public EventHandler { + public: + MOCK_METHOD1(OnDocumentStart, void(const Mark&)); + MOCK_METHOD0(OnDocumentEnd, void()); + + MOCK_METHOD2(OnNull, void(const Mark&, anchor_t)); + MOCK_METHOD2(OnAlias, void(const Mark&, anchor_t)); + MOCK_METHOD4(OnScalar, void(const Mark&, const std::string&, anchor_t, + const std::string&)); + + MOCK_METHOD3(OnSequenceStart, + void(const Mark&, const std::string&, anchor_t)); + MOCK_METHOD0(OnSequenceEnd, void()); + + MOCK_METHOD3(OnMapStart, void(const Mark&, const std::string&, anchor_t)); + MOCK_METHOD0(OnMapEnd, void()); +}; + +class SpecTest : public ::testing::Test { + protected: + void Parse(const std::string& example) { + std::stringstream stream(example); + Parser parser(stream); + while (parser.HandleNextDocument(handler)) { + } + } + + void IgnoreParse(const std::string& example) { + std::stringstream stream(example); + Parser parser(stream); + while (parser.HandleNextDocument(nice_handler)) { + } + } + + InSequence sequence; + StrictMock handler; + NiceMock nice_handler; +}; + +TEST_F(SpecTest, Ex2_1_SeqScalars) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_1); +} + +// 2.2 +TEST_F(SpecTest, Ex2_2_MappingScalarsToScalars) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "147")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_2); +} + +// 2.3 +TEST_F(SpecTest, Ex2_3_MappingScalarsToSequences) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "american")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Boston Red Sox")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "national")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Mets")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_3); +} + +// 2.4 +TEST_F(SpecTest, Ex2_4_SequenceOfMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "name")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "name")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "63")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_4); +} + +// 2.5 +TEST_F(SpecTest, Ex2_5_SequenceOfSequences) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "name")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "63")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_5); +} + +// 2.6 +TEST_F(SpecTest, Ex2_6_MappingOfMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "63")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_6); +} + +// 2.7 +TEST_F(SpecTest, Ex2_7_TwoDocumentsInAStream) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "St Louis Cardinals")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_7); +} + +// 2.8 +TEST_F(SpecTest, Ex2_8_PlayByPlayFeed) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "time")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:20")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "player")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "action")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "strike (miss)")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "time")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:47")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "player")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "action")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "grand slam")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_8); +} + +// 2.9 +TEST_F(SpecTest, Ex2_9_SingleDocumentWithTwoComments) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_9); +} + +// 2.10 +TEST_F(SpecTest, Ex2_10_SimpleAnchor) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 1, "Sammy Sosa")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_10); +} + +// 2.11 +TEST_F(SpecTest, Ex2_11_MappingBetweenSequences) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago cubs")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-23")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-02")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-12")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-14")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_11); +} + +// 2.12 +TEST_F(SpecTest, Ex2_12_CompactNestedMapping) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "item")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "1")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "item")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "4")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "item")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Big Shoes")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "1")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_12); +} + +// 2.13 +TEST_F(SpecTest, Ex2_13_InLiteralsNewlinesArePreserved) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, + "\\//||\\/||\n" + "// || ||__")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_13); +} + +// 2.14 +TEST_F(SpecTest, Ex2_14_InFoldedScalarsNewlinesBecomeSpaces) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "Mark McGwire's year was crippled by a knee injury.")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_14); +} + +// 2.15 +TEST_F(SpecTest, + Ex2_15_FoldedNewlinesArePreservedForMoreIndentedAndBlankLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL( + handler, + OnScalar(_, "!", 0, + "Sammy Sosa completed another fine season with great stats.\n" + "\n" + " 63 Home Runs\n" + " 0.288 Batting Average\n" + "\n" + "What a year!")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_15); +} + +// 2.16 +TEST_F(SpecTest, Ex2_16_IndentationDeterminesScope) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "name")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "accomplishment")); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "Mark set a major league home run record in 1998.\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "stats")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, + "65 Home Runs\n" + "0.278 Batting Average\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_16); +} + +// 2.17 +TEST_F(SpecTest, Ex2_17_QuotedScalars) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "unicode")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Sosa did fine.\u263A")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "control")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\b1998\t1999\t2000\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hex esc")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\x0d\x0a is \r\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "single")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\"Howdy!\" he cried.")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, " # Not a 'comment'.")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "tie-fighter")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "|\\-*-/|")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_17); +} + +// 2.18 +TEST_F(SpecTest, Ex2_18_MultiLineFlowScalars) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain")); + EXPECT_CALL(handler, + OnScalar(_, "?", 0, "This unquoted scalar spans many lines.")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "So does this quoted scalar.\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_18); +} + +// TODO: 2.19 - 2.22 schema tags + +// 2.23 +TEST_F(SpecTest, Ex2_23_VariousExplicitTags) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "not-date")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "2002-04-28")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "picture")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:binary", 0, + "R0lGODlhDAAMAIQAAP//9/X\n" + "17unp5WZmZgAAAOfn515eXv\n" + "Pz7Y6OjuDg4J+fn5OTk6enp\n" + "56enmleECcgggoBADs=\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "application specific tag")); + EXPECT_CALL(handler, OnScalar(_, "!something", 0, + "The semantics of the tag\n" + "above may be different for\n" + "different documents.")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_23); +} + +// 2.24 +TEST_F(SpecTest, Ex2_24_GlobalTags) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "tag:clarkevans.com,2002:shape", 0)); + EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:circle", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "center")); + EXPECT_CALL(handler, OnMapStart(_, "?", 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "x")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "73")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "y")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "129")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "radius")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "7")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:line", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "start")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "finish")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "x")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "89")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "y")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "102")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:label", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "start")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "color")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0xFFEEBB")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "text")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Pretty vector drawing.")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_24); +} + +// 2.25 +TEST_F(SpecTest, Ex2_25_UnorderedSets) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "tag:yaml.org,2002:set", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_25); +} + +// 2.26 +TEST_F(SpecTest, Ex2_26_OrderedMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:omap", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "63")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "58")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_26); +} + +// 2.27 +TEST_F(SpecTest, Ex2_27_Invoice) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:invoice", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "invoice")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "34843")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "date")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-01-23")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bill-to")); + EXPECT_CALL(handler, OnMapStart(_, "?", 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "given")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chris")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "family")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Dumars")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "address")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "lines")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, + "458 Walkman Dr.\n" + "Suite #292\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "city")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Royal Oak")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "state")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "MI")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "postal")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "48046")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "ship-to")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "product")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL394D")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "4")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "description")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "price")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "450.00")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL4438H")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "1")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "description")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "price")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2392.00")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "tax")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "251.42")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "total")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "4443.52")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "comments")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, + "Late afternoon is best. Backup contact is " + "Nancy Billsmer @ 338-4338.")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_27); +} + +// 2.28 +TEST_F(SpecTest, Ex2_28_LogFile) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:01:42 -5")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "User")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning")); + EXPECT_CALL(handler, + OnScalar(_, "?", 0, "This is an error message for the log file")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:02:31 -5")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "User")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning")); + EXPECT_CALL(handler, + OnScalar(_, "?", 0, "A slightly different error message.")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Date")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:03:17 -5")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "User")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Fatal")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Unknown variable \"bar\"")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Stack")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "file")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "TopClass.py")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "line")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "23")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "code")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "x = MoreObject(\"345\\n\")\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "file")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "MoreClass.py")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "line")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "58")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "code")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo = bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex2_28); +} + +// TODO: 5.1 - 5.2 BOM + +// 5.3 +TEST_F(SpecTest, Ex5_3_BlockStructureIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "green")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_3); +} + +// 5.4 +TEST_F(SpecTest, Ex5_4_FlowStructureIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "green")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_4); +} + +// 5.5 +TEST_F(SpecTest, Ex5_5_CommentIndicator) { Parse(ex5_5); } + +// 5.6 +TEST_F(SpecTest, Ex5_6_NodePropertyIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "anchored")); + EXPECT_CALL(handler, OnScalar(_, "!local", 1, "value")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "alias")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_6); +} + +// 5.7 +TEST_F(SpecTest, Ex5_7_BlockScalarIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "some\ntext\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "some text\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_7); +} + +// 5.8 +TEST_F(SpecTest, Ex5_8_QuotedScalarIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "single")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "double")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_8); +} + +// TODO: 5.9 directive +// TODO: 5.10 reserved indicator + +// 5.11 +TEST_F(SpecTest, Ex5_11_LineBreakCharacters) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, + "Line break (no glyph)\n" + "Line break (glyphed)\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_11); +} + +// 5.12 +TEST_F(SpecTest, Ex5_12_TabsAndSpaces) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Quoted\t")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "block")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, + "void main() {\n" + "\tprintf(\"Hello, world!\\n\");\n" + "}")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_12); +} + +// 5.13 +TEST_F(SpecTest, Ex5_13_EscapedCharacters) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL( + handler, + OnScalar(_, "!", 0, + "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " + + std::string("\x00", 1) + + " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex5_13); +} + +// 5.14 +TEST_F(SpecTest, Ex5_14_InvalidEscapedCharacters) { + EXPECT_THROW_PARSER_EXCEPTION( + IgnoreParse(ex5_14), std::string(YAML::ErrorMsg::INVALID_ESCAPE) + "c"); +} + +// 6.1 +TEST_F(SpecTest, Ex6_1_IndentationSpaces) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Not indented")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "By one space")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "By four\n spaces\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Flow style")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "By two")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Also by two")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Still by two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_1); +} + +// 6.2 +TEST_F(SpecTest, Ex6_2_IndentationIndicators) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "a")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "b")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "c")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "d")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_2); +} + +// 6.3 +TEST_F(SpecTest, Ex6_3_SeparationSpaces) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_3); +} + +// 6.4 +TEST_F(SpecTest, Ex6_4_LinePrefixes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "text lines")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text lines")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "block")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n \tlines\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_4); +} + +// 6.5 +TEST_F(SpecTest, Ex6_5_EmptyLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Folding")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Empty line\nas a line feed")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chomping")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Clipped empty lines\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_5); +} + +// 6.6 +TEST_F(SpecTest, Ex6_6_LineFolding) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "trimmed\n\n\nas space")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_6); +} + +// 6.7 +TEST_F(SpecTest, Ex6_7_BlockFolding) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo \n\n\t bar\n\nbaz\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_7); +} + +// 6.8 +TEST_F(SpecTest, Ex6_8_FlowFolding) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, " foo\nbar\nbaz ")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_8); +} + +// 6.9 +TEST_F(SpecTest, Ex6_9_SeparatedComment) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_9); +} + +// 6.10 +TEST_F(SpecTest, Ex6_10_CommentLines) { Parse(ex6_10); } + +// 6.11 +TEST_F(SpecTest, _MultiLineComments) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_11); +} + +// 6.12 +TEST_F(SpecTest, Ex6_12_SeparationSpacesII) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "first")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "last")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sosa")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "65")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_12); +} + +// 6.13 +TEST_F(SpecTest, Ex6_13_ReservedDirectives) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_13); +} + +// 6.14 +TEST_F(SpecTest, Ex6_14_YAMLDirective) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_14); +} + +// 6.15 +TEST_F(SpecTest, Ex6_15_InvalidRepeatedYAMLDirective) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_15), + ErrorMsg::REPEATED_YAML_DIRECTIVE); +} + +// 6.16 +TEST_F(SpecTest, Ex6_16_TagDirective) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_16); +} + +// 6.17 +TEST_F(SpecTest, Ex6_17_InvalidRepeatedTagDirective) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_17), + YAML::ErrorMsg::REPEATED_TAG_DIRECTIVE); +} + +// 6.18 +TEST_F(SpecTest, Ex6_18_PrimaryTagHandle) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "bar")); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_18); +} + +// 6.19 +TEST_F(SpecTest, Ex6_19_SecondaryTagHandle) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/int", 0, "1 - 3")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_19); +} + +// 6.20 +TEST_F(SpecTest, Ex6_20_TagHandles) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_20); +} + +// 6.21 +TEST_F(SpecTest, Ex6_21_LocalTagPrefix) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "fluorescent")); + EXPECT_CALL(handler, OnDocumentEnd()); + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "green")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_21); +} + +// 6.22 +TEST_F(SpecTest, Ex6_22_GlobalTagPrefix) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_22); +} + +// 6.23 +TEST_F(SpecTest, Ex6_23_NodeProperties) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 1, "foo")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar")); + EXPECT_CALL(handler, OnScalar(_, "?", 2, "baz")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_23); +} + +// 6.24 +TEST_F(SpecTest, Ex6_24_VerbatimTags) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "!bar", 0, "baz")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_24); +} + +// TODO: Implement +TEST_F(SpecTest, DISABLED_Ex6_25_InvalidVerbatimTags) { + Parse(ex6_25); + FAIL() << "not implemented yet"; +} + +// 6.26 +TEST_F(SpecTest, Ex6_26_TagShorthands) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!local", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar")); + EXPECT_CALL(handler, + OnScalar(_, "tag:example.com,2000:app/tag%21", 0, "baz")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_26); +} + +// 6.27 +TEST_F(SpecTest, Ex6_27a_InvalidTagShorthands) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_27a), + ErrorMsg::TAG_WITH_NO_SUFFIX); +} + +// TODO: should we reject this one (since !h! is not declared)? +TEST_F(SpecTest, DISABLED_Ex6_27b_InvalidTagShorthands) { + Parse(ex6_27b); + FAIL() << "not implemented yet"; +} + +// 6.28 +TEST_F(SpecTest, Ex6_28_NonSpecificTags) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "12")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "12")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "12")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_28); +} + +// 6.29 +TEST_F(SpecTest, Ex6_29_NodeAnchors) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence")); + EXPECT_CALL(handler, OnScalar(_, "?", 1, "Value")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex6_29); +} + +// 7.1 +TEST_F(SpecTest, Ex7_1_AliasNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence")); + EXPECT_CALL(handler, OnScalar(_, "?", 1, "Foo")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Override anchor")); + EXPECT_CALL(handler, OnScalar(_, "?", 2, "Bar")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Reuse anchor")); + EXPECT_CALL(handler, OnAlias(_, 2)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_1); +} + +// 7.2 +TEST_F(SpecTest, Ex7_2_EmptyNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "")); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_2); +} + +// 7.3 +TEST_F(SpecTest, Ex7_3_CompletelyEmptyNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_3); +} + +// 7.4 +TEST_F(SpecTest, Ex7_4_DoubleQuotedImplicitKeys) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_4); +} + +// 7.5 +TEST_F(SpecTest, Ex7_5_DoubleQuotedLineBreaks) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL( + handler, + OnScalar(_, "!", 0, + "folded to a space,\nto a line feed, or \t \tnon-content")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_5); +} + +// 7.6 +TEST_F(SpecTest, Ex7_6_DoubleQuotedLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL( + handler, + OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty ")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_6); +} + +// 7.7 +TEST_F(SpecTest, Ex7_7_SingleQuotedCharacters) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "here's to \"quotes\"")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_7); +} + +// 7.8 +TEST_F(SpecTest, Ex7_8_SingleQuotedImplicitKeys) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_8); +} + +// 7.9 +TEST_F(SpecTest, Ex7_9_SingleQuotedLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL( + handler, + OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty ")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_9); +} + +// 7.10 +TEST_F(SpecTest, Ex7_10_PlainCharacters) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "Up, up, and away!")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Up, up, and away!")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_10); +} + +// 7.11 +TEST_F(SpecTest, Ex7_11_PlainImplicitKeys) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit block key")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit flow key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_11); +} + +// 7.12 +TEST_F(SpecTest, Ex7_12_PlainLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, + "1st non-empty\n2nd non-empty 3rd non-empty")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_12); +} + +// 7.13 +TEST_F(SpecTest, Ex7_13_FlowSequence) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "three")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "four")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_13); +} + +// 7.14 +TEST_F(SpecTest, Ex7_14_FlowSequenceEntries) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "double quoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "single quoted")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain text")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "single")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "pair")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_14); +} + +// 7.15 +TEST_F(SpecTest, Ex7_15_FlowMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "three")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "four")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "five")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "six")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "seven")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "eight")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_15); +} + +// 7.16 +TEST_F(SpecTest, Ex7_16_FlowMappingEntries) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_16); +} + +// 7.17 +TEST_F(SpecTest, Ex7_17_FlowMappingSeparateValues) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "unquoted")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "separate")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://foo.com")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted value")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted key")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_17); +} + +// 7.18 +TEST_F(SpecTest, Ex7_18_FlowMappingAdjacentValues) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "adjacent")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "readable")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "empty")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_18); +} + +// 7.19 +TEST_F(SpecTest, Ex7_19_SinglePairFlowMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_19); +} + +// 7.20 +TEST_F(SpecTest, Ex7_20_SinglePairExplicitEntry) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo bar")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_20); +} + +// 7.21 +TEST_F(SpecTest, Ex7_21_SinglePairImplicitEntries) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "YAML")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "separate")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "empty key entry")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "JSON")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "like")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "adjacent")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_21); +} + +// 7.22 +TEST_F(SpecTest, Ex7_22_InvalidImplicitKeys) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex7_22), + YAML::ErrorMsg::END_OF_SEQ_FLOW); +} + +// 7.23 +TEST_F(SpecTest, Ex7_23_FlowContent) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "a")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "b")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "a")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "b")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "a")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "b")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "c")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_23); +} + +// 7.24 +TEST_F(SpecTest, Ex7_24_FlowNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "a")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "b")); + EXPECT_CALL(handler, OnScalar(_, "!", 1, "c")); + EXPECT_CALL(handler, OnAlias(_, 1)); + EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex7_24); +} + +// 8.1 +TEST_F(SpecTest, Ex8_1_BlockScalarHeader) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, " folded\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "keep\n\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, " strip")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_1); +} + +// 8.2 +TEST_F(SpecTest, Ex8_2_BlockIndentationHeader) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "detected\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\n# detected\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, " explicit\n")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\t\ndetected\n")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_2); +} + +// 8.3 +TEST_F(SpecTest, Ex8_3a_InvalidBlockScalarIndentationIndicators) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3a), + YAML::ErrorMsg::END_OF_SEQ); +} + +TEST_F(SpecTest, Ex8_3b_InvalidBlockScalarIndentationIndicators) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3b), + YAML::ErrorMsg::END_OF_SEQ); +} + +TEST_F(SpecTest, Ex8_3c_InvalidBlockScalarIndentationIndicators) { + EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3c), ErrorMsg::END_OF_SEQ); +} + +// 8.4 +TEST_F(SpecTest, Ex8_4_ChompingFinalLineBreak) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_4); +} + +// 8.5 +TEST_F(SpecTest, DISABLED_Ex8_5_ChompingTrailingLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep")); + // NOTE: I believe this is a bug in the YAML spec - + // it should be "# text\n\n" + EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_5); +} + +// 8.6 +TEST_F(SpecTest, Ex8_6_EmptyScalarChomping) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_6); +} + +// 8.7 +TEST_F(SpecTest, Ex8_7_LiteralScalar) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n\ttext\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_7); +} + +// 8.8 +TEST_F(SpecTest, Ex8_8_LiteralContent) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\nliteral\n \n\ntext\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_8); +} + +// 8.9 +TEST_F(SpecTest, Ex8_9_FoldedScalar) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "folded text\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_9); +} + +// 8.10 +TEST_F(SpecTest, Ex8_10_FoldedLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "\nfolded line\nnext line\n * bullet\n\n * list\n * " + "lines\n\nlast line\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_10); +} + +// 8.11 +TEST_F(SpecTest, Ex8_11_MoreIndentedLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "\nfolded line\nnext line\n * bullet\n\n * list\n * " + "lines\n\nlast line\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_11); +} + +// 8.12 +TEST_F(SpecTest, Ex8_12_EmptySeparationLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "\nfolded line\nnext line\n * bullet\n\n * list\n * " + "lines\n\nlast line\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_12); +} + +// 8.13 +TEST_F(SpecTest, Ex8_13_FinalEmptyLines) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, + OnScalar(_, "!", 0, + "\nfolded line\nnext line\n * bullet\n\n * list\n * " + "lines\n\nlast line\n")); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_13); +} + +// 8.14 +TEST_F(SpecTest, Ex8_14_BlockSequence) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "block sequence")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "three")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_14); +} + +// 8.15 +TEST_F(SpecTest, Ex8_15_BlockSequenceEntryTypes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "block node\n")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_15); +} + +// 8.16 +TEST_F(SpecTest, Ex8_16_BlockMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "block mapping")); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_16); +} + +// 8.17 +TEST_F(SpecTest, Ex8_17_ExplicitBlockMappingEntries) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit key")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "block key\n")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "one")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "two")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_17); +} + +// 8.18 +TEST_F(SpecTest, Ex8_18_ImplicitBlockMappingEntries) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain key")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "in-line value")); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnNull(_, 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "quoted key")); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_18); +} + +// 8.19 +TEST_F(SpecTest, Ex8_19_CompactBlockMappings) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sun")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "yellow")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "earth")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "moon")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "white")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_19); +} + +// 8.20 +TEST_F(SpecTest, Ex8_20_BlockNodeTypes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnSequenceStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "flow in block")); + EXPECT_CALL(handler, OnScalar(_, "!", 0, "Block scalar\n")); + EXPECT_CALL(handler, OnMapStart(_, "tag:yaml.org,2002:map", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_20); +} + +// 8.21 +TEST_F(SpecTest, DISABLED_Ex8_21_BlockScalarNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal")); + // NOTE: I believe this is a bug in the YAML spec + // - it should be "value\n" + EXPECT_CALL(handler, OnScalar(_, "!", 0, "value")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded")); + EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "value")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_21); +} + +// 8.22 +TEST_F(SpecTest, Ex8_22_BlockCollectionNodes) { + EXPECT_CALL(handler, OnDocumentStart(_)); + EXPECT_CALL(handler, OnMapStart(_, "?", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence")); + EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry")); + EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested")); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnSequenceEnd()); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping")); + EXPECT_CALL(handler, OnMapStart(_, "tag:yaml.org,2002:map", 0)); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar")); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnMapEnd()); + EXPECT_CALL(handler, OnDocumentEnd()); + Parse(ex8_22); +} +} +} diff --git a/test/specexamples.h b/test/specexamples.h index 913d048..3c81c77 100644 --- a/test/specexamples.h +++ b/test/specexamples.h @@ -1,5 +1,4 @@ -namespace Test { -namespace Spec { +namespace { const char *ex2_1 = "- Mark McGwire\n" "- Sammy Sosa\n" @@ -845,4 +844,3 @@ const char *ex8_22 = "mapping: !!map\n" " foo: bar\n"; } -} diff --git a/test/spectests.cpp b/test/spectests.cpp deleted file mode 100644 index 156501f..0000000 --- a/test/spectests.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include - -#include "spectests.h" -#include "yaml-cpp/yaml.h" // IWYU pragma: keep - -namespace YAML { -class Exception; -} // namespace YAML - -namespace Test { -namespace { -void RunSpecTest(TEST (*test)(), const std::string& index, - const std::string& name, int& passed, int& total) { - TEST ret; - try { - ret = test(); - } - catch (const YAML::Exception& e) { - ret.ok = false; - ret.error = std::string(" Exception caught: ") + e.what(); - } - - if (!ret.ok) { - std::cout << "Spec test " << index << " failed: " << name << "\n"; - std::cout << ret.error << "\n"; - } - - if (ret.ok) - passed++; - total++; -} -} - -bool RunSpecTests() { - int passed = 0; - int total = 0; - RunSpecTest(&Spec::SeqScalars, "2.1", "Sequence of Scalars", passed, total); - RunSpecTest(&Spec::MappingScalarsToScalars, "2.2", - "Mapping Scalars to Scalars", passed, total); - RunSpecTest(&Spec::MappingScalarsToSequences, "2.3", - "Mapping Scalars to Sequences", passed, total); - RunSpecTest(&Spec::SequenceOfMappings, "2.4", "Sequence of Mappings", passed, - total); - RunSpecTest(&Spec::SequenceOfSequences, "2.5", "Sequence of Sequences", - passed, total); - RunSpecTest(&Spec::MappingOfMappings, "2.6", "Mapping of Mappings", passed, - total); - RunSpecTest(&Spec::TwoDocumentsInAStream, "2.7", "Two Documents in a Stream", - passed, total); - RunSpecTest(&Spec::PlayByPlayFeed, "2.8", "Play by Play Feed from a Game", - passed, total); - RunSpecTest(&Spec::SingleDocumentWithTwoComments, "2.9", - "Single Document with Two Comments", passed, total); - RunSpecTest(&Spec::SimpleAnchor, "2.10", - "Node for \"Sammy Sosa\" appears twice in this document", passed, - total); - RunSpecTest(&Spec::MappingBetweenSequences, "2.11", - "Mapping between Sequences", passed, total); - RunSpecTest(&Spec::CompactNestedMapping, "2.12", "Compact Nested Mapping", - passed, total); - RunSpecTest(&Spec::InLiteralsNewlinesArePreserved, "2.13", - "In literals, newlines are preserved", passed, total); - RunSpecTest(&Spec::InFoldedScalarsNewlinesBecomeSpaces, "2.14", - "In folded scalars, newlines become spaces", passed, total); - RunSpecTest( - &Spec::FoldedNewlinesArePreservedForMoreIndentedAndBlankLines, "2.15", - "Folded newlines are preserved for \"more indented\" and blank lines", - passed, total); - RunSpecTest(&Spec::IndentationDeterminesScope, "2.16", - "Indentation determines scope", passed, total); - RunSpecTest(&Spec::QuotedScalars, "2.17", "Quoted scalars", passed, total); - RunSpecTest(&Spec::MultiLineFlowScalars, "2.18", "Multi-line flow scalars", - passed, total); - - RunSpecTest(&Spec::VariousExplicitTags, "2.23", "Various Explicit Tags", - passed, total); - RunSpecTest(&Spec::GlobalTags, "2.24", "Global Tags", passed, total); - RunSpecTest(&Spec::UnorderedSets, "2.25", "Unordered Sets", passed, total); - RunSpecTest(&Spec::OrderedMappings, "2.26", "Ordered Mappings", passed, - total); - RunSpecTest(&Spec::Invoice, "2.27", "Invoice", passed, total); - RunSpecTest(&Spec::LogFile, "2.28", "Log File", passed, total); - - RunSpecTest(&Spec::BlockStructureIndicators, "5.3", - "Block Structure Indicators", passed, total); - RunSpecTest(&Spec::FlowStructureIndicators, "5.4", - "Flow Structure Indicators", passed, total); - RunSpecTest(&Spec::NodePropertyIndicators, "5.6", "Node Property Indicators", - passed, total); - RunSpecTest(&Spec::BlockScalarIndicators, "5.7", "Block Scalar Indicators", - passed, total); - RunSpecTest(&Spec::QuotedScalarIndicators, "5.8", "Quoted Scalar Indicators", - passed, total); - RunSpecTest(&Spec::LineBreakCharacters, "5.11", "Line Break Characters", - passed, total); - RunSpecTest(&Spec::TabsAndSpaces, "5.12", "Tabs and Spaces", passed, total); - RunSpecTest(&Spec::EscapedCharacters, "5.13", "Escaped Characters", passed, - total); - RunSpecTest(&Spec::InvalidEscapedCharacters, "5.14", - "Invalid Escaped Characters", passed, total); - - RunSpecTest(&Spec::IndentationSpaces, "6.1", "Indentation Spaces", passed, - total); - RunSpecTest(&Spec::IndentationIndicators, "6.2", "Indentation Indicators", - passed, total); - RunSpecTest(&Spec::SeparationSpaces, "6.3", "Separation Spaces", passed, - total); - RunSpecTest(&Spec::LinePrefixes, "6.4", "Line Prefixes", passed, total); - RunSpecTest(&Spec::EmptyLines, "6.5", "Empty Lines", passed, total); - RunSpecTest(&Spec::LineFolding, "6.6", "Line Folding", passed, total); - RunSpecTest(&Spec::BlockFolding, "6.7", "Block Folding", passed, total); - RunSpecTest(&Spec::FlowFolding, "6.8", "Flow Folding", passed, total); - RunSpecTest(&Spec::SeparatedComment, "6.9", "Separated Comment", passed, - total); - RunSpecTest(&Spec::CommentLines, "6.10", "Comment Lines", passed, total); - RunSpecTest(&Spec::MultiLineComments, "6.11", "Multi-Line Comments", passed, - total); - RunSpecTest(&Spec::SeparationSpacesII, "6.12", "Separation Spaces", passed, - total); - RunSpecTest(&Spec::ReservedDirectives, "6.13", "Reserved Directives", passed, - total); - RunSpecTest(&Spec::YAMLDirective, "6.14", "YAML Directive", passed, total); - RunSpecTest(&Spec::InvalidRepeatedYAMLDirective, "6.15", - "Invalid Repeated YAML Directive", passed, total); - RunSpecTest(&Spec::TagDirective, "6.16", "Tag Directive", passed, total); - RunSpecTest(&Spec::InvalidRepeatedTagDirective, "6.17", - "Invalid Repeated Tag Directive", passed, total); - RunSpecTest(&Spec::PrimaryTagHandle, "6.18", "Primary Tag Handle", passed, - total); - RunSpecTest(&Spec::SecondaryTagHandle, "6.19", "SecondaryTagHandle", passed, - total); - RunSpecTest(&Spec::TagHandles, "6.20", "TagHandles", passed, total); - RunSpecTest(&Spec::LocalTagPrefix, "6.21", "LocalTagPrefix", passed, total); - RunSpecTest(&Spec::GlobalTagPrefix, "6.22", "GlobalTagPrefix", passed, total); - RunSpecTest(&Spec::NodeProperties, "6.23", "NodeProperties", passed, total); - RunSpecTest(&Spec::VerbatimTags, "6.24", "Verbatim Tags", passed, total); - RunSpecTest(&Spec::InvalidVerbatimTags, "6.25", "Invalid Verbatim Tags", - passed, total); - RunSpecTest(&Spec::TagShorthands, "6.26", "Tag Shorthands", passed, total); - RunSpecTest(&Spec::InvalidTagShorthands, "6.27", "Invalid Tag Shorthands", - passed, total); - RunSpecTest(&Spec::NonSpecificTags, "6.28", "Non Specific Tags", passed, - total); - RunSpecTest(&Spec::NodeAnchors, "6.29", "Node Anchors", passed, total); - - RunSpecTest(&Spec::AliasNodes, "7.1", "Alias Nodes", passed, total); - RunSpecTest(&Spec::EmptyNodes, "7.2", "Empty Nodes", passed, total); - RunSpecTest(&Spec::CompletelyEmptyNodes, "7.3", "Completely Empty Nodes", - passed, total); - RunSpecTest(&Spec::DoubleQuotedImplicitKeys, "7.4", - "Double Quoted Implicit Keys", passed, total); - RunSpecTest(&Spec::DoubleQuotedLineBreaks, "7.5", "Double Quoted Line Breaks", - passed, total); - RunSpecTest(&Spec::DoubleQuotedLines, "7.6", "Double Quoted Lines", passed, - total); - RunSpecTest(&Spec::SingleQuotedCharacters, "7.7", "Single Quoted Characters", - passed, total); - RunSpecTest(&Spec::SingleQuotedImplicitKeys, "7.8", - "Single Quoted Implicit Keys", passed, total); - RunSpecTest(&Spec::SingleQuotedLines, "7.9", "Single Quoted Lines", passed, - total); - RunSpecTest(&Spec::PlainCharacters, "7.10", "Plain Characters", passed, - total); - RunSpecTest(&Spec::PlainImplicitKeys, "7.11", "Plain Implicit Keys", passed, - total); - RunSpecTest(&Spec::PlainLines, "7.12", "Plain Lines", passed, total); - RunSpecTest(&Spec::FlowSequence, "7.13", "Flow Sequence", passed, total); - RunSpecTest(&Spec::FlowSequenceEntries, "7.14", "Flow Sequence Entries", - passed, total); - RunSpecTest(&Spec::FlowMappings, "7.15", "Flow Mappings", passed, total); - RunSpecTest(&Spec::FlowMappingEntries, "7.16", "Flow Mapping Entries", passed, - total); - RunSpecTest(&Spec::FlowMappingSeparateValues, "7.17", - "Flow Mapping Separate Values", passed, total); - RunSpecTest(&Spec::FlowMappingAdjacentValues, "7.18", - "Flow Mapping Adjacent Values", passed, total); - RunSpecTest(&Spec::SinglePairFlowMappings, "7.19", - "Single Pair Flow Mappings", passed, total); - RunSpecTest(&Spec::SinglePairExplicitEntry, "7.20", - "Single Pair Explicit Entry", passed, total); - RunSpecTest(&Spec::SinglePairImplicitEntries, "7.21", - "Single Pair Implicit Entries", passed, total); - RunSpecTest(&Spec::InvalidImplicitKeys, "7.22", "Invalid Implicit Keys", - passed, total); - RunSpecTest(&Spec::FlowContent, "7.23", "Flow Content", passed, total); - RunSpecTest(&Spec::FlowNodes, "7.24", "FlowNodes", passed, total); - - RunSpecTest(&Spec::BlockScalarHeader, "8.1", "Block Scalar Header", passed, - total); - RunSpecTest(&Spec::BlockIndentationHeader, "8.2", "Block Indentation Header", - passed, total); - RunSpecTest(&Spec::InvalidBlockScalarIndentationIndicators, "8.3", - "Invalid Block Scalar Indentation Indicators", passed, total); - RunSpecTest(&Spec::ChompingFinalLineBreak, "8.4", "Chomping Final Line Break", - passed, total); - RunSpecTest(&Spec::ChompingTrailingLines, "8.5", "Chomping Trailing Lines", - passed, total); - RunSpecTest(&Spec::EmptyScalarChomping, "8.6", "Empty Scalar Chomping", - passed, total); - RunSpecTest(&Spec::LiteralScalar, "8.7", "Literal Scalar", passed, total); - RunSpecTest(&Spec::LiteralContent, "8.8", "Literal Content", passed, total); - RunSpecTest(&Spec::FoldedScalar, "8.9", "Folded Scalar", passed, total); - RunSpecTest(&Spec::FoldedLines, "8.10", "Folded Lines", passed, total); - RunSpecTest(&Spec::MoreIndentedLines, "8.11", "More Indented Lines", passed, - total); - RunSpecTest(&Spec::EmptySeparationLines, "8.12", "Empty Separation Lines", - passed, total); - RunSpecTest(&Spec::FinalEmptyLines, "8.13", "Final Empty Lines", passed, - total); - RunSpecTest(&Spec::BlockSequence, "8.14", "Block Sequence", passed, total); - RunSpecTest(&Spec::BlockSequenceEntryTypes, "8.15", - "Block Sequence Entry Types", passed, total); - RunSpecTest(&Spec::BlockMappings, "8.16", "Block Mappings", passed, total); - RunSpecTest(&Spec::ExplicitBlockMappingEntries, "8.17", - "Explicit Block Mapping Entries", passed, total); - RunSpecTest(&Spec::ImplicitBlockMappingEntries, "8.18", - "Implicit Block Mapping Entries", passed, total); - RunSpecTest(&Spec::CompactBlockMappings, "8.19", "Compact Block Mappings", - passed, total); - RunSpecTest(&Spec::BlockNodeTypes, "8.20", "Block Node Types", passed, total); - RunSpecTest(&Spec::BlockScalarNodes, "8.21", "Block Scalar Nodes", passed, - total); - RunSpecTest(&Spec::BlockCollectionNodes, "8.22", "Block Collection Nodes", - passed, total); - - std::cout << "Spec tests: " << passed << "/" << total << " passed\n"; - return passed == total; -} -} diff --git a/test/spectests.h b/test/spectests.h deleted file mode 100644 index 14ec211..0000000 --- a/test/spectests.h +++ /dev/null @@ -1,352 +0,0 @@ -#ifndef SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -#if defined(_MSC_VER) || \ - (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ - (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 -#pragma once -#endif - -#include "teststruct.h" - -namespace Test { -namespace Spec { -// 2.1 -TEST SeqScalars(); - -// 2.2 -TEST MappingScalarsToScalars(); - -// 2.3 -TEST MappingScalarsToSequences(); - -// 2.4 -TEST SequenceOfMappings(); - -// 2.5 -TEST SequenceOfSequences(); - -// 2.6 -TEST MappingOfMappings(); - -// 2.7 -TEST TwoDocumentsInAStream(); - -// 2.8 -TEST PlayByPlayFeed(); - -// 2.9 -TEST SingleDocumentWithTwoComments(); - -// 2.10 -TEST SimpleAnchor(); - -// 2.11 -TEST MappingBetweenSequences(); - -// 2.12 -TEST CompactNestedMapping(); - -// 2.13 -TEST InLiteralsNewlinesArePreserved(); - -// 2.14 -TEST InFoldedScalarsNewlinesBecomeSpaces(); - -// 2.15 -TEST FoldedNewlinesArePreservedForMoreIndentedAndBlankLines(); - -// 2.16 -TEST IndentationDeterminesScope(); - -// 2.17 -TEST QuotedScalars(); - -// 2.18 -TEST MultiLineFlowScalars(); - -// TODO: 2.19 - 2.22 schema tags - -// 2.23 -TEST VariousExplicitTags(); - -// 2.24 -TEST GlobalTags(); - -// 2.25 -TEST UnorderedSets(); - -// 2.26 -TEST OrderedMappings(); - -// 2.27 -TEST Invoice(); - -// 2.28 -TEST LogFile(); - -// TODO: 5.1 - 5.2 BOM - -// 5.3 -TEST BlockStructureIndicators(); - -// 5.4 -TEST FlowStructureIndicators(); - -// 5.5 -TEST CommentIndicator(); - -// 5.6 -TEST NodePropertyIndicators(); - -// 5.7 -TEST BlockScalarIndicators(); - -// 5.8 -TEST QuotedScalarIndicators(); - -// TODO: 5.9 directive -// TODO: 5.10 reserved indicator - -// 5.11 -TEST LineBreakCharacters(); - -// 5.12 -TEST TabsAndSpaces(); - -// 5.13 -TEST EscapedCharacters(); - -// 5.14 -TEST InvalidEscapedCharacters(); - -// 6.1 -TEST IndentationSpaces(); - -// 6.2 -TEST IndentationIndicators(); - -// 6.3 -TEST SeparationSpaces(); - -// 6.4 -TEST LinePrefixes(); - -// 6.5 -TEST EmptyLines(); - -// 6.6 -TEST LineFolding(); - -// 6.7 -TEST BlockFolding(); - -// 6.8 -TEST FlowFolding(); - -// 6.9 -TEST SeparatedComment(); - -// 6.10 -TEST CommentLines(); - -// 6.11 -TEST MultiLineComments(); - -// 6.12 -TEST SeparationSpacesII(); - -// 6.13 -TEST ReservedDirectives(); - -// 6.14 -TEST YAMLDirective(); - -// 6.15 -TEST InvalidRepeatedYAMLDirective(); - -// 6.16 -TEST TagDirective(); - -// 6.17 -TEST InvalidRepeatedTagDirective(); - -// 6.18 -TEST PrimaryTagHandle(); - -// 6.19 -TEST SecondaryTagHandle(); - -// 6.20 -TEST TagHandles(); - -// 6.21 -TEST LocalTagPrefix(); - -// 6.22 -TEST GlobalTagPrefix(); - -// 6.23 -TEST NodeProperties(); - -// 6.24 -TEST VerbatimTags(); - -// 6.25 -TEST InvalidVerbatimTags(); - -// 6.26 -TEST TagShorthands(); - -// 6.27 -TEST InvalidTagShorthands(); - -// 6.28 -TEST NonSpecificTags(); - -// 6.29 -TEST NodeAnchors(); - -// 7.1 -TEST AliasNodes(); - -// 7.2 -TEST EmptyNodes(); - -// 7.3 -TEST CompletelyEmptyNodes(); - -// 7.4 -TEST DoubleQuotedImplicitKeys(); - -// 7.5 -TEST DoubleQuotedLineBreaks(); - -// 7.6 -TEST DoubleQuotedLines(); - -// 7.7 -TEST SingleQuotedCharacters(); - -// 7.8 -TEST SingleQuotedImplicitKeys(); - -// 7.9 -TEST SingleQuotedLines(); - -// 7.10 -TEST PlainCharacters(); - -// 7.11 -TEST PlainImplicitKeys(); - -// 7.12 -TEST PlainLines(); - -// 7.13 -TEST FlowSequence(); - -// 7.14 -TEST FlowSequenceEntries(); - -// 7.15 -TEST FlowMappings(); - -// 7.16 -TEST FlowMappingEntries(); - -// 7.17 -TEST FlowMappingSeparateValues(); - -// 7.18 -TEST FlowMappingAdjacentValues(); - -// 7.19 -TEST SinglePairFlowMappings(); - -// 7.20 -TEST SinglePairExplicitEntry(); - -// 7.21 -TEST SinglePairImplicitEntries(); - -// 7.22 -TEST InvalidImplicitKeys(); - -// 7.23 -TEST FlowContent(); - -// 7.24 -TEST FlowNodes(); - -// 8.1 -TEST BlockScalarHeader(); - -// 8.2 -TEST BlockIndentationHeader(); - -// 8.3 -TEST InvalidBlockScalarIndentationIndicators(); - -// 8.4 -TEST ChompingFinalLineBreak(); - -// 8.5 -TEST ChompingTrailingLines(); - -// 8.6 -TEST EmptyScalarChomping(); - -// 8.7 -TEST LiteralScalar(); - -// 8.8 -TEST LiteralContent(); - -// 8.9 -TEST FoldedScalar(); - -// 8.10 -TEST FoldedLines(); - -// 8.11 -TEST MoreIndentedLines(); - -// 8.12 -TEST EmptySeparationLines(); - -// 8.13 -TEST FinalEmptyLines(); - -// 8.14 -TEST BlockSequence(); - -// 8.15 -TEST BlockSequenceEntryTypes(); - -// 8.16 -TEST BlockMappings(); - -// 8.17 -TEST ExplicitBlockMappingEntries(); - -// 8.18 -TEST ImplicitBlockMappingEntries(); - -// 8.19 -TEST CompactBlockMappings(); - -// 8.20 -TEST BlockNodeTypes(); - -// 8.21 -TEST BlockScalarNodes(); - -// 8.22 -TEST BlockCollectionNodes(); -} - -bool RunSpecTests(); -} - -#endif // SPECTESTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 diff --git a/test/tests.cpp b/test/tests.cpp index 8710d53..50dd8aa 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -5,7 +5,6 @@ #include "emittertests.h" #include "parsertests.h" -#include "spectests.h" #include "tests.h" namespace Test { @@ -14,9 +13,6 @@ void RunAll() { if (!RunEmitterTests()) passed = false; - if (!RunSpecTests()) - passed = false; - if (!RunParserTests()) passed = false;