yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

handler_spec_test.cpp (71838B)


      1 #include "handler_test.h"
      2 #include "specexamples.h"   // IWYU pragma: keep
      3 #include "yaml-cpp/yaml.h"  // IWYU pragma: keep
      4 
      5 #include "gmock/gmock.h"
      6 #include "gtest/gtest.h"
      7 
      8 using ::testing::_;
      9 
     10 #define EXPECT_THROW_PARSER_EXCEPTION(statement, message) \
     11   ASSERT_THROW(statement, ParserException);               \
     12   try {                                                   \
     13     statement;                                            \
     14   } catch (const ParserException& e) {                    \
     15     EXPECT_EQ(e.msg, message);                            \
     16   }
     17 
     18 namespace YAML {
     19 namespace {
     20 
     21 typedef HandlerTest HandlerSpecTest;
     22 
     23 TEST_F(HandlerSpecTest, Ex2_1_SeqScalars) {
     24   EXPECT_CALL(handler, OnDocumentStart(_));
     25   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
     26   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
     27   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
     28   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
     29   EXPECT_CALL(handler, OnSequenceEnd());
     30   EXPECT_CALL(handler, OnDocumentEnd());
     31   Parse(ex2_1);
     32 }
     33 
     34 TEST_F(HandlerSpecTest, Ex2_2_MappingScalarsToScalars) {
     35   EXPECT_CALL(handler, OnDocumentStart(_));
     36   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
     37   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
     38   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
     39   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
     40   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
     41   EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
     42   EXPECT_CALL(handler, OnScalar(_, "?", 0, "147"));
     43   EXPECT_CALL(handler, OnMapEnd());
     44   EXPECT_CALL(handler, OnDocumentEnd());
     45   Parse(ex2_2);
     46 }
     47 
     48 TEST_F(HandlerSpecTest, Ex2_3_MappingScalarsToSequences) {
     49   EXPECT_CALL(handler, OnDocumentStart(_));
     50   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
     51   EXPECT_CALL(handler, OnScalar(_, "?", 0, "american"));
     52   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
     53   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Boston Red Sox"));
     54   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers"));
     55   EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees"));
     56   EXPECT_CALL(handler, OnSequenceEnd());
     57   EXPECT_CALL(handler, OnScalar(_, "?", 0, "national"));
     58   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
     59   EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Mets"));
     60   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs"));
     61   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves"));
     62   EXPECT_CALL(handler, OnSequenceEnd());
     63   EXPECT_CALL(handler, OnMapEnd());
     64   EXPECT_CALL(handler, OnDocumentEnd());
     65   Parse(ex2_3);
     66 }
     67 
     68 TEST_F(HandlerSpecTest, Ex2_4_SequenceOfMappings) {
     69   EXPECT_CALL(handler, OnDocumentStart(_));
     70   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
     71   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
     72   EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
     73   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
     74   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
     75   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
     76   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
     77   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
     78   EXPECT_CALL(handler, OnMapEnd());
     79   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
     80   EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
     81   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
     82   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
     83   EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
     84   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
     85   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
     86   EXPECT_CALL(handler, OnMapEnd());
     87   EXPECT_CALL(handler, OnSequenceEnd());
     88   EXPECT_CALL(handler, OnDocumentEnd());
     89   Parse(ex2_4);
     90 }
     91 
     92 TEST_F(HandlerSpecTest, Ex2_5_SequenceOfSequences) {
     93   EXPECT_CALL(handler, OnDocumentStart(_));
     94   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
     95   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
     96   EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
     97   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
     98   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
     99   EXPECT_CALL(handler, OnSequenceEnd());
    100   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    101   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    102   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
    103   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
    104   EXPECT_CALL(handler, OnSequenceEnd());
    105   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    106   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    107   EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
    108   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
    109   EXPECT_CALL(handler, OnSequenceEnd());
    110   EXPECT_CALL(handler, OnSequenceEnd());
    111   EXPECT_CALL(handler, OnDocumentEnd());
    112   Parse(ex2_5);
    113 }
    114 
    115 TEST_F(HandlerSpecTest, Ex2_6_MappingOfMappings) {
    116   EXPECT_CALL(handler, OnDocumentStart(_));
    117   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    118   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    119   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
    120   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
    121   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
    122   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
    123   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
    124   EXPECT_CALL(handler, OnMapEnd());
    125   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    126   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
    127   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
    128   EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
    129   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
    130   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
    131   EXPECT_CALL(handler, OnMapEnd());
    132   EXPECT_CALL(handler, OnMapEnd());
    133   EXPECT_CALL(handler, OnDocumentEnd());
    134   Parse(ex2_6);
    135 }
    136 
    137 TEST_F(HandlerSpecTest, Ex2_7_TwoDocumentsInAStream) {
    138   EXPECT_CALL(handler, OnDocumentStart(_));
    139   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    140   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    141   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    142   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
    143   EXPECT_CALL(handler, OnSequenceEnd());
    144   EXPECT_CALL(handler, OnDocumentEnd());
    145   EXPECT_CALL(handler, OnDocumentStart(_));
    146   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    147   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs"));
    148   EXPECT_CALL(handler, OnScalar(_, "?", 0, "St Louis Cardinals"));
    149   EXPECT_CALL(handler, OnSequenceEnd());
    150   EXPECT_CALL(handler, OnDocumentEnd());
    151   Parse(ex2_7);
    152 }
    153 
    154 TEST_F(HandlerSpecTest, Ex2_8_PlayByPlayFeed) {
    155   EXPECT_CALL(handler, OnDocumentStart(_));
    156   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    157   EXPECT_CALL(handler, OnScalar(_, "?", 0, "time"));
    158   EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:20"));
    159   EXPECT_CALL(handler, OnScalar(_, "?", 0, "player"));
    160   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    161   EXPECT_CALL(handler, OnScalar(_, "?", 0, "action"));
    162   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strike (miss)"));
    163   EXPECT_CALL(handler, OnMapEnd());
    164   EXPECT_CALL(handler, OnDocumentEnd());
    165   EXPECT_CALL(handler, OnDocumentStart(_));
    166   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    167   EXPECT_CALL(handler, OnScalar(_, "?", 0, "time"));
    168   EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:47"));
    169   EXPECT_CALL(handler, OnScalar(_, "?", 0, "player"));
    170   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    171   EXPECT_CALL(handler, OnScalar(_, "?", 0, "action"));
    172   EXPECT_CALL(handler, OnScalar(_, "?", 0, "grand slam"));
    173   EXPECT_CALL(handler, OnMapEnd());
    174   EXPECT_CALL(handler, OnDocumentEnd());
    175   Parse(ex2_8);
    176 }
    177 
    178 TEST_F(HandlerSpecTest, Ex2_9_SingleDocumentWithTwoComments) {
    179   EXPECT_CALL(handler, OnDocumentStart(_));
    180   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    181   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
    182   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    183   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    184   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    185   EXPECT_CALL(handler, OnSequenceEnd());
    186   EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
    187   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    188   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    189   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
    190   EXPECT_CALL(handler, OnSequenceEnd());
    191   EXPECT_CALL(handler, OnMapEnd());
    192   EXPECT_CALL(handler, OnDocumentEnd());
    193   Parse(ex2_9);
    194 }
    195 
    196 TEST_F(HandlerSpecTest, Ex2_10_SimpleAnchor) {
    197   EXPECT_CALL(handler, OnDocumentStart(_));
    198   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    199   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
    200   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    201   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    202   EXPECT_CALL(handler, OnAnchor(_, "SS"));
    203   EXPECT_CALL(handler, OnScalar(_, "?", 1, "Sammy Sosa"));
    204   EXPECT_CALL(handler, OnSequenceEnd());
    205   EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
    206   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    207   EXPECT_CALL(handler, OnAlias(_, 1));
    208   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
    209   EXPECT_CALL(handler, OnSequenceEnd());
    210   EXPECT_CALL(handler, OnMapEnd());
    211   EXPECT_CALL(handler, OnDocumentEnd());
    212   Parse(ex2_10);
    213 }
    214 
    215 TEST_F(HandlerSpecTest, Ex2_11_MappingBetweenSequences) {
    216   EXPECT_CALL(handler, OnDocumentStart(_));
    217   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    218   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    219   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers"));
    220   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago cubs"));
    221   EXPECT_CALL(handler, OnSequenceEnd());
    222   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    223   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-23"));
    224   EXPECT_CALL(handler, OnSequenceEnd());
    225   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    226   EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees"));
    227   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves"));
    228   EXPECT_CALL(handler, OnSequenceEnd());
    229   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    230   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-02"));
    231   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-12"));
    232   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-14"));
    233   EXPECT_CALL(handler, OnSequenceEnd());
    234   EXPECT_CALL(handler, OnMapEnd());
    235   EXPECT_CALL(handler, OnDocumentEnd());
    236   Parse(ex2_11);
    237 }
    238 
    239 TEST_F(HandlerSpecTest, Ex2_12_CompactNestedMapping) {
    240   EXPECT_CALL(handler, OnDocumentStart(_));
    241   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    242   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    243   EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
    244   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop"));
    245   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
    246   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
    247   EXPECT_CALL(handler, OnMapEnd());
    248   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    249   EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
    250   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball"));
    251   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
    252   EXPECT_CALL(handler, OnScalar(_, "?", 0, "4"));
    253   EXPECT_CALL(handler, OnMapEnd());
    254   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    255   EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
    256   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Big Shoes"));
    257   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
    258   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
    259   EXPECT_CALL(handler, OnMapEnd());
    260   EXPECT_CALL(handler, OnSequenceEnd());
    261   EXPECT_CALL(handler, OnDocumentEnd());
    262   Parse(ex2_12);
    263 }
    264 
    265 TEST_F(HandlerSpecTest, Ex2_13_InLiteralsNewlinesArePreserved) {
    266   EXPECT_CALL(handler, OnDocumentStart(_));
    267   EXPECT_CALL(handler, OnScalar(_, "!", 0,
    268                                 "\\//||\\/||\n"
    269                                 "// ||  ||__"));
    270   EXPECT_CALL(handler, OnDocumentEnd());
    271   Parse(ex2_13);
    272 }
    273 
    274 TEST_F(HandlerSpecTest, Ex2_14_InFoldedScalarsNewlinesBecomeSpaces) {
    275   EXPECT_CALL(handler, OnDocumentStart(_));
    276   EXPECT_CALL(handler,
    277               OnScalar(_, "!", 0,
    278                        "Mark McGwire's year was crippled by a knee injury."));
    279   EXPECT_CALL(handler, OnDocumentEnd());
    280   Parse(ex2_14);
    281 }
    282 
    283 TEST_F(HandlerSpecTest,
    284        Ex2_15_FoldedNewlinesArePreservedForMoreIndentedAndBlankLines) {
    285   EXPECT_CALL(handler, OnDocumentStart(_));
    286   EXPECT_CALL(
    287       handler,
    288       OnScalar(_, "!", 0,
    289                "Sammy Sosa completed another fine season with great stats.\n"
    290                "\n"
    291                "  63 Home Runs\n"
    292                "  0.288 Batting Average\n"
    293                "\n"
    294                "What a year!"));
    295   EXPECT_CALL(handler, OnDocumentEnd());
    296   Parse(ex2_15);
    297 }
    298 
    299 TEST_F(HandlerSpecTest, Ex2_16_IndentationDeterminesScope) {
    300   EXPECT_CALL(handler, OnDocumentStart(_));
    301   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    302   EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
    303   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    304   EXPECT_CALL(handler, OnScalar(_, "?", 0, "accomplishment"));
    305   EXPECT_CALL(handler,
    306               OnScalar(_, "!", 0,
    307                        "Mark set a major league home run record in 1998.\n"));
    308   EXPECT_CALL(handler, OnScalar(_, "?", 0, "stats"));
    309   EXPECT_CALL(handler, OnScalar(_, "!", 0,
    310                                 "65 Home Runs\n"
    311                                 "0.278 Batting Average\n"));
    312   EXPECT_CALL(handler, OnMapEnd());
    313   EXPECT_CALL(handler, OnDocumentEnd());
    314   Parse(ex2_16);
    315 }
    316 
    317 TEST_F(HandlerSpecTest, Ex2_17_QuotedScalars) {
    318   EXPECT_CALL(handler, OnDocumentStart(_));
    319   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    320   EXPECT_CALL(handler, OnScalar(_, "?", 0, "unicode"));
    321   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Sosa did fine.\xE2\x98\xBA"));
    322   EXPECT_CALL(handler, OnScalar(_, "?", 0, "control"));
    323   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\b1998\t1999\t2000\n"));
    324   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hex esc"));
    325   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\x0d\x0a is \r\n"));
    326   EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
    327   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\"Howdy!\" he cried."));
    328   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
    329   EXPECT_CALL(handler, OnScalar(_, "!", 0, " # Not a 'comment'."));
    330   EXPECT_CALL(handler, OnScalar(_, "?", 0, "tie-fighter"));
    331   EXPECT_CALL(handler, OnScalar(_, "!", 0, "|\\-*-/|"));
    332   EXPECT_CALL(handler, OnMapEnd());
    333   EXPECT_CALL(handler, OnDocumentEnd());
    334   Parse(ex2_17);
    335 }
    336 
    337 TEST_F(HandlerSpecTest, Ex2_18_MultiLineFlowScalars) {
    338   EXPECT_CALL(handler, OnDocumentStart(_));
    339   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    340   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain"));
    341   EXPECT_CALL(handler,
    342               OnScalar(_, "?", 0, "This unquoted scalar spans many lines."));
    343   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
    344   EXPECT_CALL(handler, OnScalar(_, "!", 0, "So does this quoted scalar.\n"));
    345   EXPECT_CALL(handler, OnMapEnd());
    346   EXPECT_CALL(handler, OnDocumentEnd());
    347   Parse(ex2_18);
    348 }
    349 
    350 TEST_F(HandlerSpecTest, Ex2_19_Integers) {
    351   EXPECT_CALL(handler, OnDocumentStart(_));
    352   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    353   EXPECT_CALL(handler, OnScalar(_, "?", 0, "canonical"));
    354   EXPECT_CALL(handler, OnScalar(_, "?", 0, "12345"));
    355   EXPECT_CALL(handler, OnScalar(_, "?", 0, "decimal"));
    356   EXPECT_CALL(handler, OnScalar(_, "?", 0, "+12345"));
    357   EXPECT_CALL(handler, OnScalar(_, "?", 0, "octal"));
    358   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0o14"));
    359   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hexadecimal"));
    360   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0xC"));
    361   EXPECT_CALL(handler, OnMapEnd());
    362   EXPECT_CALL(handler, OnDocumentEnd());
    363   Parse(ex2_19);
    364 }
    365 
    366 TEST_F(HandlerSpecTest, Ex2_20_FloatingPoint) {
    367   EXPECT_CALL(handler, OnDocumentStart(_));
    368   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    369   EXPECT_CALL(handler, OnScalar(_, "?", 0, "canonical"));
    370   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1.23015e+3"));
    371   EXPECT_CALL(handler, OnScalar(_, "?", 0, "exponential"));
    372   EXPECT_CALL(handler, OnScalar(_, "?", 0, "12.3015e+02"));
    373   EXPECT_CALL(handler, OnScalar(_, "?", 0, "fixed"));
    374   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1230.15"));
    375   EXPECT_CALL(handler, OnScalar(_, "?", 0, "negative infinity"));
    376   EXPECT_CALL(handler, OnScalar(_, "?", 0, "-.inf"));
    377   EXPECT_CALL(handler, OnScalar(_, "?", 0, "not a number"));
    378   EXPECT_CALL(handler, OnScalar(_, "?", 0, ".NaN"));
    379   EXPECT_CALL(handler, OnMapEnd());
    380   EXPECT_CALL(handler, OnDocumentEnd());
    381   Parse(ex2_20);
    382 }
    383 
    384 TEST_F(HandlerSpecTest, Ex2_21_Miscellaneous) {
    385   EXPECT_CALL(handler, OnDocumentStart(_));
    386   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    387   EXPECT_CALL(handler, OnNull(_, 0));
    388   EXPECT_CALL(handler, OnNull(_, 0));
    389   EXPECT_CALL(handler, OnScalar(_, "?", 0, "booleans"));
    390   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    391   EXPECT_CALL(handler, OnScalar(_, "?", 0, "true"));
    392   EXPECT_CALL(handler, OnScalar(_, "?", 0, "false"));
    393   EXPECT_CALL(handler, OnSequenceEnd());
    394   EXPECT_CALL(handler, OnScalar(_, "?", 0, "string"));
    395   EXPECT_CALL(handler, OnScalar(_, "!", 0, "012345"));
    396   EXPECT_CALL(handler, OnMapEnd());
    397   EXPECT_CALL(handler, OnDocumentEnd());
    398   Parse(ex2_21);
    399 }
    400 
    401 TEST_F(HandlerSpecTest, Ex2_22_Timestamps) {
    402   EXPECT_CALL(handler, OnDocumentStart(_));
    403   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    404   EXPECT_CALL(handler, OnScalar(_, "?", 0, "canonical"));
    405   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-12-15T02:59:43.1Z"));
    406   EXPECT_CALL(handler, OnScalar(_, "?", 0, "iso8601"));
    407   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-12-14t21:59:43.10-05:00"));
    408   EXPECT_CALL(handler, OnScalar(_, "?", 0, "spaced"));
    409   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-12-14 21:59:43.10 -5"));
    410   EXPECT_CALL(handler, OnScalar(_, "?", 0, "date"));
    411   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2002-12-14"));
    412   EXPECT_CALL(handler, OnMapEnd());
    413   EXPECT_CALL(handler, OnDocumentEnd());
    414   Parse(ex2_22);
    415 }
    416 
    417 TEST_F(HandlerSpecTest, Ex2_23_VariousExplicitTags) {
    418   EXPECT_CALL(handler, OnDocumentStart(_));
    419   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    420   EXPECT_CALL(handler, OnScalar(_, "?", 0, "not-date"));
    421   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "2002-04-28"));
    422   EXPECT_CALL(handler, OnScalar(_, "?", 0, "picture"));
    423   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:binary", 0,
    424                                 "R0lGODlhDAAMAIQAAP//9/X\n"
    425                                 "17unp5WZmZgAAAOfn515eXv\n"
    426                                 "Pz7Y6OjuDg4J+fn5OTk6enp\n"
    427                                 "56enmleECcgggoBADs=\n"));
    428   EXPECT_CALL(handler, OnScalar(_, "?", 0, "application specific tag"));
    429   EXPECT_CALL(handler, OnScalar(_, "!something", 0,
    430                                 "The semantics of the tag\n"
    431                                 "above may be different for\n"
    432                                 "different documents."));
    433   EXPECT_CALL(handler, OnMapEnd());
    434   EXPECT_CALL(handler, OnDocumentEnd());
    435   Parse(ex2_23);
    436 }
    437 
    438 TEST_F(HandlerSpecTest, Ex2_24_GlobalTags) {
    439   EXPECT_CALL(handler, OnDocumentStart(_));
    440   EXPECT_CALL(handler, OnSequenceStart(_, "tag:clarkevans.com,2002:shape", 0,
    441                                        EmitterStyle::Block));
    442   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:circle", 0,
    443                                   EmitterStyle::Block));
    444   EXPECT_CALL(handler, OnScalar(_, "?", 0, "center"));
    445   EXPECT_CALL(handler, OnAnchor(_, "ORIGIN"));
    446   EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Flow));
    447   EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
    448   EXPECT_CALL(handler, OnScalar(_, "?", 0, "73"));
    449   EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
    450   EXPECT_CALL(handler, OnScalar(_, "?", 0, "129"));
    451   EXPECT_CALL(handler, OnMapEnd());
    452   EXPECT_CALL(handler, OnScalar(_, "?", 0, "radius"));
    453   EXPECT_CALL(handler, OnScalar(_, "?", 0, "7"));
    454   EXPECT_CALL(handler, OnMapEnd());
    455   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:line", 0,
    456                                   EmitterStyle::Block));
    457   EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
    458   EXPECT_CALL(handler, OnAlias(_, 1));
    459   EXPECT_CALL(handler, OnScalar(_, "?", 0, "finish"));
    460   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
    461   EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
    462   EXPECT_CALL(handler, OnScalar(_, "?", 0, "89"));
    463   EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
    464   EXPECT_CALL(handler, OnScalar(_, "?", 0, "102"));
    465   EXPECT_CALL(handler, OnMapEnd());
    466   EXPECT_CALL(handler, OnMapEnd());
    467   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:label", 0,
    468                                   EmitterStyle::Block));
    469   EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
    470   EXPECT_CALL(handler, OnAlias(_, 1));
    471   EXPECT_CALL(handler, OnScalar(_, "?", 0, "color"));
    472   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0xFFEEBB"));
    473   EXPECT_CALL(handler, OnScalar(_, "?", 0, "text"));
    474   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Pretty vector drawing."));
    475   EXPECT_CALL(handler, OnMapEnd());
    476   EXPECT_CALL(handler, OnSequenceEnd());
    477   EXPECT_CALL(handler, OnDocumentEnd());
    478   Parse(ex2_24);
    479 }
    480 
    481 TEST_F(HandlerSpecTest, Ex2_25_UnorderedSets) {
    482   EXPECT_CALL(handler, OnDocumentStart(_));
    483   EXPECT_CALL(handler,
    484               OnMapStart(_, "tag:yaml.org,2002:set", 0, EmitterStyle::Block));
    485   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    486   EXPECT_CALL(handler, OnNull(_, 0));
    487   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    488   EXPECT_CALL(handler, OnNull(_, 0));
    489   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
    490   EXPECT_CALL(handler, OnNull(_, 0));
    491   EXPECT_CALL(handler, OnMapEnd());
    492   EXPECT_CALL(handler, OnDocumentEnd());
    493   Parse(ex2_25);
    494 }
    495 
    496 TEST_F(HandlerSpecTest, Ex2_26_OrderedMappings) {
    497   EXPECT_CALL(handler, OnDocumentStart(_));
    498   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:omap", 0,
    499                                        EmitterStyle::Block));
    500   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    501   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
    502   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
    503   EXPECT_CALL(handler, OnMapEnd());
    504   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    505   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
    506   EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
    507   EXPECT_CALL(handler, OnMapEnd());
    508   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    509   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
    510   EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
    511   EXPECT_CALL(handler, OnMapEnd());
    512   EXPECT_CALL(handler, OnSequenceEnd());
    513   EXPECT_CALL(handler, OnDocumentEnd());
    514   Parse(ex2_26);
    515 }
    516 
    517 TEST_F(HandlerSpecTest, Ex2_27_Invoice) {
    518   EXPECT_CALL(handler, OnDocumentStart(_));
    519   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:invoice", 0,
    520                                   EmitterStyle::Block));
    521   EXPECT_CALL(handler, OnScalar(_, "?", 0, "invoice"));
    522   EXPECT_CALL(handler, OnScalar(_, "?", 0, "34843"));
    523   EXPECT_CALL(handler, OnScalar(_, "?", 0, "date"));
    524   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-01-23"));
    525   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bill-to"));
    526   EXPECT_CALL(handler, OnAnchor(_, "id001"));
    527   EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Block));
    528   EXPECT_CALL(handler, OnScalar(_, "?", 0, "given"));
    529   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chris"));
    530   EXPECT_CALL(handler, OnScalar(_, "?", 0, "family"));
    531   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Dumars"));
    532   EXPECT_CALL(handler, OnScalar(_, "?", 0, "address"));
    533   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    534   EXPECT_CALL(handler, OnScalar(_, "?", 0, "lines"));
    535   EXPECT_CALL(handler, OnScalar(_, "!", 0,
    536                                 "458 Walkman Dr.\n"
    537                                 "Suite #292\n"));
    538   EXPECT_CALL(handler, OnScalar(_, "?", 0, "city"));
    539   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Royal Oak"));
    540   EXPECT_CALL(handler, OnScalar(_, "?", 0, "state"));
    541   EXPECT_CALL(handler, OnScalar(_, "?", 0, "MI"));
    542   EXPECT_CALL(handler, OnScalar(_, "?", 0, "postal"));
    543   EXPECT_CALL(handler, OnScalar(_, "?", 0, "48046"));
    544   EXPECT_CALL(handler, OnMapEnd());
    545   EXPECT_CALL(handler, OnMapEnd());
    546   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ship-to"));
    547   EXPECT_CALL(handler, OnAlias(_, 1));
    548   EXPECT_CALL(handler, OnScalar(_, "?", 0, "product"));
    549   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    550   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    551   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
    552   EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL394D"));
    553   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
    554   EXPECT_CALL(handler, OnScalar(_, "?", 0, "4"));
    555   EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
    556   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball"));
    557   EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
    558   EXPECT_CALL(handler, OnScalar(_, "?", 0, "450.00"));
    559   EXPECT_CALL(handler, OnMapEnd());
    560   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    561   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
    562   EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL4438H"));
    563   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
    564   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
    565   EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
    566   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop"));
    567   EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
    568   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2392.00"));
    569   EXPECT_CALL(handler, OnMapEnd());
    570   EXPECT_CALL(handler, OnSequenceEnd());
    571   EXPECT_CALL(handler, OnScalar(_, "?", 0, "tax"));
    572   EXPECT_CALL(handler, OnScalar(_, "?", 0, "251.42"));
    573   EXPECT_CALL(handler, OnScalar(_, "?", 0, "total"));
    574   EXPECT_CALL(handler, OnScalar(_, "?", 0, "4443.52"));
    575   EXPECT_CALL(handler, OnScalar(_, "?", 0, "comments"));
    576   EXPECT_CALL(handler, OnScalar(_, "?", 0,
    577                                 "Late afternoon is best. Backup contact is "
    578                                 "Nancy Billsmer @ 338-4338."));
    579   EXPECT_CALL(handler, OnMapEnd());
    580   EXPECT_CALL(handler, OnDocumentEnd());
    581   Parse(ex2_27);
    582 }
    583 
    584 TEST_F(HandlerSpecTest, Ex2_28_LogFile) {
    585   EXPECT_CALL(handler, OnDocumentStart(_));
    586   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    587   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
    588   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:01:42 -5"));
    589   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
    590   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
    591   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
    592   EXPECT_CALL(handler,
    593               OnScalar(_, "?", 0, "This is an error message for the log file"));
    594   EXPECT_CALL(handler, OnMapEnd());
    595   EXPECT_CALL(handler, OnDocumentEnd());
    596   EXPECT_CALL(handler, OnDocumentStart(_));
    597   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    598   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
    599   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:02:31 -5"));
    600   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
    601   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
    602   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
    603   EXPECT_CALL(handler,
    604               OnScalar(_, "?", 0, "A slightly different error message."));
    605   EXPECT_CALL(handler, OnMapEnd());
    606   EXPECT_CALL(handler, OnDocumentEnd());
    607   EXPECT_CALL(handler, OnDocumentStart(_));
    608   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    609   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Date"));
    610   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:03:17 -5"));
    611   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
    612   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
    613   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Fatal"));
    614   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Unknown variable \"bar\""));
    615   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Stack"));
    616   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    617   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    618   EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
    619   EXPECT_CALL(handler, OnScalar(_, "?", 0, "TopClass.py"));
    620   EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
    621   EXPECT_CALL(handler, OnScalar(_, "?", 0, "23"));
    622   EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
    623   EXPECT_CALL(handler, OnScalar(_, "!", 0, "x = MoreObject(\"345\\n\")\n"));
    624   EXPECT_CALL(handler, OnMapEnd());
    625   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    626   EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
    627   EXPECT_CALL(handler, OnScalar(_, "?", 0, "MoreClass.py"));
    628   EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
    629   EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
    630   EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
    631   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo = bar"));
    632   EXPECT_CALL(handler, OnMapEnd());
    633   EXPECT_CALL(handler, OnSequenceEnd());
    634   EXPECT_CALL(handler, OnMapEnd());
    635   EXPECT_CALL(handler, OnDocumentEnd());
    636   Parse(ex2_28);
    637 }
    638 
    639 // TODO: 5.1 - 5.2 BOM
    640 
    641 TEST_F(HandlerSpecTest, Ex5_3_BlockStructureIndicators) {
    642   EXPECT_CALL(handler, OnDocumentStart(_));
    643   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    644   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
    645   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    646   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
    647   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
    648   EXPECT_CALL(handler, OnSequenceEnd());
    649   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
    650   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    651   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
    652   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
    653   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
    654   EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
    655   EXPECT_CALL(handler, OnMapEnd());
    656   EXPECT_CALL(handler, OnMapEnd());
    657   EXPECT_CALL(handler, OnDocumentEnd());
    658   Parse(ex5_3);
    659 }
    660 
    661 TEST_F(HandlerSpecTest, Ex5_4_FlowStructureIndicators) {
    662   EXPECT_CALL(handler, OnDocumentStart(_));
    663   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    664   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
    665   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    666   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
    667   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
    668   EXPECT_CALL(handler, OnSequenceEnd());
    669   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
    670   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
    671   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
    672   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
    673   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
    674   EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
    675   EXPECT_CALL(handler, OnMapEnd());
    676   EXPECT_CALL(handler, OnMapEnd());
    677   EXPECT_CALL(handler, OnDocumentEnd());
    678   Parse(ex5_4);
    679 }
    680 
    681 TEST_F(HandlerSpecTest, Ex5_5_CommentIndicator) { Parse(ex5_5); }
    682 
    683 TEST_F(HandlerSpecTest, Ex5_6_NodePropertyIndicators) {
    684   EXPECT_CALL(handler, OnDocumentStart(_));
    685   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    686   EXPECT_CALL(handler, OnScalar(_, "?", 0, "anchored"));
    687   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
    688   EXPECT_CALL(handler, OnScalar(_, "!local", 1, "value"));
    689   EXPECT_CALL(handler, OnScalar(_, "?", 0, "alias"));
    690   EXPECT_CALL(handler, OnAlias(_, 1));
    691   EXPECT_CALL(handler, OnMapEnd());
    692   EXPECT_CALL(handler, OnDocumentEnd());
    693   Parse(ex5_6);
    694 }
    695 
    696 TEST_F(HandlerSpecTest, Ex5_7_BlockScalarIndicators) {
    697   EXPECT_CALL(handler, OnDocumentStart(_));
    698   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    699   EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
    700   EXPECT_CALL(handler, OnScalar(_, "!", 0, "some\ntext\n"));
    701   EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
    702   EXPECT_CALL(handler, OnScalar(_, "!", 0, "some text\n"));
    703   EXPECT_CALL(handler, OnMapEnd());
    704   EXPECT_CALL(handler, OnDocumentEnd());
    705   Parse(ex5_7);
    706 }
    707 
    708 TEST_F(HandlerSpecTest, Ex5_8_QuotedScalarIndicators) {
    709   EXPECT_CALL(handler, OnDocumentStart(_));
    710   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    711   EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
    712   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
    713   EXPECT_CALL(handler, OnScalar(_, "?", 0, "double"));
    714   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
    715   EXPECT_CALL(handler, OnMapEnd());
    716   EXPECT_CALL(handler, OnDocumentEnd());
    717   Parse(ex5_8);
    718 }
    719 
    720 // TODO: 5.9 directive
    721 // TODO: 5.10 reserved indicator
    722 
    723 TEST_F(HandlerSpecTest, Ex5_11_LineBreakCharacters) {
    724   EXPECT_CALL(handler, OnDocumentStart(_));
    725   EXPECT_CALL(handler, OnScalar(_, "!", 0,
    726                                 "Line break (no glyph)\n"
    727                                 "Line break (glyphed)\n"));
    728   EXPECT_CALL(handler, OnDocumentEnd());
    729   Parse(ex5_11);
    730 }
    731 
    732 TEST_F(HandlerSpecTest, Ex5_12_TabsAndSpaces) {
    733   EXPECT_CALL(handler, OnDocumentStart(_));
    734   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    735   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
    736   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Quoted\t"));
    737   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
    738   EXPECT_CALL(handler, OnScalar(_, "!", 0,
    739                                 "void main() {\n"
    740                                 "\tprintf(\"Hello, world!\\n\");\n"
    741                                 "}"));
    742   EXPECT_CALL(handler, OnMapEnd());
    743   EXPECT_CALL(handler, OnDocumentEnd());
    744   Parse(ex5_12);
    745 }
    746 
    747 TEST_F(HandlerSpecTest, Ex5_13_EscapedCharacters) {
    748   EXPECT_CALL(handler, OnDocumentStart(_));
    749   EXPECT_CALL(
    750       handler,
    751       OnScalar(_, "!", 0,
    752                "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " +
    753                    std::string("\x00", 1) +
    754                    " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A"));
    755   EXPECT_CALL(handler, OnDocumentEnd());
    756   Parse(ex5_13);
    757 }
    758 
    759 TEST_F(HandlerSpecTest, Ex5_14_InvalidEscapedCharacters) {
    760   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex5_14),
    761                                 std::string(ErrorMsg::INVALID_ESCAPE) + "c");
    762 }
    763 
    764 TEST_F(HandlerSpecTest, Ex6_1_IndentationSpaces) {
    765   EXPECT_CALL(handler, OnDocumentStart(_));
    766   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    767   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Not indented"));
    768   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    769   EXPECT_CALL(handler, OnScalar(_, "?", 0, "By one space"));
    770   EXPECT_CALL(handler, OnScalar(_, "!", 0, "By four\n  spaces\n"));
    771   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Flow style"));
    772   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
    773   EXPECT_CALL(handler, OnScalar(_, "?", 0, "By two"));
    774   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Also by two"));
    775   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Still by two"));
    776   EXPECT_CALL(handler, OnSequenceEnd());
    777   EXPECT_CALL(handler, OnMapEnd());
    778   EXPECT_CALL(handler, OnMapEnd());
    779   EXPECT_CALL(handler, OnDocumentEnd());
    780   Parse(ex6_1);
    781 }
    782 
    783 TEST_F(HandlerSpecTest, Ex6_2_IndentationIndicators) {
    784   EXPECT_CALL(handler, OnDocumentStart(_));
    785   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    786   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
    787   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    788   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
    789   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    790   EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
    791   EXPECT_CALL(handler, OnScalar(_, "?", 0, "d"));
    792   EXPECT_CALL(handler, OnSequenceEnd());
    793   EXPECT_CALL(handler, OnSequenceEnd());
    794   EXPECT_CALL(handler, OnMapEnd());
    795   EXPECT_CALL(handler, OnDocumentEnd());
    796   Parse(ex6_2);
    797 }
    798 
    799 TEST_F(HandlerSpecTest, Ex6_3_SeparationSpaces) {
    800   EXPECT_CALL(handler, OnDocumentStart(_));
    801   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    802   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    803   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
    804   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
    805   EXPECT_CALL(handler, OnMapEnd());
    806   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    807   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
    808   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
    809   EXPECT_CALL(handler, OnSequenceEnd());
    810   EXPECT_CALL(handler, OnSequenceEnd());
    811   EXPECT_CALL(handler, OnDocumentEnd());
    812   Parse(ex6_3);
    813 }
    814 
    815 TEST_F(HandlerSpecTest, Ex6_4_LinePrefixes) {
    816   EXPECT_CALL(handler, OnDocumentStart(_));
    817   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    818   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain"));
    819   EXPECT_CALL(handler, OnScalar(_, "?", 0, "text lines"));
    820   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
    821   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text lines"));
    822   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
    823   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n \tlines\n"));
    824   EXPECT_CALL(handler, OnMapEnd());
    825   EXPECT_CALL(handler, OnDocumentEnd());
    826   Parse(ex6_4);
    827 }
    828 
    829 TEST_F(HandlerSpecTest, Ex6_5_EmptyLines) {
    830   EXPECT_CALL(handler, OnDocumentStart(_));
    831   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    832   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Folding"));
    833   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Empty line\nas a line feed"));
    834   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chomping"));
    835   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Clipped empty lines\n"));
    836   EXPECT_CALL(handler, OnMapEnd());
    837   EXPECT_CALL(handler, OnDocumentEnd());
    838   Parse(ex6_5);
    839 }
    840 
    841 TEST_F(HandlerSpecTest, Ex6_6_LineFolding) {
    842   EXPECT_CALL(handler, OnDocumentStart(_));
    843   EXPECT_CALL(handler, OnScalar(_, "!", 0, "trimmed\n\n\nas space"));
    844   EXPECT_CALL(handler, OnDocumentEnd());
    845   Parse(ex6_6);
    846 }
    847 
    848 TEST_F(HandlerSpecTest, Ex6_7_BlockFolding) {
    849   EXPECT_CALL(handler, OnDocumentStart(_));
    850   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo \n\n\t bar\n\nbaz\n"));
    851   EXPECT_CALL(handler, OnDocumentEnd());
    852   Parse(ex6_7);
    853 }
    854 
    855 TEST_F(HandlerSpecTest, Ex6_8_FlowFolding) {
    856   EXPECT_CALL(handler, OnDocumentStart(_));
    857   EXPECT_CALL(handler, OnScalar(_, "!", 0, " foo\nbar\nbaz "));
    858   EXPECT_CALL(handler, OnDocumentEnd());
    859   Parse(ex6_8);
    860 }
    861 
    862 TEST_F(HandlerSpecTest, Ex6_9_SeparatedComment) {
    863   EXPECT_CALL(handler, OnDocumentStart(_));
    864   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    865   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
    866   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
    867   EXPECT_CALL(handler, OnMapEnd());
    868   EXPECT_CALL(handler, OnDocumentEnd());
    869   Parse(ex6_9);
    870 }
    871 
    872 TEST_F(HandlerSpecTest, Ex6_10_CommentLines) { Parse(ex6_10); }
    873 
    874 TEST_F(HandlerSpecTest, _MultiLineComments) {
    875   EXPECT_CALL(handler, OnDocumentStart(_));
    876   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    877   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
    878   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
    879   EXPECT_CALL(handler, OnMapEnd());
    880   EXPECT_CALL(handler, OnDocumentEnd());
    881   Parse(ex6_11);
    882 }
    883 
    884 TEST_F(HandlerSpecTest, Ex6_12_SeparationSpacesII) {
    885   EXPECT_CALL(handler, OnDocumentStart(_));
    886   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    887   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
    888   EXPECT_CALL(handler, OnScalar(_, "?", 0, "first"));
    889   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy"));
    890   EXPECT_CALL(handler, OnScalar(_, "?", 0, "last"));
    891   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sosa"));
    892   EXPECT_CALL(handler, OnMapEnd());
    893   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    894   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
    895   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
    896   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
    897   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
    898   EXPECT_CALL(handler, OnMapEnd());
    899   EXPECT_CALL(handler, OnMapEnd());
    900   EXPECT_CALL(handler, OnDocumentEnd());
    901   Parse(ex6_12);
    902 }
    903 
    904 TEST_F(HandlerSpecTest, Ex6_13_ReservedDirectives) {
    905   EXPECT_CALL(handler, OnDocumentStart(_));
    906   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
    907   EXPECT_CALL(handler, OnDocumentEnd());
    908   Parse(ex6_13);
    909 }
    910 
    911 TEST_F(HandlerSpecTest, Ex6_14_YAMLDirective) {
    912   EXPECT_CALL(handler, OnDocumentStart(_));
    913   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
    914   EXPECT_CALL(handler, OnDocumentEnd());
    915   Parse(ex6_14);
    916 }
    917 
    918 TEST_F(HandlerSpecTest, Ex6_15_InvalidRepeatedYAMLDirective) {
    919   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_15),
    920                                 ErrorMsg::REPEATED_YAML_DIRECTIVE);
    921 }
    922 
    923 TEST_F(HandlerSpecTest, Ex6_16_TagDirective) {
    924   EXPECT_CALL(handler, OnDocumentStart(_));
    925   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
    926   EXPECT_CALL(handler, OnDocumentEnd());
    927   Parse(ex6_16);
    928 }
    929 
    930 TEST_F(HandlerSpecTest, Ex6_17_InvalidRepeatedTagDirective) {
    931   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_17),
    932                                 ErrorMsg::REPEATED_TAG_DIRECTIVE);
    933 }
    934 
    935 TEST_F(HandlerSpecTest, Ex6_18_PrimaryTagHandle) {
    936   EXPECT_CALL(handler, OnDocumentStart(_));
    937   EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "bar"));
    938   EXPECT_CALL(handler, OnDocumentEnd());
    939   EXPECT_CALL(handler, OnDocumentStart(_));
    940   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
    941   EXPECT_CALL(handler, OnDocumentEnd());
    942   Parse(ex6_18);
    943 }
    944 
    945 TEST_F(HandlerSpecTest, Ex6_19_SecondaryTagHandle) {
    946   EXPECT_CALL(handler, OnDocumentStart(_));
    947   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/int", 0, "1 - 3"));
    948   EXPECT_CALL(handler, OnDocumentEnd());
    949   Parse(ex6_19);
    950 }
    951 
    952 TEST_F(HandlerSpecTest, Ex6_20_TagHandles) {
    953   EXPECT_CALL(handler, OnDocumentStart(_));
    954   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
    955   EXPECT_CALL(handler, OnDocumentEnd());
    956   Parse(ex6_20);
    957 }
    958 
    959 TEST_F(HandlerSpecTest, Ex6_21_LocalTagPrefix) {
    960   EXPECT_CALL(handler, OnDocumentStart(_));
    961   EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "fluorescent"));
    962   EXPECT_CALL(handler, OnDocumentEnd());
    963   EXPECT_CALL(handler, OnDocumentStart(_));
    964   EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "green"));
    965   EXPECT_CALL(handler, OnDocumentEnd());
    966   Parse(ex6_21);
    967 }
    968 
    969 TEST_F(HandlerSpecTest, Ex6_22_GlobalTagPrefix) {
    970   EXPECT_CALL(handler, OnDocumentStart(_));
    971   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
    972   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
    973   EXPECT_CALL(handler, OnSequenceEnd());
    974   EXPECT_CALL(handler, OnDocumentEnd());
    975   Parse(ex6_22);
    976 }
    977 
    978 TEST_F(HandlerSpecTest, Ex6_23_NodeProperties) {
    979   EXPECT_CALL(handler, OnDocumentStart(_));
    980   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    981   EXPECT_CALL(handler, OnAnchor(_, "a1"));
    982   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 1, "foo"));
    983   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
    984   EXPECT_CALL(handler, OnAnchor(_, "a2"));
    985   EXPECT_CALL(handler, OnScalar(_, "?", 2, "baz"));
    986   EXPECT_CALL(handler, OnAlias(_, 1));
    987   EXPECT_CALL(handler, OnMapEnd());
    988   EXPECT_CALL(handler, OnDocumentEnd());
    989   Parse(ex6_23);
    990 }
    991 
    992 TEST_F(HandlerSpecTest, Ex6_24_VerbatimTags) {
    993   EXPECT_CALL(handler, OnDocumentStart(_));
    994   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
    995   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
    996   EXPECT_CALL(handler, OnScalar(_, "!bar", 0, "baz"));
    997   EXPECT_CALL(handler, OnMapEnd());
    998   EXPECT_CALL(handler, OnDocumentEnd());
    999   Parse(ex6_24);
   1000 }
   1001 
   1002 // TODO: Implement
   1003 TEST_F(HandlerSpecTest, DISABLED_Ex6_25_InvalidVerbatimTags) {
   1004   Parse(ex6_25);
   1005   FAIL() << "not implemented yet";
   1006 }
   1007 
   1008 TEST_F(HandlerSpecTest, Ex6_26_TagShorthands) {
   1009   EXPECT_CALL(handler, OnDocumentStart(_));
   1010   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1011   EXPECT_CALL(handler, OnScalar(_, "!local", 0, "foo"));
   1012   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
   1013   EXPECT_CALL(handler,
   1014               OnScalar(_, "tag:example.com,2000:app/tag%21", 0, "baz"));
   1015   EXPECT_CALL(handler, OnSequenceEnd());
   1016   EXPECT_CALL(handler, OnDocumentEnd());
   1017   Parse(ex6_26);
   1018 }
   1019 
   1020 TEST_F(HandlerSpecTest, Ex6_27a_InvalidTagShorthands) {
   1021   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_27a),
   1022                                 ErrorMsg::TAG_WITH_NO_SUFFIX);
   1023 }
   1024 
   1025 // TODO: should we reject this one (since !h! is not declared)?
   1026 TEST_F(HandlerSpecTest, DISABLED_Ex6_27b_InvalidTagShorthands) {
   1027   Parse(ex6_27b);
   1028   FAIL() << "not implemented yet";
   1029 }
   1030 
   1031 TEST_F(HandlerSpecTest, Ex6_28_NonSpecificTags) {
   1032   EXPECT_CALL(handler, OnDocumentStart(_));
   1033   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1034   EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
   1035   EXPECT_CALL(handler, OnScalar(_, "?", 0, "12"));
   1036   EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
   1037   EXPECT_CALL(handler, OnSequenceEnd());
   1038   EXPECT_CALL(handler, OnDocumentEnd());
   1039   Parse(ex6_28);
   1040 }
   1041 
   1042 TEST_F(HandlerSpecTest, Ex6_29_NodeAnchors) {
   1043   EXPECT_CALL(handler, OnDocumentStart(_));
   1044   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1045   EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
   1046   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
   1047   EXPECT_CALL(handler, OnScalar(_, "?", 1, "Value"));
   1048   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
   1049   EXPECT_CALL(handler, OnAlias(_, 1));
   1050   EXPECT_CALL(handler, OnMapEnd());
   1051   EXPECT_CALL(handler, OnDocumentEnd());
   1052   Parse(ex6_29);
   1053 }
   1054 
   1055 TEST_F(HandlerSpecTest, Ex7_1_AliasNodes) {
   1056   EXPECT_CALL(handler, OnDocumentStart(_));
   1057   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1058   EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
   1059   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
   1060   EXPECT_CALL(handler, OnScalar(_, "?", 1, "Foo"));
   1061   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
   1062   EXPECT_CALL(handler, OnAlias(_, 1));
   1063   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Override anchor"));
   1064   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
   1065   EXPECT_CALL(handler, OnScalar(_, "?", 2, "Bar"));
   1066   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Reuse anchor"));
   1067   EXPECT_CALL(handler, OnAlias(_, 2));
   1068   EXPECT_CALL(handler, OnMapEnd());
   1069   EXPECT_CALL(handler, OnDocumentEnd());
   1070   Parse(ex7_1);
   1071 }
   1072 
   1073 TEST_F(HandlerSpecTest, Ex7_2_EmptyNodes) {
   1074   EXPECT_CALL(handler, OnDocumentStart(_));
   1075   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1076   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
   1077   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
   1078   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
   1079   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
   1080   EXPECT_CALL(handler, OnMapEnd());
   1081   EXPECT_CALL(handler, OnDocumentEnd());
   1082   Parse(ex7_2);
   1083 }
   1084 
   1085 TEST_F(HandlerSpecTest, Ex7_3_CompletelyEmptyNodes) {
   1086   EXPECT_CALL(handler, OnDocumentStart(_));
   1087   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1088   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
   1089   EXPECT_CALL(handler, OnNull(_, 0));
   1090   EXPECT_CALL(handler, OnNull(_, 0));
   1091   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
   1092   EXPECT_CALL(handler, OnMapEnd());
   1093   EXPECT_CALL(handler, OnDocumentEnd());
   1094   Parse(ex7_3);
   1095 }
   1096 
   1097 TEST_F(HandlerSpecTest, Ex7_4_DoubleQuotedImplicitKeys) {
   1098   EXPECT_CALL(handler, OnDocumentStart(_));
   1099   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1100   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
   1101   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1102   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1103   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
   1104   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1105   EXPECT_CALL(handler, OnMapEnd());
   1106   EXPECT_CALL(handler, OnSequenceEnd());
   1107   EXPECT_CALL(handler, OnMapEnd());
   1108   EXPECT_CALL(handler, OnDocumentEnd());
   1109   Parse(ex7_4);
   1110 }
   1111 
   1112 TEST_F(HandlerSpecTest, Ex7_5_DoubleQuotedLineBreaks) {
   1113   EXPECT_CALL(handler, OnDocumentStart(_));
   1114   EXPECT_CALL(
   1115       handler,
   1116       OnScalar(_, "!", 0,
   1117                "folded to a space,\nto a line feed, or \t \tnon-content"));
   1118   EXPECT_CALL(handler, OnDocumentEnd());
   1119   Parse(ex7_5);
   1120 }
   1121 
   1122 TEST_F(HandlerSpecTest, Ex7_6_DoubleQuotedLines) {
   1123   EXPECT_CALL(handler, OnDocumentStart(_));
   1124   EXPECT_CALL(
   1125       handler,
   1126       OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
   1127   EXPECT_CALL(handler, OnDocumentEnd());
   1128   Parse(ex7_6);
   1129 }
   1130 
   1131 TEST_F(HandlerSpecTest, Ex7_7_SingleQuotedCharacters) {
   1132   EXPECT_CALL(handler, OnDocumentStart(_));
   1133   EXPECT_CALL(handler, OnScalar(_, "!", 0, "here's to \"quotes\""));
   1134   EXPECT_CALL(handler, OnDocumentEnd());
   1135   Parse(ex7_7);
   1136 }
   1137 
   1138 TEST_F(HandlerSpecTest, Ex7_8_SingleQuotedImplicitKeys) {
   1139   EXPECT_CALL(handler, OnDocumentStart(_));
   1140   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1141   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
   1142   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1143   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1144   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
   1145   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1146   EXPECT_CALL(handler, OnMapEnd());
   1147   EXPECT_CALL(handler, OnSequenceEnd());
   1148   EXPECT_CALL(handler, OnMapEnd());
   1149   EXPECT_CALL(handler, OnDocumentEnd());
   1150   Parse(ex7_8);
   1151 }
   1152 
   1153 TEST_F(HandlerSpecTest, Ex7_9_SingleQuotedLines) {
   1154   EXPECT_CALL(handler, OnDocumentStart(_));
   1155   EXPECT_CALL(
   1156       handler,
   1157       OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
   1158   EXPECT_CALL(handler, OnDocumentEnd());
   1159   Parse(ex7_9);
   1160 }
   1161 
   1162 TEST_F(HandlerSpecTest, Ex7_10_PlainCharacters) {
   1163   EXPECT_CALL(handler, OnDocumentStart(_));
   1164   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1165   EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
   1166   EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
   1167   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Up, up, and away!"));
   1168   EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
   1169   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
   1170   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1171   EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
   1172   EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
   1173   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Up, up, and away!"));
   1174   EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
   1175   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
   1176   EXPECT_CALL(handler, OnSequenceEnd());
   1177   EXPECT_CALL(handler, OnSequenceEnd());
   1178   EXPECT_CALL(handler, OnDocumentEnd());
   1179   Parse(ex7_10);
   1180 }
   1181 
   1182 TEST_F(HandlerSpecTest, Ex7_11_PlainImplicitKeys) {
   1183   EXPECT_CALL(handler, OnDocumentStart(_));
   1184   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1185   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit block key"));
   1186   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1187   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1188   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit flow key"));
   1189   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1190   EXPECT_CALL(handler, OnMapEnd());
   1191   EXPECT_CALL(handler, OnSequenceEnd());
   1192   EXPECT_CALL(handler, OnMapEnd());
   1193   EXPECT_CALL(handler, OnDocumentEnd());
   1194   Parse(ex7_11);
   1195 }
   1196 
   1197 TEST_F(HandlerSpecTest, Ex7_12_PlainLines) {
   1198   EXPECT_CALL(handler, OnDocumentStart(_));
   1199   EXPECT_CALL(handler, OnScalar(_, "?", 0,
   1200                                 "1st non-empty\n2nd non-empty 3rd non-empty"));
   1201   EXPECT_CALL(handler, OnDocumentEnd());
   1202   Parse(ex7_12);
   1203 }
   1204 
   1205 TEST_F(HandlerSpecTest, Ex7_13_FlowSequence) {
   1206   EXPECT_CALL(handler, OnDocumentStart(_));
   1207   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1208   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1209   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1210   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1211   EXPECT_CALL(handler, OnSequenceEnd());
   1212   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1213   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
   1214   EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
   1215   EXPECT_CALL(handler, OnSequenceEnd());
   1216   EXPECT_CALL(handler, OnSequenceEnd());
   1217   EXPECT_CALL(handler, OnDocumentEnd());
   1218   Parse(ex7_13);
   1219 }
   1220 
   1221 TEST_F(HandlerSpecTest, Ex7_14_FlowSequenceEntries) {
   1222   EXPECT_CALL(handler, OnDocumentStart(_));
   1223   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1224   EXPECT_CALL(handler, OnScalar(_, "!", 0, "double quoted"));
   1225   EXPECT_CALL(handler, OnScalar(_, "!", 0, "single quoted"));
   1226   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain text"));
   1227   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1228   EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
   1229   EXPECT_CALL(handler, OnSequenceEnd());
   1230   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1231   EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
   1232   EXPECT_CALL(handler, OnScalar(_, "?", 0, "pair"));
   1233   EXPECT_CALL(handler, OnMapEnd());
   1234   EXPECT_CALL(handler, OnSequenceEnd());
   1235   EXPECT_CALL(handler, OnDocumentEnd());
   1236   Parse(ex7_14);
   1237 }
   1238 
   1239 TEST_F(HandlerSpecTest, Ex7_15_FlowMappings) {
   1240   EXPECT_CALL(handler, OnDocumentStart(_));
   1241   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1242   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1243   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1244   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1245   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
   1246   EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
   1247   EXPECT_CALL(handler, OnMapEnd());
   1248   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1249   EXPECT_CALL(handler, OnScalar(_, "?", 0, "five"));
   1250   EXPECT_CALL(handler, OnScalar(_, "?", 0, "six"));
   1251   EXPECT_CALL(handler, OnScalar(_, "?", 0, "seven"));
   1252   EXPECT_CALL(handler, OnScalar(_, "?", 0, "eight"));
   1253   EXPECT_CALL(handler, OnMapEnd());
   1254   EXPECT_CALL(handler, OnSequenceEnd());
   1255   EXPECT_CALL(handler, OnDocumentEnd());
   1256   Parse(ex7_15);
   1257 }
   1258 
   1259 TEST_F(HandlerSpecTest, Ex7_16_FlowMappingEntries) {
   1260   EXPECT_CALL(handler, OnDocumentStart(_));
   1261   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1262   EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit"));
   1263   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
   1264   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit"));
   1265   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
   1266   EXPECT_CALL(handler, OnNull(_, 0));
   1267   EXPECT_CALL(handler, OnNull(_, 0));
   1268   EXPECT_CALL(handler, OnMapEnd());
   1269   EXPECT_CALL(handler, OnDocumentEnd());
   1270   Parse(ex7_16);
   1271 }
   1272 
   1273 TEST_F(HandlerSpecTest, Ex7_17_FlowMappingSeparateValues) {
   1274   EXPECT_CALL(handler, OnDocumentStart(_));
   1275   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1276   EXPECT_CALL(handler, OnScalar(_, "?", 0, "unquoted"));
   1277   EXPECT_CALL(handler, OnScalar(_, "!", 0, "separate"));
   1278   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://foo.com"));
   1279   EXPECT_CALL(handler, OnNull(_, 0));
   1280   EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted value"));
   1281   EXPECT_CALL(handler, OnNull(_, 0));
   1282   EXPECT_CALL(handler, OnNull(_, 0));
   1283   EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted key"));
   1284   EXPECT_CALL(handler, OnMapEnd());
   1285   EXPECT_CALL(handler, OnDocumentEnd());
   1286   Parse(ex7_17);
   1287 }
   1288 
   1289 TEST_F(HandlerSpecTest, Ex7_18_FlowMappingAdjacentValues) {
   1290   EXPECT_CALL(handler, OnDocumentStart(_));
   1291   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1292   EXPECT_CALL(handler, OnScalar(_, "!", 0, "adjacent"));
   1293   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1294   EXPECT_CALL(handler, OnScalar(_, "!", 0, "readable"));
   1295   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1296   EXPECT_CALL(handler, OnScalar(_, "!", 0, "empty"));
   1297   EXPECT_CALL(handler, OnNull(_, 0));
   1298   EXPECT_CALL(handler, OnMapEnd());
   1299   EXPECT_CALL(handler, OnDocumentEnd());
   1300   Parse(ex7_18);
   1301 }
   1302 
   1303 TEST_F(HandlerSpecTest, Ex7_19_SinglePairFlowMappings) {
   1304   EXPECT_CALL(handler, OnDocumentStart(_));
   1305   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1306   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1307   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
   1308   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
   1309   EXPECT_CALL(handler, OnMapEnd());
   1310   EXPECT_CALL(handler, OnSequenceEnd());
   1311   EXPECT_CALL(handler, OnDocumentEnd());
   1312   Parse(ex7_19);
   1313 }
   1314 
   1315 TEST_F(HandlerSpecTest, Ex7_20_SinglePairExplicitEntry) {
   1316   EXPECT_CALL(handler, OnDocumentStart(_));
   1317   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1318   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1319   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo bar"));
   1320   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
   1321   EXPECT_CALL(handler, OnMapEnd());
   1322   EXPECT_CALL(handler, OnSequenceEnd());
   1323   EXPECT_CALL(handler, OnDocumentEnd());
   1324   Parse(ex7_20);
   1325 }
   1326 
   1327 TEST_F(HandlerSpecTest, Ex7_21_SinglePairImplicitEntries) {
   1328   EXPECT_CALL(handler, OnDocumentStart(_));
   1329   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1330   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1331   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1332   EXPECT_CALL(handler, OnScalar(_, "?", 0, "YAML"));
   1333   EXPECT_CALL(handler, OnScalar(_, "?", 0, "separate"));
   1334   EXPECT_CALL(handler, OnMapEnd());
   1335   EXPECT_CALL(handler, OnSequenceEnd());
   1336   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1337   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Default));
   1338   EXPECT_CALL(handler, OnNull(_, 0));
   1339   EXPECT_CALL(handler, OnScalar(_, "?", 0, "empty key entry"));
   1340   EXPECT_CALL(handler, OnMapEnd());
   1341   EXPECT_CALL(handler, OnSequenceEnd());
   1342   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1343   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1344   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1345   EXPECT_CALL(handler, OnScalar(_, "?", 0, "JSON"));
   1346   EXPECT_CALL(handler, OnScalar(_, "?", 0, "like"));
   1347   EXPECT_CALL(handler, OnMapEnd());
   1348   EXPECT_CALL(handler, OnScalar(_, "?", 0, "adjacent"));
   1349   EXPECT_CALL(handler, OnMapEnd());
   1350   EXPECT_CALL(handler, OnSequenceEnd());
   1351   EXPECT_CALL(handler, OnSequenceEnd());
   1352   EXPECT_CALL(handler, OnDocumentEnd());
   1353   Parse(ex7_21);
   1354 }
   1355 
   1356 TEST_F(HandlerSpecTest, Ex7_22_InvalidImplicitKeys) {
   1357   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex7_22), ErrorMsg::END_OF_SEQ_FLOW);
   1358 }
   1359 
   1360 TEST_F(HandlerSpecTest, Ex7_23_FlowContent) {
   1361   EXPECT_CALL(handler, OnDocumentStart(_));
   1362   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1363   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
   1364   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
   1365   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
   1366   EXPECT_CALL(handler, OnSequenceEnd());
   1367   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
   1368   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
   1369   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
   1370   EXPECT_CALL(handler, OnMapEnd());
   1371   EXPECT_CALL(handler, OnScalar(_, "!", 0, "a"));
   1372   EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
   1373   EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
   1374   EXPECT_CALL(handler, OnSequenceEnd());
   1375   EXPECT_CALL(handler, OnDocumentEnd());
   1376   Parse(ex7_23);
   1377 }
   1378 
   1379 TEST_F(HandlerSpecTest, Ex7_24_FlowNodes) {
   1380   EXPECT_CALL(handler, OnDocumentStart(_));
   1381   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1382   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "a"));
   1383   EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
   1384   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
   1385   EXPECT_CALL(handler, OnScalar(_, "!", 1, "c"));
   1386   EXPECT_CALL(handler, OnAlias(_, 1));
   1387   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
   1388   EXPECT_CALL(handler, OnSequenceEnd());
   1389   EXPECT_CALL(handler, OnDocumentEnd());
   1390   Parse(ex7_24);
   1391 }
   1392 
   1393 TEST_F(HandlerSpecTest, Ex8_1_BlockScalarHeader) {
   1394   EXPECT_CALL(handler, OnDocumentStart(_));
   1395   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1396   EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n"));
   1397   EXPECT_CALL(handler, OnScalar(_, "!", 0, " folded\n"));
   1398   EXPECT_CALL(handler, OnScalar(_, "!", 0, "keep\n\n"));
   1399   EXPECT_CALL(handler, OnScalar(_, "!", 0, " strip"));
   1400   EXPECT_CALL(handler, OnSequenceEnd());
   1401   EXPECT_CALL(handler, OnDocumentEnd());
   1402   Parse(ex8_1);
   1403 }
   1404 
   1405 TEST_F(HandlerSpecTest, Ex8_2_BlockIndentationHeader) {
   1406   EXPECT_CALL(handler, OnDocumentStart(_));
   1407   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1408   EXPECT_CALL(handler, OnScalar(_, "!", 0, "detected\n"));
   1409   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\n# detected\n"));
   1410   EXPECT_CALL(handler, OnScalar(_, "!", 0, " explicit\n"));
   1411   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\t\ndetected\n"));
   1412   EXPECT_CALL(handler, OnSequenceEnd());
   1413   EXPECT_CALL(handler, OnDocumentEnd());
   1414   Parse(ex8_2);
   1415 }
   1416 
   1417 TEST_F(HandlerSpecTest, Ex8_3a_InvalidBlockScalarIndentationIndicators) {
   1418   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3a), ErrorMsg::END_OF_SEQ);
   1419 }
   1420 
   1421 TEST_F(HandlerSpecTest, Ex8_3b_InvalidBlockScalarIndentationIndicators) {
   1422   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3b), ErrorMsg::END_OF_SEQ);
   1423 }
   1424 
   1425 TEST_F(HandlerSpecTest, Ex8_3c_InvalidBlockScalarIndentationIndicators) {
   1426   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3c), ErrorMsg::END_OF_SEQ);
   1427 }
   1428 
   1429 TEST_F(HandlerSpecTest, Ex8_4_ChompingFinalLineBreak) {
   1430   EXPECT_CALL(handler, OnDocumentStart(_));
   1431   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1432   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
   1433   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
   1434   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
   1435   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
   1436   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
   1437   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
   1438   EXPECT_CALL(handler, OnMapEnd());
   1439   EXPECT_CALL(handler, OnDocumentEnd());
   1440   Parse(ex8_4);
   1441 }
   1442 
   1443 TEST_F(HandlerSpecTest, DISABLED_Ex8_5_ChompingTrailingLines) {
   1444   EXPECT_CALL(handler, OnDocumentStart(_));
   1445   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1446   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
   1447   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text"));
   1448   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
   1449   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
   1450   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
   1451   // NOTE: I believe this is a bug in the YAML spec -
   1452   // it should be "# text\n\n"
   1453   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
   1454   EXPECT_CALL(handler, OnMapEnd());
   1455   EXPECT_CALL(handler, OnDocumentEnd());
   1456   Parse(ex8_5);
   1457 }
   1458 
   1459 TEST_F(HandlerSpecTest, Ex8_6_EmptyScalarChomping) {
   1460   EXPECT_CALL(handler, OnDocumentStart(_));
   1461   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1462   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
   1463   EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
   1464   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
   1465   EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
   1466   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
   1467   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n"));
   1468   EXPECT_CALL(handler, OnMapEnd());
   1469   EXPECT_CALL(handler, OnDocumentEnd());
   1470   Parse(ex8_6);
   1471 }
   1472 
   1473 TEST_F(HandlerSpecTest, Ex8_7_LiteralScalar) {
   1474   EXPECT_CALL(handler, OnDocumentStart(_));
   1475   EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n\ttext\n"));
   1476   EXPECT_CALL(handler, OnDocumentEnd());
   1477   Parse(ex8_7);
   1478 }
   1479 
   1480 TEST_F(HandlerSpecTest, Ex8_8_LiteralContent) {
   1481   EXPECT_CALL(handler, OnDocumentStart(_));
   1482   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\nliteral\n \n\ntext\n"));
   1483   EXPECT_CALL(handler, OnDocumentEnd());
   1484   Parse(ex8_8);
   1485 }
   1486 
   1487 TEST_F(HandlerSpecTest, Ex8_9_FoldedScalar) {
   1488   EXPECT_CALL(handler, OnDocumentStart(_));
   1489   EXPECT_CALL(handler, OnScalar(_, "!", 0, "folded text\n"));
   1490   EXPECT_CALL(handler, OnDocumentEnd());
   1491   Parse(ex8_9);
   1492 }
   1493 
   1494 TEST_F(HandlerSpecTest, Ex8_10_FoldedLines) {
   1495   EXPECT_CALL(handler, OnDocumentStart(_));
   1496   EXPECT_CALL(handler,
   1497               OnScalar(_, "!", 0,
   1498                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
   1499                        "lines\n\nlast line\n"));
   1500   EXPECT_CALL(handler, OnDocumentEnd());
   1501   Parse(ex8_10);
   1502 }
   1503 
   1504 TEST_F(HandlerSpecTest, Ex8_11_MoreIndentedLines) {
   1505   EXPECT_CALL(handler, OnDocumentStart(_));
   1506   EXPECT_CALL(handler,
   1507               OnScalar(_, "!", 0,
   1508                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
   1509                        "lines\n\nlast line\n"));
   1510   EXPECT_CALL(handler, OnDocumentEnd());
   1511   Parse(ex8_11);
   1512 }
   1513 
   1514 TEST_F(HandlerSpecTest, Ex8_12_EmptySeparationLines) {
   1515   EXPECT_CALL(handler, OnDocumentStart(_));
   1516   EXPECT_CALL(handler,
   1517               OnScalar(_, "!", 0,
   1518                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
   1519                        "lines\n\nlast line\n"));
   1520   EXPECT_CALL(handler, OnDocumentEnd());
   1521   Parse(ex8_12);
   1522 }
   1523 
   1524 TEST_F(HandlerSpecTest, Ex8_13_FinalEmptyLines) {
   1525   EXPECT_CALL(handler, OnDocumentStart(_));
   1526   EXPECT_CALL(handler,
   1527               OnScalar(_, "!", 0,
   1528                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
   1529                        "lines\n\nlast line\n"));
   1530   EXPECT_CALL(handler, OnDocumentEnd());
   1531   Parse(ex8_13);
   1532 }
   1533 
   1534 TEST_F(HandlerSpecTest, Ex8_14_BlockSequence) {
   1535   EXPECT_CALL(handler, OnDocumentStart(_));
   1536   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1537   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block sequence"));
   1538   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1539   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1540   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1541   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1542   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
   1543   EXPECT_CALL(handler, OnMapEnd());
   1544   EXPECT_CALL(handler, OnSequenceEnd());
   1545   EXPECT_CALL(handler, OnMapEnd());
   1546   EXPECT_CALL(handler, OnDocumentEnd());
   1547   Parse(ex8_14);
   1548 }
   1549 
   1550 TEST_F(HandlerSpecTest, Ex8_15_BlockSequenceEntryTypes) {
   1551   EXPECT_CALL(handler, OnDocumentStart(_));
   1552   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1553   EXPECT_CALL(handler, OnNull(_, 0));
   1554   EXPECT_CALL(handler, OnScalar(_, "!", 0, "block node\n"));
   1555   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1556   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1557   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1558   EXPECT_CALL(handler, OnSequenceEnd());
   1559   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1560   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1561   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1562   EXPECT_CALL(handler, OnMapEnd());
   1563   EXPECT_CALL(handler, OnSequenceEnd());
   1564   EXPECT_CALL(handler, OnDocumentEnd());
   1565   Parse(ex8_15);
   1566 }
   1567 
   1568 TEST_F(HandlerSpecTest, Ex8_16_BlockMappings) {
   1569   EXPECT_CALL(handler, OnDocumentStart(_));
   1570   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1571   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block mapping"));
   1572   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1573   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
   1574   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
   1575   EXPECT_CALL(handler, OnMapEnd());
   1576   EXPECT_CALL(handler, OnMapEnd());
   1577   EXPECT_CALL(handler, OnDocumentEnd());
   1578   Parse(ex8_16);
   1579 }
   1580 
   1581 TEST_F(HandlerSpecTest, Ex8_17_ExplicitBlockMappingEntries) {
   1582   EXPECT_CALL(handler, OnDocumentStart(_));
   1583   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1584   EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit key"));
   1585   EXPECT_CALL(handler, OnNull(_, 0));
   1586   EXPECT_CALL(handler, OnScalar(_, "!", 0, "block key\n"));
   1587   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1588   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
   1589   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
   1590   EXPECT_CALL(handler, OnSequenceEnd());
   1591   EXPECT_CALL(handler, OnMapEnd());
   1592   EXPECT_CALL(handler, OnDocumentEnd());
   1593   Parse(ex8_17);
   1594 }
   1595 
   1596 TEST_F(HandlerSpecTest, Ex8_18_ImplicitBlockMappingEntries) {
   1597   EXPECT_CALL(handler, OnDocumentStart(_));
   1598   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1599   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain key"));
   1600   EXPECT_CALL(handler, OnScalar(_, "?", 0, "in-line value"));
   1601   EXPECT_CALL(handler, OnNull(_, 0));
   1602   EXPECT_CALL(handler, OnNull(_, 0));
   1603   EXPECT_CALL(handler, OnScalar(_, "!", 0, "quoted key"));
   1604   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1605   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
   1606   EXPECT_CALL(handler, OnSequenceEnd());
   1607   EXPECT_CALL(handler, OnMapEnd());
   1608   EXPECT_CALL(handler, OnDocumentEnd());
   1609   Parse(ex8_18);
   1610 }
   1611 
   1612 TEST_F(HandlerSpecTest, Ex8_19_CompactBlockMappings) {
   1613   EXPECT_CALL(handler, OnDocumentStart(_));
   1614   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1615   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1616   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sun"));
   1617   EXPECT_CALL(handler, OnScalar(_, "?", 0, "yellow"));
   1618   EXPECT_CALL(handler, OnMapEnd());
   1619   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1620   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1621   EXPECT_CALL(handler, OnScalar(_, "?", 0, "earth"));
   1622   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
   1623   EXPECT_CALL(handler, OnMapEnd());
   1624   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1625   EXPECT_CALL(handler, OnScalar(_, "?", 0, "moon"));
   1626   EXPECT_CALL(handler, OnScalar(_, "?", 0, "white"));
   1627   EXPECT_CALL(handler, OnMapEnd());
   1628   EXPECT_CALL(handler, OnMapEnd());
   1629   EXPECT_CALL(handler, OnSequenceEnd());
   1630   EXPECT_CALL(handler, OnDocumentEnd());
   1631   Parse(ex8_19);
   1632 }
   1633 
   1634 TEST_F(HandlerSpecTest, Ex8_20_BlockNodeTypes) {
   1635   EXPECT_CALL(handler, OnDocumentStart(_));
   1636   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
   1637   EXPECT_CALL(handler, OnScalar(_, "!", 0, "flow in block"));
   1638   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Block scalar\n"));
   1639   EXPECT_CALL(handler,
   1640               OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
   1641   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
   1642   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
   1643   EXPECT_CALL(handler, OnMapEnd());
   1644   EXPECT_CALL(handler, OnSequenceEnd());
   1645   EXPECT_CALL(handler, OnDocumentEnd());
   1646   Parse(ex8_20);
   1647 }
   1648 
   1649 TEST_F(HandlerSpecTest, DISABLED_Ex8_21_BlockScalarNodes) {
   1650   EXPECT_CALL(handler, OnDocumentStart(_));
   1651   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1652   EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
   1653   // NOTE: I believe this is a bug in the YAML spec
   1654   // - it should be "value\n"
   1655   EXPECT_CALL(handler, OnScalar(_, "!", 0, "value"));
   1656   EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
   1657   EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "value"));
   1658   EXPECT_CALL(handler, OnMapEnd());
   1659   EXPECT_CALL(handler, OnDocumentEnd());
   1660   Parse(ex8_21);
   1661 }
   1662 
   1663 TEST_F(HandlerSpecTest, Ex8_22_BlockCollectionNodes) {
   1664   EXPECT_CALL(handler, OnDocumentStart(_));
   1665   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
   1666   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
   1667   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
   1668                                        EmitterStyle::Block));
   1669   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
   1670   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
   1671                                        EmitterStyle::Block));
   1672   EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
   1673   EXPECT_CALL(handler, OnSequenceEnd());
   1674   EXPECT_CALL(handler, OnSequenceEnd());
   1675   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
   1676   EXPECT_CALL(handler,
   1677               OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
   1678   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
   1679   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
   1680   EXPECT_CALL(handler, OnMapEnd());
   1681   EXPECT_CALL(handler, OnMapEnd());
   1682   EXPECT_CALL(handler, OnDocumentEnd());
   1683   Parse(ex8_22);
   1684 }
   1685 }  // namespace
   1686 }  // namespace YAML