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