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