Commit ace9c49e authored by Jesse Beder's avatar Jesse Beder
Browse files

Convert spec tests to gtest with gmock

parent e3f120b9
#include <cassert>
#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();
}
}
}
#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<MockEventHandler> handler;
NiceMock<MockEventHandler> 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);
}
}
}
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";
}
}
#include <iostream>
#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;
}
}
#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
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment