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 
TEST_F(HandlerSpecTest,Ex2_1_SeqScalars)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 
TEST_F(HandlerSpecTest,Ex2_2_MappingScalarsToScalars)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 
TEST_F(HandlerSpecTest,Ex2_3_MappingScalarsToSequences)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 
TEST_F(HandlerSpecTest,Ex2_4_SequenceOfMappings)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 
TEST_F(HandlerSpecTest,Ex2_5_SequenceOfSequences)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 
TEST_F(HandlerSpecTest,Ex2_6_MappingOfMappings)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 
TEST_F(HandlerSpecTest,Ex2_7_TwoDocumentsInAStream)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 
TEST_F(HandlerSpecTest,Ex2_8_PlayByPlayFeed)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 
TEST_F(HandlerSpecTest,Ex2_9_SingleDocumentWithTwoComments)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 
TEST_F(HandlerSpecTest,Ex2_10_SimpleAnchor)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 
TEST_F(HandlerSpecTest,Ex2_11_MappingBetweenSequences)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 
TEST_F(HandlerSpecTest,Ex2_12_CompactNestedMapping)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 
TEST_F(HandlerSpecTest,Ex2_13_InLiteralsNewlinesArePreserved)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 
TEST_F(HandlerSpecTest,Ex2_14_InFoldedScalarsNewlinesBecomeSpaces)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 
TEST_F(HandlerSpecTest,Ex2_15_FoldedNewlinesArePreservedForMoreIndentedAndBlankLines)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 
TEST_F(HandlerSpecTest,Ex2_16_IndentationDeterminesScope)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 
TEST_F(HandlerSpecTest,Ex2_17_QuotedScalars)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 
TEST_F(HandlerSpecTest,Ex2_18_MultiLineFlowScalars)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 // TODO: 2.19 - 2.22 schema tags
351 
TEST_F(HandlerSpecTest,Ex2_23_VariousExplicitTags)352 TEST_F(HandlerSpecTest, Ex2_23_VariousExplicitTags) {
353   EXPECT_CALL(handler, OnDocumentStart(_));
354   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
355   EXPECT_CALL(handler, OnScalar(_, "?", 0, "not-date"));
356   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "2002-04-28"));
357   EXPECT_CALL(handler, OnScalar(_, "?", 0, "picture"));
358   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:binary", 0,
359                                 "R0lGODlhDAAMAIQAAP//9/X\n"
360                                 "17unp5WZmZgAAAOfn515eXv\n"
361                                 "Pz7Y6OjuDg4J+fn5OTk6enp\n"
362                                 "56enmleECcgggoBADs=\n"));
363   EXPECT_CALL(handler, OnScalar(_, "?", 0, "application specific tag"));
364   EXPECT_CALL(handler, OnScalar(_, "!something", 0,
365                                 "The semantics of the tag\n"
366                                 "above may be different for\n"
367                                 "different documents."));
368   EXPECT_CALL(handler, OnMapEnd());
369   EXPECT_CALL(handler, OnDocumentEnd());
370   Parse(ex2_23);
371 }
372 
TEST_F(HandlerSpecTest,Ex2_24_GlobalTags)373 TEST_F(HandlerSpecTest, Ex2_24_GlobalTags) {
374   EXPECT_CALL(handler, OnDocumentStart(_));
375   EXPECT_CALL(handler, OnSequenceStart(_, "tag:clarkevans.com,2002:shape", 0,
376                                        EmitterStyle::Block));
377   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:circle", 0,
378                                   EmitterStyle::Block));
379   EXPECT_CALL(handler, OnScalar(_, "?", 0, "center"));
380   EXPECT_CALL(handler, OnAnchor(_, "ORIGIN"));
381   EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Flow));
382   EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
383   EXPECT_CALL(handler, OnScalar(_, "?", 0, "73"));
384   EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
385   EXPECT_CALL(handler, OnScalar(_, "?", 0, "129"));
386   EXPECT_CALL(handler, OnMapEnd());
387   EXPECT_CALL(handler, OnScalar(_, "?", 0, "radius"));
388   EXPECT_CALL(handler, OnScalar(_, "?", 0, "7"));
389   EXPECT_CALL(handler, OnMapEnd());
390   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:line", 0,
391                                   EmitterStyle::Block));
392   EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
393   EXPECT_CALL(handler, OnAlias(_, 1));
394   EXPECT_CALL(handler, OnScalar(_, "?", 0, "finish"));
395   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
396   EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
397   EXPECT_CALL(handler, OnScalar(_, "?", 0, "89"));
398   EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
399   EXPECT_CALL(handler, OnScalar(_, "?", 0, "102"));
400   EXPECT_CALL(handler, OnMapEnd());
401   EXPECT_CALL(handler, OnMapEnd());
402   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:label", 0,
403                                   EmitterStyle::Block));
404   EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
405   EXPECT_CALL(handler, OnAlias(_, 1));
406   EXPECT_CALL(handler, OnScalar(_, "?", 0, "color"));
407   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0xFFEEBB"));
408   EXPECT_CALL(handler, OnScalar(_, "?", 0, "text"));
409   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Pretty vector drawing."));
410   EXPECT_CALL(handler, OnMapEnd());
411   EXPECT_CALL(handler, OnSequenceEnd());
412   EXPECT_CALL(handler, OnDocumentEnd());
413   Parse(ex2_24);
414 }
415 
TEST_F(HandlerSpecTest,Ex2_25_UnorderedSets)416 TEST_F(HandlerSpecTest, Ex2_25_UnorderedSets) {
417   EXPECT_CALL(handler, OnDocumentStart(_));
418   EXPECT_CALL(handler,
419               OnMapStart(_, "tag:yaml.org,2002:set", 0, EmitterStyle::Block));
420   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
421   EXPECT_CALL(handler, OnNull(_, 0));
422   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
423   EXPECT_CALL(handler, OnNull(_, 0));
424   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
425   EXPECT_CALL(handler, OnNull(_, 0));
426   EXPECT_CALL(handler, OnMapEnd());
427   EXPECT_CALL(handler, OnDocumentEnd());
428   Parse(ex2_25);
429 }
430 
TEST_F(HandlerSpecTest,Ex2_26_OrderedMappings)431 TEST_F(HandlerSpecTest, Ex2_26_OrderedMappings) {
432   EXPECT_CALL(handler, OnDocumentStart(_));
433   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:omap", 0,
434                                        EmitterStyle::Block));
435   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
436   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
437   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
438   EXPECT_CALL(handler, OnMapEnd());
439   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
440   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
441   EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
442   EXPECT_CALL(handler, OnMapEnd());
443   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
444   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
445   EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
446   EXPECT_CALL(handler, OnMapEnd());
447   EXPECT_CALL(handler, OnSequenceEnd());
448   EXPECT_CALL(handler, OnDocumentEnd());
449   Parse(ex2_26);
450 }
451 
TEST_F(HandlerSpecTest,Ex2_27_Invoice)452 TEST_F(HandlerSpecTest, Ex2_27_Invoice) {
453   EXPECT_CALL(handler, OnDocumentStart(_));
454   EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:invoice", 0,
455                                   EmitterStyle::Block));
456   EXPECT_CALL(handler, OnScalar(_, "?", 0, "invoice"));
457   EXPECT_CALL(handler, OnScalar(_, "?", 0, "34843"));
458   EXPECT_CALL(handler, OnScalar(_, "?", 0, "date"));
459   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-01-23"));
460   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bill-to"));
461   EXPECT_CALL(handler, OnAnchor(_, "id001"));
462   EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Block));
463   EXPECT_CALL(handler, OnScalar(_, "?", 0, "given"));
464   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chris"));
465   EXPECT_CALL(handler, OnScalar(_, "?", 0, "family"));
466   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Dumars"));
467   EXPECT_CALL(handler, OnScalar(_, "?", 0, "address"));
468   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
469   EXPECT_CALL(handler, OnScalar(_, "?", 0, "lines"));
470   EXPECT_CALL(handler, OnScalar(_, "!", 0,
471                                 "458 Walkman Dr.\n"
472                                 "Suite #292\n"));
473   EXPECT_CALL(handler, OnScalar(_, "?", 0, "city"));
474   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Royal Oak"));
475   EXPECT_CALL(handler, OnScalar(_, "?", 0, "state"));
476   EXPECT_CALL(handler, OnScalar(_, "?", 0, "MI"));
477   EXPECT_CALL(handler, OnScalar(_, "?", 0, "postal"));
478   EXPECT_CALL(handler, OnScalar(_, "?", 0, "48046"));
479   EXPECT_CALL(handler, OnMapEnd());
480   EXPECT_CALL(handler, OnMapEnd());
481   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ship-to"));
482   EXPECT_CALL(handler, OnAlias(_, 1));
483   EXPECT_CALL(handler, OnScalar(_, "?", 0, "product"));
484   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
485   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
486   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
487   EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL394D"));
488   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
489   EXPECT_CALL(handler, OnScalar(_, "?", 0, "4"));
490   EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
491   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball"));
492   EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
493   EXPECT_CALL(handler, OnScalar(_, "?", 0, "450.00"));
494   EXPECT_CALL(handler, OnMapEnd());
495   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
496   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
497   EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL4438H"));
498   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
499   EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
500   EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
501   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop"));
502   EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
503   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2392.00"));
504   EXPECT_CALL(handler, OnMapEnd());
505   EXPECT_CALL(handler, OnSequenceEnd());
506   EXPECT_CALL(handler, OnScalar(_, "?", 0, "tax"));
507   EXPECT_CALL(handler, OnScalar(_, "?", 0, "251.42"));
508   EXPECT_CALL(handler, OnScalar(_, "?", 0, "total"));
509   EXPECT_CALL(handler, OnScalar(_, "?", 0, "4443.52"));
510   EXPECT_CALL(handler, OnScalar(_, "?", 0, "comments"));
511   EXPECT_CALL(handler, OnScalar(_, "?", 0,
512                                 "Late afternoon is best. Backup contact is "
513                                 "Nancy Billsmer @ 338-4338."));
514   EXPECT_CALL(handler, OnMapEnd());
515   EXPECT_CALL(handler, OnDocumentEnd());
516   Parse(ex2_27);
517 }
518 
TEST_F(HandlerSpecTest,Ex2_28_LogFile)519 TEST_F(HandlerSpecTest, Ex2_28_LogFile) {
520   EXPECT_CALL(handler, OnDocumentStart(_));
521   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
522   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
523   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:01:42 -5"));
524   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
525   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
526   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
527   EXPECT_CALL(handler,
528               OnScalar(_, "?", 0, "This is an error message for the log file"));
529   EXPECT_CALL(handler, OnMapEnd());
530   EXPECT_CALL(handler, OnDocumentEnd());
531   EXPECT_CALL(handler, OnDocumentStart(_));
532   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
533   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
534   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:02:31 -5"));
535   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
536   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
537   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
538   EXPECT_CALL(handler,
539               OnScalar(_, "?", 0, "A slightly different error message."));
540   EXPECT_CALL(handler, OnMapEnd());
541   EXPECT_CALL(handler, OnDocumentEnd());
542   EXPECT_CALL(handler, OnDocumentStart(_));
543   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
544   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Date"));
545   EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:03:17 -5"));
546   EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
547   EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
548   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Fatal"));
549   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Unknown variable \"bar\""));
550   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Stack"));
551   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
552   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
553   EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
554   EXPECT_CALL(handler, OnScalar(_, "?", 0, "TopClass.py"));
555   EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
556   EXPECT_CALL(handler, OnScalar(_, "?", 0, "23"));
557   EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
558   EXPECT_CALL(handler, OnScalar(_, "!", 0, "x = MoreObject(\"345\\n\")\n"));
559   EXPECT_CALL(handler, OnMapEnd());
560   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
561   EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
562   EXPECT_CALL(handler, OnScalar(_, "?", 0, "MoreClass.py"));
563   EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
564   EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
565   EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
566   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo = bar"));
567   EXPECT_CALL(handler, OnMapEnd());
568   EXPECT_CALL(handler, OnSequenceEnd());
569   EXPECT_CALL(handler, OnMapEnd());
570   EXPECT_CALL(handler, OnDocumentEnd());
571   Parse(ex2_28);
572 }
573 
574 // TODO: 5.1 - 5.2 BOM
575 
TEST_F(HandlerSpecTest,Ex5_3_BlockStructureIndicators)576 TEST_F(HandlerSpecTest, Ex5_3_BlockStructureIndicators) {
577   EXPECT_CALL(handler, OnDocumentStart(_));
578   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
579   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
580   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
581   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
582   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
583   EXPECT_CALL(handler, OnSequenceEnd());
584   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
585   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
586   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
587   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
588   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
589   EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
590   EXPECT_CALL(handler, OnMapEnd());
591   EXPECT_CALL(handler, OnMapEnd());
592   EXPECT_CALL(handler, OnDocumentEnd());
593   Parse(ex5_3);
594 }
595 
TEST_F(HandlerSpecTest,Ex5_4_FlowStructureIndicators)596 TEST_F(HandlerSpecTest, Ex5_4_FlowStructureIndicators) {
597   EXPECT_CALL(handler, OnDocumentStart(_));
598   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
599   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
600   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
601   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
602   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
603   EXPECT_CALL(handler, OnSequenceEnd());
604   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
605   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
606   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
607   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
608   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
609   EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
610   EXPECT_CALL(handler, OnMapEnd());
611   EXPECT_CALL(handler, OnMapEnd());
612   EXPECT_CALL(handler, OnDocumentEnd());
613   Parse(ex5_4);
614 }
615 
TEST_F(HandlerSpecTest,Ex5_5_CommentIndicator)616 TEST_F(HandlerSpecTest, Ex5_5_CommentIndicator) { Parse(ex5_5); }
617 
TEST_F(HandlerSpecTest,Ex5_6_NodePropertyIndicators)618 TEST_F(HandlerSpecTest, Ex5_6_NodePropertyIndicators) {
619   EXPECT_CALL(handler, OnDocumentStart(_));
620   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
621   EXPECT_CALL(handler, OnScalar(_, "?", 0, "anchored"));
622   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
623   EXPECT_CALL(handler, OnScalar(_, "!local", 1, "value"));
624   EXPECT_CALL(handler, OnScalar(_, "?", 0, "alias"));
625   EXPECT_CALL(handler, OnAlias(_, 1));
626   EXPECT_CALL(handler, OnMapEnd());
627   EXPECT_CALL(handler, OnDocumentEnd());
628   Parse(ex5_6);
629 }
630 
TEST_F(HandlerSpecTest,Ex5_7_BlockScalarIndicators)631 TEST_F(HandlerSpecTest, Ex5_7_BlockScalarIndicators) {
632   EXPECT_CALL(handler, OnDocumentStart(_));
633   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
634   EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
635   EXPECT_CALL(handler, OnScalar(_, "!", 0, "some\ntext\n"));
636   EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
637   EXPECT_CALL(handler, OnScalar(_, "!", 0, "some text\n"));
638   EXPECT_CALL(handler, OnMapEnd());
639   EXPECT_CALL(handler, OnDocumentEnd());
640   Parse(ex5_7);
641 }
642 
TEST_F(HandlerSpecTest,Ex5_8_QuotedScalarIndicators)643 TEST_F(HandlerSpecTest, Ex5_8_QuotedScalarIndicators) {
644   EXPECT_CALL(handler, OnDocumentStart(_));
645   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
646   EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
647   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
648   EXPECT_CALL(handler, OnScalar(_, "?", 0, "double"));
649   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
650   EXPECT_CALL(handler, OnMapEnd());
651   EXPECT_CALL(handler, OnDocumentEnd());
652   Parse(ex5_8);
653 }
654 
655 // TODO: 5.9 directive
656 // TODO: 5.10 reserved indicator
657 
TEST_F(HandlerSpecTest,Ex5_11_LineBreakCharacters)658 TEST_F(HandlerSpecTest, Ex5_11_LineBreakCharacters) {
659   EXPECT_CALL(handler, OnDocumentStart(_));
660   EXPECT_CALL(handler, OnScalar(_, "!", 0,
661                                 "Line break (no glyph)\n"
662                                 "Line break (glyphed)\n"));
663   EXPECT_CALL(handler, OnDocumentEnd());
664   Parse(ex5_11);
665 }
666 
TEST_F(HandlerSpecTest,Ex5_12_TabsAndSpaces)667 TEST_F(HandlerSpecTest, Ex5_12_TabsAndSpaces) {
668   EXPECT_CALL(handler, OnDocumentStart(_));
669   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
670   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
671   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Quoted\t"));
672   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
673   EXPECT_CALL(handler, OnScalar(_, "!", 0,
674                                 "void main() {\n"
675                                 "\tprintf(\"Hello, world!\\n\");\n"
676                                 "}"));
677   EXPECT_CALL(handler, OnMapEnd());
678   EXPECT_CALL(handler, OnDocumentEnd());
679   Parse(ex5_12);
680 }
681 
TEST_F(HandlerSpecTest,Ex5_13_EscapedCharacters)682 TEST_F(HandlerSpecTest, Ex5_13_EscapedCharacters) {
683   EXPECT_CALL(handler, OnDocumentStart(_));
684   EXPECT_CALL(
685       handler,
686       OnScalar(_, "!", 0,
687                "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " +
688                    std::string("\x00", 1) +
689                    " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A"));
690   EXPECT_CALL(handler, OnDocumentEnd());
691   Parse(ex5_13);
692 }
693 
TEST_F(HandlerSpecTest,Ex5_14_InvalidEscapedCharacters)694 TEST_F(HandlerSpecTest, Ex5_14_InvalidEscapedCharacters) {
695   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex5_14),
696                                 std::string(ErrorMsg::INVALID_ESCAPE) + "c");
697 }
698 
TEST_F(HandlerSpecTest,Ex6_1_IndentationSpaces)699 TEST_F(HandlerSpecTest, Ex6_1_IndentationSpaces) {
700   EXPECT_CALL(handler, OnDocumentStart(_));
701   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
702   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Not indented"));
703   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
704   EXPECT_CALL(handler, OnScalar(_, "?", 0, "By one space"));
705   EXPECT_CALL(handler, OnScalar(_, "!", 0, "By four\n  spaces\n"));
706   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Flow style"));
707   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
708   EXPECT_CALL(handler, OnScalar(_, "?", 0, "By two"));
709   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Also by two"));
710   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Still by two"));
711   EXPECT_CALL(handler, OnSequenceEnd());
712   EXPECT_CALL(handler, OnMapEnd());
713   EXPECT_CALL(handler, OnMapEnd());
714   EXPECT_CALL(handler, OnDocumentEnd());
715   Parse(ex6_1);
716 }
717 
TEST_F(HandlerSpecTest,Ex6_2_IndentationIndicators)718 TEST_F(HandlerSpecTest, Ex6_2_IndentationIndicators) {
719   EXPECT_CALL(handler, OnDocumentStart(_));
720   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
721   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
722   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
723   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
724   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
725   EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
726   EXPECT_CALL(handler, OnScalar(_, "?", 0, "d"));
727   EXPECT_CALL(handler, OnSequenceEnd());
728   EXPECT_CALL(handler, OnSequenceEnd());
729   EXPECT_CALL(handler, OnMapEnd());
730   EXPECT_CALL(handler, OnDocumentEnd());
731   Parse(ex6_2);
732 }
733 
TEST_F(HandlerSpecTest,Ex6_3_SeparationSpaces)734 TEST_F(HandlerSpecTest, Ex6_3_SeparationSpaces) {
735   EXPECT_CALL(handler, OnDocumentStart(_));
736   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
737   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
738   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
739   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
740   EXPECT_CALL(handler, OnMapEnd());
741   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
742   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
743   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
744   EXPECT_CALL(handler, OnSequenceEnd());
745   EXPECT_CALL(handler, OnSequenceEnd());
746   EXPECT_CALL(handler, OnDocumentEnd());
747   Parse(ex6_3);
748 }
749 
TEST_F(HandlerSpecTest,Ex6_4_LinePrefixes)750 TEST_F(HandlerSpecTest, Ex6_4_LinePrefixes) {
751   EXPECT_CALL(handler, OnDocumentStart(_));
752   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
753   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain"));
754   EXPECT_CALL(handler, OnScalar(_, "?", 0, "text lines"));
755   EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
756   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text lines"));
757   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
758   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n \tlines\n"));
759   EXPECT_CALL(handler, OnMapEnd());
760   EXPECT_CALL(handler, OnDocumentEnd());
761   Parse(ex6_4);
762 }
763 
TEST_F(HandlerSpecTest,Ex6_5_EmptyLines)764 TEST_F(HandlerSpecTest, Ex6_5_EmptyLines) {
765   EXPECT_CALL(handler, OnDocumentStart(_));
766   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
767   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Folding"));
768   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Empty line\nas a line feed"));
769   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chomping"));
770   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Clipped empty lines\n"));
771   EXPECT_CALL(handler, OnMapEnd());
772   EXPECT_CALL(handler, OnDocumentEnd());
773   Parse(ex6_5);
774 }
775 
TEST_F(HandlerSpecTest,Ex6_6_LineFolding)776 TEST_F(HandlerSpecTest, Ex6_6_LineFolding) {
777   EXPECT_CALL(handler, OnDocumentStart(_));
778   EXPECT_CALL(handler, OnScalar(_, "!", 0, "trimmed\n\n\nas space"));
779   EXPECT_CALL(handler, OnDocumentEnd());
780   Parse(ex6_6);
781 }
782 
TEST_F(HandlerSpecTest,Ex6_7_BlockFolding)783 TEST_F(HandlerSpecTest, Ex6_7_BlockFolding) {
784   EXPECT_CALL(handler, OnDocumentStart(_));
785   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo \n\n\t bar\n\nbaz\n"));
786   EXPECT_CALL(handler, OnDocumentEnd());
787   Parse(ex6_7);
788 }
789 
TEST_F(HandlerSpecTest,Ex6_8_FlowFolding)790 TEST_F(HandlerSpecTest, Ex6_8_FlowFolding) {
791   EXPECT_CALL(handler, OnDocumentStart(_));
792   EXPECT_CALL(handler, OnScalar(_, "!", 0, " foo\nbar\nbaz "));
793   EXPECT_CALL(handler, OnDocumentEnd());
794   Parse(ex6_8);
795 }
796 
TEST_F(HandlerSpecTest,Ex6_9_SeparatedComment)797 TEST_F(HandlerSpecTest, Ex6_9_SeparatedComment) {
798   EXPECT_CALL(handler, OnDocumentStart(_));
799   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
800   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
801   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
802   EXPECT_CALL(handler, OnMapEnd());
803   EXPECT_CALL(handler, OnDocumentEnd());
804   Parse(ex6_9);
805 }
806 
TEST_F(HandlerSpecTest,Ex6_10_CommentLines)807 TEST_F(HandlerSpecTest, Ex6_10_CommentLines) { Parse(ex6_10); }
808 
TEST_F(HandlerSpecTest,_MultiLineComments)809 TEST_F(HandlerSpecTest, _MultiLineComments) {
810   EXPECT_CALL(handler, OnDocumentStart(_));
811   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
812   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
813   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
814   EXPECT_CALL(handler, OnMapEnd());
815   EXPECT_CALL(handler, OnDocumentEnd());
816   Parse(ex6_11);
817 }
818 
TEST_F(HandlerSpecTest,Ex6_12_SeparationSpacesII)819 TEST_F(HandlerSpecTest, Ex6_12_SeparationSpacesII) {
820   EXPECT_CALL(handler, OnDocumentStart(_));
821   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
822   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
823   EXPECT_CALL(handler, OnScalar(_, "?", 0, "first"));
824   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy"));
825   EXPECT_CALL(handler, OnScalar(_, "?", 0, "last"));
826   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sosa"));
827   EXPECT_CALL(handler, OnMapEnd());
828   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
829   EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
830   EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
831   EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
832   EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
833   EXPECT_CALL(handler, OnMapEnd());
834   EXPECT_CALL(handler, OnMapEnd());
835   EXPECT_CALL(handler, OnDocumentEnd());
836   Parse(ex6_12);
837 }
838 
TEST_F(HandlerSpecTest,Ex6_13_ReservedDirectives)839 TEST_F(HandlerSpecTest, Ex6_13_ReservedDirectives) {
840   EXPECT_CALL(handler, OnDocumentStart(_));
841   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
842   EXPECT_CALL(handler, OnDocumentEnd());
843   Parse(ex6_13);
844 }
845 
TEST_F(HandlerSpecTest,Ex6_14_YAMLDirective)846 TEST_F(HandlerSpecTest, Ex6_14_YAMLDirective) {
847   EXPECT_CALL(handler, OnDocumentStart(_));
848   EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
849   EXPECT_CALL(handler, OnDocumentEnd());
850   Parse(ex6_14);
851 }
852 
TEST_F(HandlerSpecTest,Ex6_15_InvalidRepeatedYAMLDirective)853 TEST_F(HandlerSpecTest, Ex6_15_InvalidRepeatedYAMLDirective) {
854   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_15),
855                                 ErrorMsg::REPEATED_YAML_DIRECTIVE);
856 }
857 
TEST_F(HandlerSpecTest,Ex6_16_TagDirective)858 TEST_F(HandlerSpecTest, Ex6_16_TagDirective) {
859   EXPECT_CALL(handler, OnDocumentStart(_));
860   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
861   EXPECT_CALL(handler, OnDocumentEnd());
862   Parse(ex6_16);
863 }
864 
TEST_F(HandlerSpecTest,Ex6_17_InvalidRepeatedTagDirective)865 TEST_F(HandlerSpecTest, Ex6_17_InvalidRepeatedTagDirective) {
866   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_17),
867                                 ErrorMsg::REPEATED_TAG_DIRECTIVE);
868 }
869 
TEST_F(HandlerSpecTest,Ex6_18_PrimaryTagHandle)870 TEST_F(HandlerSpecTest, Ex6_18_PrimaryTagHandle) {
871   EXPECT_CALL(handler, OnDocumentStart(_));
872   EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "bar"));
873   EXPECT_CALL(handler, OnDocumentEnd());
874   EXPECT_CALL(handler, OnDocumentStart(_));
875   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
876   EXPECT_CALL(handler, OnDocumentEnd());
877   Parse(ex6_18);
878 }
879 
TEST_F(HandlerSpecTest,Ex6_19_SecondaryTagHandle)880 TEST_F(HandlerSpecTest, Ex6_19_SecondaryTagHandle) {
881   EXPECT_CALL(handler, OnDocumentStart(_));
882   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/int", 0, "1 - 3"));
883   EXPECT_CALL(handler, OnDocumentEnd());
884   Parse(ex6_19);
885 }
886 
TEST_F(HandlerSpecTest,Ex6_20_TagHandles)887 TEST_F(HandlerSpecTest, Ex6_20_TagHandles) {
888   EXPECT_CALL(handler, OnDocumentStart(_));
889   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
890   EXPECT_CALL(handler, OnDocumentEnd());
891   Parse(ex6_20);
892 }
893 
TEST_F(HandlerSpecTest,Ex6_21_LocalTagPrefix)894 TEST_F(HandlerSpecTest, Ex6_21_LocalTagPrefix) {
895   EXPECT_CALL(handler, OnDocumentStart(_));
896   EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "fluorescent"));
897   EXPECT_CALL(handler, OnDocumentEnd());
898   EXPECT_CALL(handler, OnDocumentStart(_));
899   EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "green"));
900   EXPECT_CALL(handler, OnDocumentEnd());
901   Parse(ex6_21);
902 }
903 
TEST_F(HandlerSpecTest,Ex6_22_GlobalTagPrefix)904 TEST_F(HandlerSpecTest, Ex6_22_GlobalTagPrefix) {
905   EXPECT_CALL(handler, OnDocumentStart(_));
906   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
907   EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
908   EXPECT_CALL(handler, OnSequenceEnd());
909   EXPECT_CALL(handler, OnDocumentEnd());
910   Parse(ex6_22);
911 }
912 
TEST_F(HandlerSpecTest,Ex6_23_NodeProperties)913 TEST_F(HandlerSpecTest, Ex6_23_NodeProperties) {
914   EXPECT_CALL(handler, OnDocumentStart(_));
915   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
916   EXPECT_CALL(handler, OnAnchor(_, "a1"));
917   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 1, "foo"));
918   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
919   EXPECT_CALL(handler, OnAnchor(_, "a2"));
920   EXPECT_CALL(handler, OnScalar(_, "?", 2, "baz"));
921   EXPECT_CALL(handler, OnAlias(_, 1));
922   EXPECT_CALL(handler, OnMapEnd());
923   EXPECT_CALL(handler, OnDocumentEnd());
924   Parse(ex6_23);
925 }
926 
TEST_F(HandlerSpecTest,Ex6_24_VerbatimTags)927 TEST_F(HandlerSpecTest, Ex6_24_VerbatimTags) {
928   EXPECT_CALL(handler, OnDocumentStart(_));
929   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
930   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
931   EXPECT_CALL(handler, OnScalar(_, "!bar", 0, "baz"));
932   EXPECT_CALL(handler, OnMapEnd());
933   EXPECT_CALL(handler, OnDocumentEnd());
934   Parse(ex6_24);
935 }
936 
937 // TODO: Implement
TEST_F(HandlerSpecTest,DISABLED_Ex6_25_InvalidVerbatimTags)938 TEST_F(HandlerSpecTest, DISABLED_Ex6_25_InvalidVerbatimTags) {
939   Parse(ex6_25);
940   FAIL() << "not implemented yet";
941 }
942 
TEST_F(HandlerSpecTest,Ex6_26_TagShorthands)943 TEST_F(HandlerSpecTest, Ex6_26_TagShorthands) {
944   EXPECT_CALL(handler, OnDocumentStart(_));
945   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
946   EXPECT_CALL(handler, OnScalar(_, "!local", 0, "foo"));
947   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
948   EXPECT_CALL(handler,
949               OnScalar(_, "tag:example.com,2000:app/tag%21", 0, "baz"));
950   EXPECT_CALL(handler, OnSequenceEnd());
951   EXPECT_CALL(handler, OnDocumentEnd());
952   Parse(ex6_26);
953 }
954 
TEST_F(HandlerSpecTest,Ex6_27a_InvalidTagShorthands)955 TEST_F(HandlerSpecTest, Ex6_27a_InvalidTagShorthands) {
956   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_27a),
957                                 ErrorMsg::TAG_WITH_NO_SUFFIX);
958 }
959 
960 // TODO: should we reject this one (since !h! is not declared)?
TEST_F(HandlerSpecTest,DISABLED_Ex6_27b_InvalidTagShorthands)961 TEST_F(HandlerSpecTest, DISABLED_Ex6_27b_InvalidTagShorthands) {
962   Parse(ex6_27b);
963   FAIL() << "not implemented yet";
964 }
965 
TEST_F(HandlerSpecTest,Ex6_28_NonSpecificTags)966 TEST_F(HandlerSpecTest, Ex6_28_NonSpecificTags) {
967   EXPECT_CALL(handler, OnDocumentStart(_));
968   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
969   EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
970   EXPECT_CALL(handler, OnScalar(_, "?", 0, "12"));
971   EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
972   EXPECT_CALL(handler, OnSequenceEnd());
973   EXPECT_CALL(handler, OnDocumentEnd());
974   Parse(ex6_28);
975 }
976 
TEST_F(HandlerSpecTest,Ex6_29_NodeAnchors)977 TEST_F(HandlerSpecTest, Ex6_29_NodeAnchors) {
978   EXPECT_CALL(handler, OnDocumentStart(_));
979   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
980   EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
981   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
982   EXPECT_CALL(handler, OnScalar(_, "?", 1, "Value"));
983   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
984   EXPECT_CALL(handler, OnAlias(_, 1));
985   EXPECT_CALL(handler, OnMapEnd());
986   EXPECT_CALL(handler, OnDocumentEnd());
987   Parse(ex6_29);
988 }
989 
TEST_F(HandlerSpecTest,Ex7_1_AliasNodes)990 TEST_F(HandlerSpecTest, Ex7_1_AliasNodes) {
991   EXPECT_CALL(handler, OnDocumentStart(_));
992   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
993   EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
994   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
995   EXPECT_CALL(handler, OnScalar(_, "?", 1, "Foo"));
996   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
997   EXPECT_CALL(handler, OnAlias(_, 1));
998   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Override anchor"));
999   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
1000   EXPECT_CALL(handler, OnScalar(_, "?", 2, "Bar"));
1001   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Reuse anchor"));
1002   EXPECT_CALL(handler, OnAlias(_, 2));
1003   EXPECT_CALL(handler, OnMapEnd());
1004   EXPECT_CALL(handler, OnDocumentEnd());
1005   Parse(ex7_1);
1006 }
1007 
TEST_F(HandlerSpecTest,Ex7_2_EmptyNodes)1008 TEST_F(HandlerSpecTest, Ex7_2_EmptyNodes) {
1009   EXPECT_CALL(handler, OnDocumentStart(_));
1010   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1011   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
1012   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
1013   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
1014   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
1015   EXPECT_CALL(handler, OnMapEnd());
1016   EXPECT_CALL(handler, OnDocumentEnd());
1017   Parse(ex7_2);
1018 }
1019 
TEST_F(HandlerSpecTest,Ex7_3_CompletelyEmptyNodes)1020 TEST_F(HandlerSpecTest, Ex7_3_CompletelyEmptyNodes) {
1021   EXPECT_CALL(handler, OnDocumentStart(_));
1022   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1023   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
1024   EXPECT_CALL(handler, OnNull(_, 0));
1025   EXPECT_CALL(handler, OnNull(_, 0));
1026   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
1027   EXPECT_CALL(handler, OnMapEnd());
1028   EXPECT_CALL(handler, OnDocumentEnd());
1029   Parse(ex7_3);
1030 }
1031 
TEST_F(HandlerSpecTest,Ex7_4_DoubleQuotedImplicitKeys)1032 TEST_F(HandlerSpecTest, Ex7_4_DoubleQuotedImplicitKeys) {
1033   EXPECT_CALL(handler, OnDocumentStart(_));
1034   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1035   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
1036   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1037   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1038   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
1039   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1040   EXPECT_CALL(handler, OnMapEnd());
1041   EXPECT_CALL(handler, OnSequenceEnd());
1042   EXPECT_CALL(handler, OnMapEnd());
1043   EXPECT_CALL(handler, OnDocumentEnd());
1044   Parse(ex7_4);
1045 }
1046 
TEST_F(HandlerSpecTest,Ex7_5_DoubleQuotedLineBreaks)1047 TEST_F(HandlerSpecTest, Ex7_5_DoubleQuotedLineBreaks) {
1048   EXPECT_CALL(handler, OnDocumentStart(_));
1049   EXPECT_CALL(
1050       handler,
1051       OnScalar(_, "!", 0,
1052                "folded to a space,\nto a line feed, or \t \tnon-content"));
1053   EXPECT_CALL(handler, OnDocumentEnd());
1054   Parse(ex7_5);
1055 }
1056 
TEST_F(HandlerSpecTest,Ex7_6_DoubleQuotedLines)1057 TEST_F(HandlerSpecTest, Ex7_6_DoubleQuotedLines) {
1058   EXPECT_CALL(handler, OnDocumentStart(_));
1059   EXPECT_CALL(
1060       handler,
1061       OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
1062   EXPECT_CALL(handler, OnDocumentEnd());
1063   Parse(ex7_6);
1064 }
1065 
TEST_F(HandlerSpecTest,Ex7_7_SingleQuotedCharacters)1066 TEST_F(HandlerSpecTest, Ex7_7_SingleQuotedCharacters) {
1067   EXPECT_CALL(handler, OnDocumentStart(_));
1068   EXPECT_CALL(handler, OnScalar(_, "!", 0, "here's to \"quotes\""));
1069   EXPECT_CALL(handler, OnDocumentEnd());
1070   Parse(ex7_7);
1071 }
1072 
TEST_F(HandlerSpecTest,Ex7_8_SingleQuotedImplicitKeys)1073 TEST_F(HandlerSpecTest, Ex7_8_SingleQuotedImplicitKeys) {
1074   EXPECT_CALL(handler, OnDocumentStart(_));
1075   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1076   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
1077   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1078   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1079   EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
1080   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1081   EXPECT_CALL(handler, OnMapEnd());
1082   EXPECT_CALL(handler, OnSequenceEnd());
1083   EXPECT_CALL(handler, OnMapEnd());
1084   EXPECT_CALL(handler, OnDocumentEnd());
1085   Parse(ex7_8);
1086 }
1087 
TEST_F(HandlerSpecTest,Ex7_9_SingleQuotedLines)1088 TEST_F(HandlerSpecTest, Ex7_9_SingleQuotedLines) {
1089   EXPECT_CALL(handler, OnDocumentStart(_));
1090   EXPECT_CALL(
1091       handler,
1092       OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
1093   EXPECT_CALL(handler, OnDocumentEnd());
1094   Parse(ex7_9);
1095 }
1096 
TEST_F(HandlerSpecTest,Ex7_10_PlainCharacters)1097 TEST_F(HandlerSpecTest, Ex7_10_PlainCharacters) {
1098   EXPECT_CALL(handler, OnDocumentStart(_));
1099   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1100   EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
1101   EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
1102   EXPECT_CALL(handler, OnScalar(_, "?", 0, "Up, up, and away!"));
1103   EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
1104   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
1105   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1106   EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
1107   EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
1108   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Up, up, and away!"));
1109   EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
1110   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
1111   EXPECT_CALL(handler, OnSequenceEnd());
1112   EXPECT_CALL(handler, OnSequenceEnd());
1113   EXPECT_CALL(handler, OnDocumentEnd());
1114   Parse(ex7_10);
1115 }
1116 
TEST_F(HandlerSpecTest,Ex7_11_PlainImplicitKeys)1117 TEST_F(HandlerSpecTest, Ex7_11_PlainImplicitKeys) {
1118   EXPECT_CALL(handler, OnDocumentStart(_));
1119   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1120   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit block key"));
1121   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1122   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1123   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit flow key"));
1124   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1125   EXPECT_CALL(handler, OnMapEnd());
1126   EXPECT_CALL(handler, OnSequenceEnd());
1127   EXPECT_CALL(handler, OnMapEnd());
1128   EXPECT_CALL(handler, OnDocumentEnd());
1129   Parse(ex7_11);
1130 }
1131 
TEST_F(HandlerSpecTest,Ex7_12_PlainLines)1132 TEST_F(HandlerSpecTest, Ex7_12_PlainLines) {
1133   EXPECT_CALL(handler, OnDocumentStart(_));
1134   EXPECT_CALL(handler, OnScalar(_, "?", 0,
1135                                 "1st non-empty\n2nd non-empty 3rd non-empty"));
1136   EXPECT_CALL(handler, OnDocumentEnd());
1137   Parse(ex7_12);
1138 }
1139 
TEST_F(HandlerSpecTest,Ex7_13_FlowSequence)1140 TEST_F(HandlerSpecTest, Ex7_13_FlowSequence) {
1141   EXPECT_CALL(handler, OnDocumentStart(_));
1142   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1143   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1144   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1145   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1146   EXPECT_CALL(handler, OnSequenceEnd());
1147   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1148   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
1149   EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
1150   EXPECT_CALL(handler, OnSequenceEnd());
1151   EXPECT_CALL(handler, OnSequenceEnd());
1152   EXPECT_CALL(handler, OnDocumentEnd());
1153   Parse(ex7_13);
1154 }
1155 
TEST_F(HandlerSpecTest,Ex7_14_FlowSequenceEntries)1156 TEST_F(HandlerSpecTest, Ex7_14_FlowSequenceEntries) {
1157   EXPECT_CALL(handler, OnDocumentStart(_));
1158   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1159   EXPECT_CALL(handler, OnScalar(_, "!", 0, "double quoted"));
1160   EXPECT_CALL(handler, OnScalar(_, "!", 0, "single quoted"));
1161   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain text"));
1162   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1163   EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
1164   EXPECT_CALL(handler, OnSequenceEnd());
1165   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1166   EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
1167   EXPECT_CALL(handler, OnScalar(_, "?", 0, "pair"));
1168   EXPECT_CALL(handler, OnMapEnd());
1169   EXPECT_CALL(handler, OnSequenceEnd());
1170   EXPECT_CALL(handler, OnDocumentEnd());
1171   Parse(ex7_14);
1172 }
1173 
TEST_F(HandlerSpecTest,Ex7_15_FlowMappings)1174 TEST_F(HandlerSpecTest, Ex7_15_FlowMappings) {
1175   EXPECT_CALL(handler, OnDocumentStart(_));
1176   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1177   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1178   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1179   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1180   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
1181   EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
1182   EXPECT_CALL(handler, OnMapEnd());
1183   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1184   EXPECT_CALL(handler, OnScalar(_, "?", 0, "five"));
1185   EXPECT_CALL(handler, OnScalar(_, "?", 0, "six"));
1186   EXPECT_CALL(handler, OnScalar(_, "?", 0, "seven"));
1187   EXPECT_CALL(handler, OnScalar(_, "?", 0, "eight"));
1188   EXPECT_CALL(handler, OnMapEnd());
1189   EXPECT_CALL(handler, OnSequenceEnd());
1190   EXPECT_CALL(handler, OnDocumentEnd());
1191   Parse(ex7_15);
1192 }
1193 
TEST_F(HandlerSpecTest,Ex7_16_FlowMappingEntries)1194 TEST_F(HandlerSpecTest, Ex7_16_FlowMappingEntries) {
1195   EXPECT_CALL(handler, OnDocumentStart(_));
1196   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1197   EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit"));
1198   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
1199   EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit"));
1200   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
1201   EXPECT_CALL(handler, OnNull(_, 0));
1202   EXPECT_CALL(handler, OnNull(_, 0));
1203   EXPECT_CALL(handler, OnMapEnd());
1204   EXPECT_CALL(handler, OnDocumentEnd());
1205   Parse(ex7_16);
1206 }
1207 
TEST_F(HandlerSpecTest,Ex7_17_FlowMappingSeparateValues)1208 TEST_F(HandlerSpecTest, Ex7_17_FlowMappingSeparateValues) {
1209   EXPECT_CALL(handler, OnDocumentStart(_));
1210   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1211   EXPECT_CALL(handler, OnScalar(_, "?", 0, "unquoted"));
1212   EXPECT_CALL(handler, OnScalar(_, "!", 0, "separate"));
1213   EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://foo.com"));
1214   EXPECT_CALL(handler, OnNull(_, 0));
1215   EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted value"));
1216   EXPECT_CALL(handler, OnNull(_, 0));
1217   EXPECT_CALL(handler, OnNull(_, 0));
1218   EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted key"));
1219   EXPECT_CALL(handler, OnMapEnd());
1220   EXPECT_CALL(handler, OnDocumentEnd());
1221   Parse(ex7_17);
1222 }
1223 
TEST_F(HandlerSpecTest,Ex7_18_FlowMappingAdjacentValues)1224 TEST_F(HandlerSpecTest, Ex7_18_FlowMappingAdjacentValues) {
1225   EXPECT_CALL(handler, OnDocumentStart(_));
1226   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1227   EXPECT_CALL(handler, OnScalar(_, "!", 0, "adjacent"));
1228   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1229   EXPECT_CALL(handler, OnScalar(_, "!", 0, "readable"));
1230   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1231   EXPECT_CALL(handler, OnScalar(_, "!", 0, "empty"));
1232   EXPECT_CALL(handler, OnNull(_, 0));
1233   EXPECT_CALL(handler, OnMapEnd());
1234   EXPECT_CALL(handler, OnDocumentEnd());
1235   Parse(ex7_18);
1236 }
1237 
TEST_F(HandlerSpecTest,Ex7_19_SinglePairFlowMappings)1238 TEST_F(HandlerSpecTest, Ex7_19_SinglePairFlowMappings) {
1239   EXPECT_CALL(handler, OnDocumentStart(_));
1240   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1241   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1242   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
1243   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
1244   EXPECT_CALL(handler, OnMapEnd());
1245   EXPECT_CALL(handler, OnSequenceEnd());
1246   EXPECT_CALL(handler, OnDocumentEnd());
1247   Parse(ex7_19);
1248 }
1249 
TEST_F(HandlerSpecTest,Ex7_20_SinglePairExplicitEntry)1250 TEST_F(HandlerSpecTest, Ex7_20_SinglePairExplicitEntry) {
1251   EXPECT_CALL(handler, OnDocumentStart(_));
1252   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1253   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1254   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo bar"));
1255   EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
1256   EXPECT_CALL(handler, OnMapEnd());
1257   EXPECT_CALL(handler, OnSequenceEnd());
1258   EXPECT_CALL(handler, OnDocumentEnd());
1259   Parse(ex7_20);
1260 }
1261 
TEST_F(HandlerSpecTest,Ex7_21_SinglePairImplicitEntries)1262 TEST_F(HandlerSpecTest, Ex7_21_SinglePairImplicitEntries) {
1263   EXPECT_CALL(handler, OnDocumentStart(_));
1264   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1265   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1266   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1267   EXPECT_CALL(handler, OnScalar(_, "?", 0, "YAML"));
1268   EXPECT_CALL(handler, OnScalar(_, "?", 0, "separate"));
1269   EXPECT_CALL(handler, OnMapEnd());
1270   EXPECT_CALL(handler, OnSequenceEnd());
1271   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1272   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Default));
1273   EXPECT_CALL(handler, OnNull(_, 0));
1274   EXPECT_CALL(handler, OnScalar(_, "?", 0, "empty key entry"));
1275   EXPECT_CALL(handler, OnMapEnd());
1276   EXPECT_CALL(handler, OnSequenceEnd());
1277   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1278   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1279   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1280   EXPECT_CALL(handler, OnScalar(_, "?", 0, "JSON"));
1281   EXPECT_CALL(handler, OnScalar(_, "?", 0, "like"));
1282   EXPECT_CALL(handler, OnMapEnd());
1283   EXPECT_CALL(handler, OnScalar(_, "?", 0, "adjacent"));
1284   EXPECT_CALL(handler, OnMapEnd());
1285   EXPECT_CALL(handler, OnSequenceEnd());
1286   EXPECT_CALL(handler, OnSequenceEnd());
1287   EXPECT_CALL(handler, OnDocumentEnd());
1288   Parse(ex7_21);
1289 }
1290 
TEST_F(HandlerSpecTest,Ex7_22_InvalidImplicitKeys)1291 TEST_F(HandlerSpecTest, Ex7_22_InvalidImplicitKeys) {
1292   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex7_22), ErrorMsg::END_OF_SEQ_FLOW);
1293 }
1294 
TEST_F(HandlerSpecTest,Ex7_23_FlowContent)1295 TEST_F(HandlerSpecTest, Ex7_23_FlowContent) {
1296   EXPECT_CALL(handler, OnDocumentStart(_));
1297   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1298   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1299   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
1300   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
1301   EXPECT_CALL(handler, OnSequenceEnd());
1302   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1303   EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
1304   EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
1305   EXPECT_CALL(handler, OnMapEnd());
1306   EXPECT_CALL(handler, OnScalar(_, "!", 0, "a"));
1307   EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
1308   EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
1309   EXPECT_CALL(handler, OnSequenceEnd());
1310   EXPECT_CALL(handler, OnDocumentEnd());
1311   Parse(ex7_23);
1312 }
1313 
TEST_F(HandlerSpecTest,Ex7_24_FlowNodes)1314 TEST_F(HandlerSpecTest, Ex7_24_FlowNodes) {
1315   EXPECT_CALL(handler, OnDocumentStart(_));
1316   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1317   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "a"));
1318   EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
1319   EXPECT_CALL(handler, OnAnchor(_, "anchor"));
1320   EXPECT_CALL(handler, OnScalar(_, "!", 1, "c"));
1321   EXPECT_CALL(handler, OnAlias(_, 1));
1322   EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
1323   EXPECT_CALL(handler, OnSequenceEnd());
1324   EXPECT_CALL(handler, OnDocumentEnd());
1325   Parse(ex7_24);
1326 }
1327 
TEST_F(HandlerSpecTest,Ex8_1_BlockScalarHeader)1328 TEST_F(HandlerSpecTest, Ex8_1_BlockScalarHeader) {
1329   EXPECT_CALL(handler, OnDocumentStart(_));
1330   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1331   EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n"));
1332   EXPECT_CALL(handler, OnScalar(_, "!", 0, " folded\n"));
1333   EXPECT_CALL(handler, OnScalar(_, "!", 0, "keep\n\n"));
1334   EXPECT_CALL(handler, OnScalar(_, "!", 0, " strip"));
1335   EXPECT_CALL(handler, OnSequenceEnd());
1336   EXPECT_CALL(handler, OnDocumentEnd());
1337   Parse(ex8_1);
1338 }
1339 
TEST_F(HandlerSpecTest,Ex8_2_BlockIndentationHeader)1340 TEST_F(HandlerSpecTest, Ex8_2_BlockIndentationHeader) {
1341   EXPECT_CALL(handler, OnDocumentStart(_));
1342   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1343   EXPECT_CALL(handler, OnScalar(_, "!", 0, "detected\n"));
1344   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\n# detected\n"));
1345   EXPECT_CALL(handler, OnScalar(_, "!", 0, " explicit\n"));
1346   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\t\ndetected\n"));
1347   EXPECT_CALL(handler, OnSequenceEnd());
1348   EXPECT_CALL(handler, OnDocumentEnd());
1349   Parse(ex8_2);
1350 }
1351 
TEST_F(HandlerSpecTest,Ex8_3a_InvalidBlockScalarIndentationIndicators)1352 TEST_F(HandlerSpecTest, Ex8_3a_InvalidBlockScalarIndentationIndicators) {
1353   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3a), ErrorMsg::END_OF_SEQ);
1354 }
1355 
TEST_F(HandlerSpecTest,Ex8_3b_InvalidBlockScalarIndentationIndicators)1356 TEST_F(HandlerSpecTest, Ex8_3b_InvalidBlockScalarIndentationIndicators) {
1357   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3b), ErrorMsg::END_OF_SEQ);
1358 }
1359 
TEST_F(HandlerSpecTest,Ex8_3c_InvalidBlockScalarIndentationIndicators)1360 TEST_F(HandlerSpecTest, Ex8_3c_InvalidBlockScalarIndentationIndicators) {
1361   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3c), ErrorMsg::END_OF_SEQ);
1362 }
1363 
TEST_F(HandlerSpecTest,Ex8_4_ChompingFinalLineBreak)1364 TEST_F(HandlerSpecTest, Ex8_4_ChompingFinalLineBreak) {
1365   EXPECT_CALL(handler, OnDocumentStart(_));
1366   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1367   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
1368   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
1369   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
1370   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
1371   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
1372   EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
1373   EXPECT_CALL(handler, OnMapEnd());
1374   EXPECT_CALL(handler, OnDocumentEnd());
1375   Parse(ex8_4);
1376 }
1377 
TEST_F(HandlerSpecTest,DISABLED_Ex8_5_ChompingTrailingLines)1378 TEST_F(HandlerSpecTest, DISABLED_Ex8_5_ChompingTrailingLines) {
1379   EXPECT_CALL(handler, OnDocumentStart(_));
1380   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1381   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
1382   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text"));
1383   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
1384   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
1385   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
1386   // NOTE: I believe this is a bug in the YAML spec -
1387   // it should be "# text\n\n"
1388   EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
1389   EXPECT_CALL(handler, OnMapEnd());
1390   EXPECT_CALL(handler, OnDocumentEnd());
1391   Parse(ex8_5);
1392 }
1393 
TEST_F(HandlerSpecTest,Ex8_6_EmptyScalarChomping)1394 TEST_F(HandlerSpecTest, Ex8_6_EmptyScalarChomping) {
1395   EXPECT_CALL(handler, OnDocumentStart(_));
1396   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1397   EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
1398   EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
1399   EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
1400   EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
1401   EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
1402   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n"));
1403   EXPECT_CALL(handler, OnMapEnd());
1404   EXPECT_CALL(handler, OnDocumentEnd());
1405   Parse(ex8_6);
1406 }
1407 
TEST_F(HandlerSpecTest,Ex8_7_LiteralScalar)1408 TEST_F(HandlerSpecTest, Ex8_7_LiteralScalar) {
1409   EXPECT_CALL(handler, OnDocumentStart(_));
1410   EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n\ttext\n"));
1411   EXPECT_CALL(handler, OnDocumentEnd());
1412   Parse(ex8_7);
1413 }
1414 
TEST_F(HandlerSpecTest,Ex8_8_LiteralContent)1415 TEST_F(HandlerSpecTest, Ex8_8_LiteralContent) {
1416   EXPECT_CALL(handler, OnDocumentStart(_));
1417   EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\nliteral\n \n\ntext\n"));
1418   EXPECT_CALL(handler, OnDocumentEnd());
1419   Parse(ex8_8);
1420 }
1421 
TEST_F(HandlerSpecTest,Ex8_9_FoldedScalar)1422 TEST_F(HandlerSpecTest, Ex8_9_FoldedScalar) {
1423   EXPECT_CALL(handler, OnDocumentStart(_));
1424   EXPECT_CALL(handler, OnScalar(_, "!", 0, "folded text\n"));
1425   EXPECT_CALL(handler, OnDocumentEnd());
1426   Parse(ex8_9);
1427 }
1428 
TEST_F(HandlerSpecTest,Ex8_10_FoldedLines)1429 TEST_F(HandlerSpecTest, Ex8_10_FoldedLines) {
1430   EXPECT_CALL(handler, OnDocumentStart(_));
1431   EXPECT_CALL(handler,
1432               OnScalar(_, "!", 0,
1433                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
1434                        "lines\n\nlast line\n"));
1435   EXPECT_CALL(handler, OnDocumentEnd());
1436   Parse(ex8_10);
1437 }
1438 
TEST_F(HandlerSpecTest,Ex8_11_MoreIndentedLines)1439 TEST_F(HandlerSpecTest, Ex8_11_MoreIndentedLines) {
1440   EXPECT_CALL(handler, OnDocumentStart(_));
1441   EXPECT_CALL(handler,
1442               OnScalar(_, "!", 0,
1443                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
1444                        "lines\n\nlast line\n"));
1445   EXPECT_CALL(handler, OnDocumentEnd());
1446   Parse(ex8_11);
1447 }
1448 
TEST_F(HandlerSpecTest,Ex8_12_EmptySeparationLines)1449 TEST_F(HandlerSpecTest, Ex8_12_EmptySeparationLines) {
1450   EXPECT_CALL(handler, OnDocumentStart(_));
1451   EXPECT_CALL(handler,
1452               OnScalar(_, "!", 0,
1453                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
1454                        "lines\n\nlast line\n"));
1455   EXPECT_CALL(handler, OnDocumentEnd());
1456   Parse(ex8_12);
1457 }
1458 
TEST_F(HandlerSpecTest,Ex8_13_FinalEmptyLines)1459 TEST_F(HandlerSpecTest, Ex8_13_FinalEmptyLines) {
1460   EXPECT_CALL(handler, OnDocumentStart(_));
1461   EXPECT_CALL(handler,
1462               OnScalar(_, "!", 0,
1463                        "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
1464                        "lines\n\nlast line\n"));
1465   EXPECT_CALL(handler, OnDocumentEnd());
1466   Parse(ex8_13);
1467 }
1468 
TEST_F(HandlerSpecTest,Ex8_14_BlockSequence)1469 TEST_F(HandlerSpecTest, Ex8_14_BlockSequence) {
1470   EXPECT_CALL(handler, OnDocumentStart(_));
1471   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1472   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block sequence"));
1473   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1474   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1475   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1476   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1477   EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
1478   EXPECT_CALL(handler, OnMapEnd());
1479   EXPECT_CALL(handler, OnSequenceEnd());
1480   EXPECT_CALL(handler, OnMapEnd());
1481   EXPECT_CALL(handler, OnDocumentEnd());
1482   Parse(ex8_14);
1483 }
1484 
TEST_F(HandlerSpecTest,Ex8_15_BlockSequenceEntryTypes)1485 TEST_F(HandlerSpecTest, Ex8_15_BlockSequenceEntryTypes) {
1486   EXPECT_CALL(handler, OnDocumentStart(_));
1487   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1488   EXPECT_CALL(handler, OnNull(_, 0));
1489   EXPECT_CALL(handler, OnScalar(_, "!", 0, "block node\n"));
1490   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1491   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1492   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1493   EXPECT_CALL(handler, OnSequenceEnd());
1494   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1495   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1496   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1497   EXPECT_CALL(handler, OnMapEnd());
1498   EXPECT_CALL(handler, OnSequenceEnd());
1499   EXPECT_CALL(handler, OnDocumentEnd());
1500   Parse(ex8_15);
1501 }
1502 
TEST_F(HandlerSpecTest,Ex8_16_BlockMappings)1503 TEST_F(HandlerSpecTest, Ex8_16_BlockMappings) {
1504   EXPECT_CALL(handler, OnDocumentStart(_));
1505   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1506   EXPECT_CALL(handler, OnScalar(_, "?", 0, "block mapping"));
1507   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1508   EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
1509   EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
1510   EXPECT_CALL(handler, OnMapEnd());
1511   EXPECT_CALL(handler, OnMapEnd());
1512   EXPECT_CALL(handler, OnDocumentEnd());
1513   Parse(ex8_16);
1514 }
1515 
TEST_F(HandlerSpecTest,Ex8_17_ExplicitBlockMappingEntries)1516 TEST_F(HandlerSpecTest, Ex8_17_ExplicitBlockMappingEntries) {
1517   EXPECT_CALL(handler, OnDocumentStart(_));
1518   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1519   EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit key"));
1520   EXPECT_CALL(handler, OnNull(_, 0));
1521   EXPECT_CALL(handler, OnScalar(_, "!", 0, "block key\n"));
1522   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1523   EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1524   EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
1525   EXPECT_CALL(handler, OnSequenceEnd());
1526   EXPECT_CALL(handler, OnMapEnd());
1527   EXPECT_CALL(handler, OnDocumentEnd());
1528   Parse(ex8_17);
1529 }
1530 
TEST_F(HandlerSpecTest,Ex8_18_ImplicitBlockMappingEntries)1531 TEST_F(HandlerSpecTest, Ex8_18_ImplicitBlockMappingEntries) {
1532   EXPECT_CALL(handler, OnDocumentStart(_));
1533   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1534   EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain key"));
1535   EXPECT_CALL(handler, OnScalar(_, "?", 0, "in-line value"));
1536   EXPECT_CALL(handler, OnNull(_, 0));
1537   EXPECT_CALL(handler, OnNull(_, 0));
1538   EXPECT_CALL(handler, OnScalar(_, "!", 0, "quoted key"));
1539   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1540   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
1541   EXPECT_CALL(handler, OnSequenceEnd());
1542   EXPECT_CALL(handler, OnMapEnd());
1543   EXPECT_CALL(handler, OnDocumentEnd());
1544   Parse(ex8_18);
1545 }
1546 
TEST_F(HandlerSpecTest,Ex8_19_CompactBlockMappings)1547 TEST_F(HandlerSpecTest, Ex8_19_CompactBlockMappings) {
1548   EXPECT_CALL(handler, OnDocumentStart(_));
1549   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1550   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1551   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sun"));
1552   EXPECT_CALL(handler, OnScalar(_, "?", 0, "yellow"));
1553   EXPECT_CALL(handler, OnMapEnd());
1554   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1555   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1556   EXPECT_CALL(handler, OnScalar(_, "?", 0, "earth"));
1557   EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
1558   EXPECT_CALL(handler, OnMapEnd());
1559   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1560   EXPECT_CALL(handler, OnScalar(_, "?", 0, "moon"));
1561   EXPECT_CALL(handler, OnScalar(_, "?", 0, "white"));
1562   EXPECT_CALL(handler, OnMapEnd());
1563   EXPECT_CALL(handler, OnMapEnd());
1564   EXPECT_CALL(handler, OnSequenceEnd());
1565   EXPECT_CALL(handler, OnDocumentEnd());
1566   Parse(ex8_19);
1567 }
1568 
TEST_F(HandlerSpecTest,Ex8_20_BlockNodeTypes)1569 TEST_F(HandlerSpecTest, Ex8_20_BlockNodeTypes) {
1570   EXPECT_CALL(handler, OnDocumentStart(_));
1571   EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1572   EXPECT_CALL(handler, OnScalar(_, "!", 0, "flow in block"));
1573   EXPECT_CALL(handler, OnScalar(_, "!", 0, "Block scalar\n"));
1574   EXPECT_CALL(handler,
1575               OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
1576   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
1577   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
1578   EXPECT_CALL(handler, OnMapEnd());
1579   EXPECT_CALL(handler, OnSequenceEnd());
1580   EXPECT_CALL(handler, OnDocumentEnd());
1581   Parse(ex8_20);
1582 }
1583 
TEST_F(HandlerSpecTest,DISABLED_Ex8_21_BlockScalarNodes)1584 TEST_F(HandlerSpecTest, DISABLED_Ex8_21_BlockScalarNodes) {
1585   EXPECT_CALL(handler, OnDocumentStart(_));
1586   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1587   EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
1588   // NOTE: I believe this is a bug in the YAML spec
1589   // - it should be "value\n"
1590   EXPECT_CALL(handler, OnScalar(_, "!", 0, "value"));
1591   EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
1592   EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "value"));
1593   EXPECT_CALL(handler, OnMapEnd());
1594   EXPECT_CALL(handler, OnDocumentEnd());
1595   Parse(ex8_21);
1596 }
1597 
TEST_F(HandlerSpecTest,Ex8_22_BlockCollectionNodes)1598 TEST_F(HandlerSpecTest, Ex8_22_BlockCollectionNodes) {
1599   EXPECT_CALL(handler, OnDocumentStart(_));
1600   EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1601   EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
1602   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
1603                                        EmitterStyle::Block));
1604   EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
1605   EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
1606                                        EmitterStyle::Block));
1607   EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
1608   EXPECT_CALL(handler, OnSequenceEnd());
1609   EXPECT_CALL(handler, OnSequenceEnd());
1610   EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
1611   EXPECT_CALL(handler,
1612               OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
1613   EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
1614   EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
1615   EXPECT_CALL(handler, OnMapEnd());
1616   EXPECT_CALL(handler, OnMapEnd());
1617   EXPECT_CALL(handler, OnDocumentEnd());
1618   Parse(ex8_22);
1619 }
1620 }  // namespace
1621 }  // namespace YAML
1622