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 
TEST_F(HandlerSpecTest,Ex2_19_Integers)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 
TEST_F(HandlerSpecTest,Ex2_20_FloatingPoint)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 
TEST_F(HandlerSpecTest,Ex2_21_Miscellaneous)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 
TEST_F(HandlerSpecTest,Ex2_22_Timestamps)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 
TEST_F(HandlerSpecTest,Ex2_23_VariousExplicitTags)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 
TEST_F(HandlerSpecTest,Ex2_24_GlobalTags)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 
TEST_F(HandlerSpecTest,Ex2_25_UnorderedSets)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 
TEST_F(HandlerSpecTest,Ex2_26_OrderedMappings)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 
TEST_F(HandlerSpecTest,Ex2_27_Invoice)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 
TEST_F(HandlerSpecTest,Ex2_28_LogFile)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 
TEST_F(HandlerSpecTest,Ex5_3_BlockStructureIndicators)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 
TEST_F(HandlerSpecTest,Ex5_4_FlowStructureIndicators)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 
TEST_F(HandlerSpecTest,Ex5_5_CommentIndicator)681 TEST_F(HandlerSpecTest, Ex5_5_CommentIndicator) { Parse(ex5_5); }
682 
TEST_F(HandlerSpecTest,Ex5_6_NodePropertyIndicators)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 
TEST_F(HandlerSpecTest,Ex5_7_BlockScalarIndicators)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 
TEST_F(HandlerSpecTest,Ex5_8_QuotedScalarIndicators)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 
TEST_F(HandlerSpecTest,Ex5_11_LineBreakCharacters)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 
TEST_F(HandlerSpecTest,Ex5_12_TabsAndSpaces)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 
TEST_F(HandlerSpecTest,Ex5_13_EscapedCharacters)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 
TEST_F(HandlerSpecTest,Ex5_14_InvalidEscapedCharacters)759 TEST_F(HandlerSpecTest, Ex5_14_InvalidEscapedCharacters) {
760   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex5_14),
761                                 std::string(ErrorMsg::INVALID_ESCAPE) + "c");
762 }
763 
TEST_F(HandlerSpecTest,Ex6_1_IndentationSpaces)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 
TEST_F(HandlerSpecTest,Ex6_2_IndentationIndicators)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 
TEST_F(HandlerSpecTest,Ex6_3_SeparationSpaces)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 
TEST_F(HandlerSpecTest,Ex6_4_LinePrefixes)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 
TEST_F(HandlerSpecTest,Ex6_5_EmptyLines)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 
TEST_F(HandlerSpecTest,Ex6_6_LineFolding)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 
TEST_F(HandlerSpecTest,Ex6_7_BlockFolding)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 
TEST_F(HandlerSpecTest,Ex6_8_FlowFolding)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 
TEST_F(HandlerSpecTest,Ex6_9_SeparatedComment)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 
TEST_F(HandlerSpecTest,Ex6_10_CommentLines)872 TEST_F(HandlerSpecTest, Ex6_10_CommentLines) { Parse(ex6_10); }
873 
TEST_F(HandlerSpecTest,_MultiLineComments)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 
TEST_F(HandlerSpecTest,Ex6_12_SeparationSpacesII)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 
TEST_F(HandlerSpecTest,Ex6_13_ReservedDirectives)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 
TEST_F(HandlerSpecTest,Ex6_14_YAMLDirective)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 
TEST_F(HandlerSpecTest,Ex6_15_InvalidRepeatedYAMLDirective)918 TEST_F(HandlerSpecTest, Ex6_15_InvalidRepeatedYAMLDirective) {
919   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_15),
920                                 ErrorMsg::REPEATED_YAML_DIRECTIVE);
921 }
922 
TEST_F(HandlerSpecTest,Ex6_16_TagDirective)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 
TEST_F(HandlerSpecTest,Ex6_17_InvalidRepeatedTagDirective)930 TEST_F(HandlerSpecTest, Ex6_17_InvalidRepeatedTagDirective) {
931   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_17),
932                                 ErrorMsg::REPEATED_TAG_DIRECTIVE);
933 }
934 
TEST_F(HandlerSpecTest,Ex6_18_PrimaryTagHandle)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 
TEST_F(HandlerSpecTest,Ex6_19_SecondaryTagHandle)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 
TEST_F(HandlerSpecTest,Ex6_20_TagHandles)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 
TEST_F(HandlerSpecTest,Ex6_21_LocalTagPrefix)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 
TEST_F(HandlerSpecTest,Ex6_22_GlobalTagPrefix)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 
TEST_F(HandlerSpecTest,Ex6_23_NodeProperties)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 
TEST_F(HandlerSpecTest,Ex6_24_VerbatimTags)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
TEST_F(HandlerSpecTest,DISABLED_Ex6_25_InvalidVerbatimTags)1003 TEST_F(HandlerSpecTest, DISABLED_Ex6_25_InvalidVerbatimTags) {
1004   Parse(ex6_25);
1005   FAIL() << "not implemented yet";
1006 }
1007 
TEST_F(HandlerSpecTest,Ex6_26_TagShorthands)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 
TEST_F(HandlerSpecTest,Ex6_27a_InvalidTagShorthands)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)?
TEST_F(HandlerSpecTest,DISABLED_Ex6_27b_InvalidTagShorthands)1026 TEST_F(HandlerSpecTest, DISABLED_Ex6_27b_InvalidTagShorthands) {
1027   Parse(ex6_27b);
1028   FAIL() << "not implemented yet";
1029 }
1030 
TEST_F(HandlerSpecTest,Ex6_28_NonSpecificTags)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 
TEST_F(HandlerSpecTest,Ex6_29_NodeAnchors)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 
TEST_F(HandlerSpecTest,Ex7_1_AliasNodes)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 
TEST_F(HandlerSpecTest,Ex7_2_EmptyNodes)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 
TEST_F(HandlerSpecTest,Ex7_3_CompletelyEmptyNodes)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 
TEST_F(HandlerSpecTest,Ex7_4_DoubleQuotedImplicitKeys)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 
TEST_F(HandlerSpecTest,Ex7_5_DoubleQuotedLineBreaks)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 
TEST_F(HandlerSpecTest,Ex7_6_DoubleQuotedLines)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 
TEST_F(HandlerSpecTest,Ex7_7_SingleQuotedCharacters)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 
TEST_F(HandlerSpecTest,Ex7_8_SingleQuotedImplicitKeys)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 
TEST_F(HandlerSpecTest,Ex7_9_SingleQuotedLines)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 
TEST_F(HandlerSpecTest,Ex7_10_PlainCharacters)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 
TEST_F(HandlerSpecTest,Ex7_11_PlainImplicitKeys)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 
TEST_F(HandlerSpecTest,Ex7_12_PlainLines)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 
TEST_F(HandlerSpecTest,Ex7_13_FlowSequence)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 
TEST_F(HandlerSpecTest,Ex7_14_FlowSequenceEntries)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 
TEST_F(HandlerSpecTest,Ex7_15_FlowMappings)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 
TEST_F(HandlerSpecTest,Ex7_16_FlowMappingEntries)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 
TEST_F(HandlerSpecTest,Ex7_17_FlowMappingSeparateValues)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 
TEST_F(HandlerSpecTest,Ex7_18_FlowMappingAdjacentValues)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 
TEST_F(HandlerSpecTest,Ex7_19_SinglePairFlowMappings)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 
TEST_F(HandlerSpecTest,Ex7_20_SinglePairExplicitEntry)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 
TEST_F(HandlerSpecTest,Ex7_21_SinglePairImplicitEntries)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 
TEST_F(HandlerSpecTest,Ex7_22_InvalidImplicitKeys)1356 TEST_F(HandlerSpecTest, Ex7_22_InvalidImplicitKeys) {
1357   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex7_22), ErrorMsg::END_OF_SEQ_FLOW);
1358 }
1359 
TEST_F(HandlerSpecTest,Ex7_23_FlowContent)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 
TEST_F(HandlerSpecTest,Ex7_24_FlowNodes)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 
TEST_F(HandlerSpecTest,Ex8_1_BlockScalarHeader)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 
TEST_F(HandlerSpecTest,Ex8_2_BlockIndentationHeader)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 
TEST_F(HandlerSpecTest,Ex8_3a_InvalidBlockScalarIndentationIndicators)1417 TEST_F(HandlerSpecTest, Ex8_3a_InvalidBlockScalarIndentationIndicators) {
1418   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3a), ErrorMsg::END_OF_SEQ);
1419 }
1420 
TEST_F(HandlerSpecTest,Ex8_3b_InvalidBlockScalarIndentationIndicators)1421 TEST_F(HandlerSpecTest, Ex8_3b_InvalidBlockScalarIndentationIndicators) {
1422   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3b), ErrorMsg::END_OF_SEQ);
1423 }
1424 
TEST_F(HandlerSpecTest,Ex8_3c_InvalidBlockScalarIndentationIndicators)1425 TEST_F(HandlerSpecTest, Ex8_3c_InvalidBlockScalarIndentationIndicators) {
1426   EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3c), ErrorMsg::END_OF_SEQ);
1427 }
1428 
TEST_F(HandlerSpecTest,Ex8_4_ChompingFinalLineBreak)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 
TEST_F(HandlerSpecTest,DISABLED_Ex8_5_ChompingTrailingLines)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 
TEST_F(HandlerSpecTest,Ex8_6_EmptyScalarChomping)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 
TEST_F(HandlerSpecTest,Ex8_7_LiteralScalar)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 
TEST_F(HandlerSpecTest,Ex8_8_LiteralContent)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 
TEST_F(HandlerSpecTest,Ex8_9_FoldedScalar)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 
TEST_F(HandlerSpecTest,Ex8_10_FoldedLines)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 
TEST_F(HandlerSpecTest,Ex8_11_MoreIndentedLines)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 
TEST_F(HandlerSpecTest,Ex8_12_EmptySeparationLines)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 
TEST_F(HandlerSpecTest,Ex8_13_FinalEmptyLines)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 
TEST_F(HandlerSpecTest,Ex8_14_BlockSequence)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 
TEST_F(HandlerSpecTest,Ex8_15_BlockSequenceEntryTypes)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 
TEST_F(HandlerSpecTest,Ex8_16_BlockMappings)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 
TEST_F(HandlerSpecTest,Ex8_17_ExplicitBlockMappingEntries)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 
TEST_F(HandlerSpecTest,Ex8_18_ImplicitBlockMappingEntries)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 
TEST_F(HandlerSpecTest,Ex8_19_CompactBlockMappings)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 
TEST_F(HandlerSpecTest,Ex8_20_BlockNodeTypes)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 
TEST_F(HandlerSpecTest,DISABLED_Ex8_21_BlockScalarNodes)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 
TEST_F(HandlerSpecTest,Ex8_22_BlockCollectionNodes)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
1687