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