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