handler_spec_test.cpp 67.2 KB
Newer Older
1
2
#include "handler_test.h"
#include "specexamples.h"   // IWYU pragma: keep
3
4
5
6
7
8
9
10
11
12
13
#include "yaml-cpp/yaml.h"  // IWYU pragma: keep

#include "gmock/gmock.h"
#include "gtest/gtest.h"

using ::testing::_;

#define EXPECT_THROW_PARSER_EXCEPTION(statement, message) \
  ASSERT_THROW(statement, ParserException);               \
  try {                                                   \
    statement;                                            \
14
  } catch (const ParserException& e) {                    \
15
16
17
18
19
20
    EXPECT_EQ(e.msg, message);                            \
  }

namespace YAML {
namespace {

21
typedef HandlerTest HandlerSpecTest;
22

23
TEST_F(HandlerSpecTest, Ex2_1_SeqScalars) {
24
  EXPECT_CALL(handler, OnDocumentStart(_));
25
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
26
27
28
29
30
31
32
33
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_1);
}

34
TEST_F(HandlerSpecTest, Ex2_2_MappingScalarsToScalars) {
35
  EXPECT_CALL(handler, OnDocumentStart(_));
36
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
37
38
39
40
41
42
43
44
45
46
47
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "147"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_2);
}

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
54
55
56
57
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Boston Red Sox"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "national"));
58
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
59
60
61
62
63
64
65
66
67
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Mets"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_3);
}

68
TEST_F(HandlerSpecTest, Ex2_4_SequenceOfMappings) {
69
  EXPECT_CALL(handler, OnDocumentStart(_));
70
71
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
72
73
74
75
76
77
78
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
  EXPECT_CALL(handler, OnMapEnd());
79
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
80
81
82
83
84
85
86
87
88
89
90
91
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_4);
}

92
TEST_F(HandlerSpecTest, Ex2_5_SequenceOfSequences) {
93
  EXPECT_CALL(handler, OnDocumentStart(_));
94
95
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
96
97
98
99
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnSequenceEnd());
100
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
101
102
103
104
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
  EXPECT_CALL(handler, OnSequenceEnd());
105
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
106
107
108
109
110
111
112
113
114
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_5);
}

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
121
122
123
124
125
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
126
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
127
128
129
130
131
132
133
134
135
136
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.288"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_6);
}

137
TEST_F(HandlerSpecTest, Ex2_7_TwoDocumentsInAStream) {
138
  EXPECT_CALL(handler, OnDocumentStart(_));
139
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
140
141
142
143
144
145
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
146
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
147
148
149
150
151
152
153
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago Cubs"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "St Louis Cardinals"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_7);
}

154
TEST_F(HandlerSpecTest, Ex2_8_PlayByPlayFeed) {
155
  EXPECT_CALL(handler, OnDocumentStart(_));
156
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
157
158
159
160
161
162
163
164
165
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "time"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:20"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "player"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "action"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "strike (miss)"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
166
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
167
168
169
170
171
172
173
174
175
176
177
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "time"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "20:03:47"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "player"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "action"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "grand slam"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_8);
}

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
184
185
186
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
187
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
188
189
190
191
192
193
194
195
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_9);
}

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
204
205
  EXPECT_CALL(handler, OnScalar(_, "?", 1, "Sammy Sosa"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "rbi"));
206
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
207
208
209
210
211
212
213
214
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_10);
}

215
TEST_F(HandlerSpecTest, Ex2_11_MappingBetweenSequences) {
216
  EXPECT_CALL(handler, OnDocumentStart(_));
217
218
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
219
220
221
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Detroit Tigers"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chicago cubs"));
  EXPECT_CALL(handler, OnSequenceEnd());
222
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
223
224
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-23"));
  EXPECT_CALL(handler, OnSequenceEnd());
225
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
226
227
228
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "New York Yankees"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Atlanta Braves"));
  EXPECT_CALL(handler, OnSequenceEnd());
229
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
230
231
232
233
234
235
236
237
238
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-07-02"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-12"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-08-14"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_11);
}

239
TEST_F(HandlerSpecTest, Ex2_12_CompactNestedMapping) {
240
  EXPECT_CALL(handler, OnDocumentStart(_));
241
242
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
243
244
245
246
247
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
  EXPECT_CALL(handler, OnMapEnd());
248
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
249
250
251
252
253
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "4"));
  EXPECT_CALL(handler, OnMapEnd());
254
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
255
256
257
258
259
260
261
262
263
264
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "item"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Big Shoes"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_12);
}

265
TEST_F(HandlerSpecTest, Ex2_13_InLiteralsNewlinesArePreserved) {
266
267
268
269
270
271
272
273
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0,
                                "\\//||\\/||\n"
                                "// ||  ||__"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_13);
}

274
TEST_F(HandlerSpecTest, Ex2_14_InFoldedScalarsNewlinesBecomeSpaces) {
275
276
277
278
279
280
281
282
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "Mark McGwire's year was crippled by a knee injury."));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_14);
}

283
TEST_F(HandlerSpecTest,
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
       Ex2_15_FoldedNewlinesArePreservedForMoreIndentedAndBlankLines) {
  EXPECT_CALL(handler, OnDocumentStart(_));
  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"
               "\n"
               "What a year!"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_15);
}

299
TEST_F(HandlerSpecTest, Ex2_16_IndentationDeterminesScope) {
300
  EXPECT_CALL(handler, OnDocumentStart(_));
301
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "name"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "accomplishment"));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "Mark set a major league home run record in 1998.\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "stats"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0,
                                "65 Home Runs\n"
                                "0.278 Batting Average\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_16);
}

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
323
324
325
326
327
328
329
330
331
332
333
334
335
336
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "control"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\b1998\t1999\t2000\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hex esc"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\x0d\x0a is \r\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\"Howdy!\" he cried."));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, " # Not a 'comment'."));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "tie-fighter"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "|\\-*-/|"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_17);
}

337
TEST_F(HandlerSpecTest, Ex2_18_MultiLineFlowScalars) {
338
  EXPECT_CALL(handler, OnDocumentStart(_));
339
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
340
341
342
343
344
345
346
347
348
349
350
351
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain"));
  EXPECT_CALL(handler,
              OnScalar(_, "?", 0, "This unquoted scalar spans many lines."));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "So does this quoted scalar.\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_18);
}

// TODO: 2.19 - 2.22 schema tags

352
TEST_F(HandlerSpecTest, Ex2_23_VariousExplicitTags) {
353
  EXPECT_CALL(handler, OnDocumentStart(_));
354
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "not-date"));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "2002-04-28"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "picture"));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:binary", 0,
                                "R0lGODlhDAAMAIQAAP//9/X\n"
                                "17unp5WZmZgAAAOfn515eXv\n"
                                "Pz7Y6OjuDg4J+fn5OTk6enp\n"
                                "56enmleECcgggoBADs=\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "application specific tag"));
  EXPECT_CALL(handler, OnScalar(_, "!something", 0,
                                "The semantics of the tag\n"
                                "above may be different for\n"
                                "different documents."));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_23);
}

373
TEST_F(HandlerSpecTest, Ex2_24_GlobalTags) {
374
  EXPECT_CALL(handler, OnDocumentStart(_));
375
376
377
378
  EXPECT_CALL(handler, OnSequenceStart(_, "tag:clarkevans.com,2002:shape", 0,
                                       EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:circle", 0,
                                  EmitterStyle::Block));
379
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "center"));
380
  EXPECT_CALL(handler, OnAnchor(_, "ORIGIN"));
381
  EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Flow));
382
383
384
385
386
387
388
389
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "73"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "129"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "radius"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "7"));
  EXPECT_CALL(handler, OnMapEnd());
390
391
  EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:line", 0,
                                  EmitterStyle::Block));
392
393
394
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "finish"));
395
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
396
397
398
399
400
401
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "x"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "89"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "y"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "102"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
402
403
  EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:label", 0,
                                  EmitterStyle::Block));
404
405
406
407
408
409
410
411
412
413
414
415
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "start"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "color"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0xFFEEBB"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "text"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Pretty vector drawing."));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_24);
}

416
TEST_F(HandlerSpecTest, Ex2_25_UnorderedSets) {
417
  EXPECT_CALL(handler, OnDocumentStart(_));
418
419
  EXPECT_CALL(handler,
              OnMapStart(_, "tag:yaml.org,2002:set", 0, EmitterStyle::Block));
420
421
422
423
424
425
426
427
428
429
430
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_25);
}

431
TEST_F(HandlerSpecTest, Ex2_26_OrderedMappings) {
432
  EXPECT_CALL(handler, OnDocumentStart(_));
433
434
435
  EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:omap", 0,
                                       EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
436
437
438
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Mark McGwire"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnMapEnd());
439
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
440
441
442
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy Sosa"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "63"));
  EXPECT_CALL(handler, OnMapEnd());
443
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
444
445
446
447
448
449
450
451
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Ken Griffey"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_26);
}

452
TEST_F(HandlerSpecTest, Ex2_27_Invoice) {
453
  EXPECT_CALL(handler, OnDocumentStart(_));
454
455
  EXPECT_CALL(handler, OnMapStart(_, "tag:clarkevans.com,2002:invoice", 0,
                                  EmitterStyle::Block));
456
457
458
459
460
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "invoice"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "34843"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "date"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-01-23"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bill-to"));
461
  EXPECT_CALL(handler, OnAnchor(_, "id001"));
462
  EXPECT_CALL(handler, OnMapStart(_, "?", 1, EmitterStyle::Block));
463
464
465
466
467
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "given"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chris"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "family"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Dumars"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "address"));
468
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "lines"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0,
                                "458 Walkman Dr.\n"
                                "Suite #292\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "city"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Royal Oak"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "state"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "MI"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "postal"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "48046"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "ship-to"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "product"));
484
485
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
486
487
488
489
490
491
492
493
494
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL394D"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "4"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Basketball"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "450.00"));
  EXPECT_CALL(handler, OnMapEnd());
495
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sku"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "BL4438H"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quantity"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "1"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "description"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Super Hoop"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "price"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2392.00"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "tax"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "251.42"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "total"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "4443.52"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "comments"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0,
                                "Late afternoon is best. Backup contact is "
                                "Nancy Billsmer @ 338-4338."));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_27);
}

519
TEST_F(HandlerSpecTest, Ex2_28_LogFile) {
520
  EXPECT_CALL(handler, OnDocumentStart(_));
521
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
522
523
524
525
526
527
528
529
530
531
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:01:42 -5"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
  EXPECT_CALL(handler,
              OnScalar(_, "?", 0, "This is an error message for the log file"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
532
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
533
534
535
536
537
538
539
540
541
542
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Time"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:02:31 -5"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Warning"));
  EXPECT_CALL(handler,
              OnScalar(_, "?", 0, "A slightly different error message."));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
543
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
544
545
546
547
548
549
550
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Date"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "2001-11-23 15:03:17 -5"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "User"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "ed"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Fatal"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Unknown variable \"bar\""));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Stack"));
551
552
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
553
554
555
556
557
558
559
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "TopClass.py"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "23"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "x = MoreObject(\"345\\n\")\n"));
  EXPECT_CALL(handler, OnMapEnd());
560
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "file"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "MoreClass.py"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "line"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "58"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "code"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo = bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex2_28);
}

// TODO: 5.1 - 5.2 BOM

576
TEST_F(HandlerSpecTest, Ex5_3_BlockStructureIndicators) {
577
  EXPECT_CALL(handler, OnDocumentStart(_));
578
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
579
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
580
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
581
582
583
584
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
585
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
586
587
588
589
590
591
592
593
594
595
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_3);
}

596
TEST_F(HandlerSpecTest, Ex5_4_FlowStructureIndicators) {
597
  EXPECT_CALL(handler, OnDocumentStart(_));
598
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
599
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
600
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
601
602
603
604
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
605
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
606
607
608
609
610
611
612
613
614
615
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sky"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sea"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "green"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_4);
}

616
TEST_F(HandlerSpecTest, Ex5_5_CommentIndicator) { Parse(ex5_5); }
617

618
TEST_F(HandlerSpecTest, Ex5_6_NodePropertyIndicators) {
619
  EXPECT_CALL(handler, OnDocumentStart(_));
620
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
621
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "anchored"));
622
  EXPECT_CALL(handler, OnAnchor(_, "anchor"));
623
624
625
626
627
628
629
630
  EXPECT_CALL(handler, OnScalar(_, "!local", 1, "value"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "alias"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_6);
}

631
TEST_F(HandlerSpecTest, Ex5_7_BlockScalarIndicators) {
632
  EXPECT_CALL(handler, OnDocumentStart(_));
633
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
634
635
636
637
638
639
640
641
642
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "some\ntext\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "some text\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_7);
}

643
TEST_F(HandlerSpecTest, Ex5_8_QuotedScalarIndicators) {
644
  EXPECT_CALL(handler, OnDocumentStart(_));
645
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
646
647
648
649
650
651
652
653
654
655
656
657
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "double"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_8);
}

// TODO: 5.9 directive
// TODO: 5.10 reserved indicator

658
TEST_F(HandlerSpecTest, Ex5_11_LineBreakCharacters) {
659
660
661
662
663
664
665
666
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0,
                                "Line break (no glyph)\n"
                                "Line break (glyphed)\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_11);
}

667
TEST_F(HandlerSpecTest, Ex5_12_TabsAndSpaces) {
668
  EXPECT_CALL(handler, OnDocumentStart(_));
669
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
670
671
672
673
674
675
676
677
678
679
680
681
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "Quoted\t"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0,
                                "void main() {\n"
                                "\tprintf(\"Hello, world!\\n\");\n"
                                "}"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_12);
}

682
TEST_F(HandlerSpecTest, Ex5_13_EscapedCharacters) {
683
684
685
686
687
688
689
690
691
692
693
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(
      handler,
      OnScalar(_, "!", 0,
               "Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B " +
                   std::string("\x00", 1) +
                   " \x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9 A A A"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex5_13);
}

694
695
696
TEST_F(HandlerSpecTest, Ex5_14_InvalidEscapedCharacters) {
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex5_14),
                                std::string(ErrorMsg::INVALID_ESCAPE) + "c");
697
698
}

699
TEST_F(HandlerSpecTest, Ex6_1_IndentationSpaces) {
700
  EXPECT_CALL(handler, OnDocumentStart(_));
701
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
702
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Not indented"));
703
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
704
705
706
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "By one space"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "By four\n  spaces\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Flow style"));
707
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
708
709
710
711
712
713
714
715
716
717
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "By two"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Also by two"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Still by two"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_1);
}

718
TEST_F(HandlerSpecTest, Ex6_2_IndentationIndicators) {
719
  EXPECT_CALL(handler, OnDocumentStart(_));
720
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
721
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
722
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
723
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
724
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
725
726
727
728
729
730
731
732
733
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "d"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_2);
}

734
TEST_F(HandlerSpecTest, Ex6_3_SeparationSpaces) {
735
  EXPECT_CALL(handler, OnDocumentStart(_));
736
737
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
738
739
740
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
741
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
742
743
744
745
746
747
748
749
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_3);
}

750
TEST_F(HandlerSpecTest, Ex6_4_LinePrefixes) {
751
  EXPECT_CALL(handler, OnDocumentStart(_));
752
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
753
754
755
756
757
758
759
760
761
762
763
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "text lines"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "quoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text lines"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "block"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n \tlines\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_4);
}

764
TEST_F(HandlerSpecTest, Ex6_5_EmptyLines) {
765
  EXPECT_CALL(handler, OnDocumentStart(_));
766
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
767
768
769
770
771
772
773
774
775
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Folding"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "Empty line\nas a line feed"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Chomping"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "Clipped empty lines\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_5);
}

776
TEST_F(HandlerSpecTest, Ex6_6_LineFolding) {
777
778
779
780
781
782
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "trimmed\n\n\nas space"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_6);
}

783
TEST_F(HandlerSpecTest, Ex6_7_BlockFolding) {
784
785
786
787
788
789
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo \n\n\t bar\n\nbaz\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_7);
}

790
TEST_F(HandlerSpecTest, Ex6_8_FlowFolding) {
791
792
793
794
795
796
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, " foo\nbar\nbaz "));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_8);
}

797
TEST_F(HandlerSpecTest, Ex6_9_SeparatedComment) {
798
  EXPECT_CALL(handler, OnDocumentStart(_));
799
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
800
801
802
803
804
805
806
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_9);
}

807
TEST_F(HandlerSpecTest, Ex6_10_CommentLines) { Parse(ex6_10); }
808

809
TEST_F(HandlerSpecTest, _MultiLineComments) {
810
  EXPECT_CALL(handler, OnDocumentStart(_));
811
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
812
813
814
815
816
817
818
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_11);
}

819
TEST_F(HandlerSpecTest, Ex6_12_SeparationSpacesII) {
820
  EXPECT_CALL(handler, OnDocumentStart(_));
821
822
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
823
824
825
826
827
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "first"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sammy"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "last"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Sosa"));
  EXPECT_CALL(handler, OnMapEnd());
828
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
829
830
831
832
833
834
835
836
837
838
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "hr"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "65"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "avg"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "0.278"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_12);
}

839
TEST_F(HandlerSpecTest, Ex6_13_ReservedDirectives) {
840
841
842
843
844
845
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_13);
}

846
TEST_F(HandlerSpecTest, Ex6_14_YAMLDirective) {
847
848
849
850
851
852
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "foo"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_14);
}

853
TEST_F(HandlerSpecTest, Ex6_15_InvalidRepeatedYAMLDirective) {
854
855
856
857
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_15),
                                ErrorMsg::REPEATED_YAML_DIRECTIVE);
}

858
TEST_F(HandlerSpecTest, Ex6_16_TagDirective) {
859
860
861
862
863
864
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_16);
}

865
TEST_F(HandlerSpecTest, Ex6_17_InvalidRepeatedTagDirective) {
866
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_17),
867
                                ErrorMsg::REPEATED_TAG_DIRECTIVE);
868
869
}

870
TEST_F(HandlerSpecTest, Ex6_18_PrimaryTagHandle) {
871
872
873
874
875
876
877
878
879
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "bar"));
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_18);
}

880
TEST_F(HandlerSpecTest, Ex6_19_SecondaryTagHandle) {
881
882
883
884
885
886
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/int", 0, "1 - 3"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_19);
}

887
TEST_F(HandlerSpecTest, Ex6_20_TagHandles) {
888
889
890
891
892
893
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_20);
}

894
TEST_F(HandlerSpecTest, Ex6_21_LocalTagPrefix) {
895
896
897
898
899
900
901
902
903
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "fluorescent"));
  EXPECT_CALL(handler, OnDocumentEnd());
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!my-light", 0, "green"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_21);
}

904
TEST_F(HandlerSpecTest, Ex6_22_GlobalTagPrefix) {
905
  EXPECT_CALL(handler, OnDocumentStart(_));
906
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
907
908
909
910
911
912
  EXPECT_CALL(handler, OnScalar(_, "tag:example.com,2000:app/foo", 0, "bar"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_22);
}

913
TEST_F(HandlerSpecTest, Ex6_23_NodeProperties) {
914
  EXPECT_CALL(handler, OnDocumentStart(_));
915
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
916
  EXPECT_CALL(handler, OnAnchor(_, "a1"));
917
918
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 1, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
919
  EXPECT_CALL(handler, OnAnchor(_, "a2"));
920
921
922
923
924
925
926
  EXPECT_CALL(handler, OnScalar(_, "?", 2, "baz"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_23);
}

927
TEST_F(HandlerSpecTest, Ex6_24_VerbatimTags) {
928
  EXPECT_CALL(handler, OnDocumentStart(_));
929
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
930
931
932
933
934
935
936
937
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "!bar", 0, "baz"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_24);
}

// TODO: Implement
938
TEST_F(HandlerSpecTest, DISABLED_Ex6_25_InvalidVerbatimTags) {
939
940
941
942
  Parse(ex6_25);
  FAIL() << "not implemented yet";
}

943
TEST_F(HandlerSpecTest, Ex6_26_TagShorthands) {
944
  EXPECT_CALL(handler, OnDocumentStart(_));
945
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
946
947
948
949
950
951
952
953
954
  EXPECT_CALL(handler, OnScalar(_, "!local", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "bar"));
  EXPECT_CALL(handler,
              OnScalar(_, "tag:example.com,2000:app/tag%21", 0, "baz"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_26);
}

955
TEST_F(HandlerSpecTest, Ex6_27a_InvalidTagShorthands) {
956
957
958
959
960
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex6_27a),
                                ErrorMsg::TAG_WITH_NO_SUFFIX);
}

// TODO: should we reject this one (since !h! is not declared)?
961
TEST_F(HandlerSpecTest, DISABLED_Ex6_27b_InvalidTagShorthands) {
962
963
964
965
  Parse(ex6_27b);
  FAIL() << "not implemented yet";
}

966
TEST_F(HandlerSpecTest, Ex6_28_NonSpecificTags) {
967
  EXPECT_CALL(handler, OnDocumentStart(_));
968
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
969
970
971
972
973
974
975
976
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "12"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "12"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_28);
}

977
TEST_F(HandlerSpecTest, Ex6_29_NodeAnchors) {
978
  EXPECT_CALL(handler, OnDocumentStart(_));
979
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
980
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
981
  EXPECT_CALL(handler, OnAnchor(_, "anchor"));
982
983
984
985
986
987
988
989
  EXPECT_CALL(handler, OnScalar(_, "?", 1, "Value"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex6_29);
}

990
TEST_F(HandlerSpecTest, Ex7_1_AliasNodes) {
991
  EXPECT_CALL(handler, OnDocumentStart(_));
992
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
993
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "First occurrence"));
994
  EXPECT_CALL(handler, OnAnchor(_, "anchor"));
995
996
997
998
  EXPECT_CALL(handler, OnScalar(_, "?", 1, "Foo"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Second occurrence"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Override anchor"));
999
  EXPECT_CALL(handler, OnAnchor(_, "anchor"));
1000
1001
1002
1003
1004
1005
1006
1007
  EXPECT_CALL(handler, OnScalar(_, "?", 2, "Bar"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Reuse anchor"));
  EXPECT_CALL(handler, OnAlias(_, 2));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_1);
}

1008
TEST_F(HandlerSpecTest, Ex7_2_EmptyNodes) {
1009
  EXPECT_CALL(handler, OnDocumentStart(_));
1010
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1011
1012
1013
1014
1015
1016
1017
1018
1019
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_2);
}

1020
TEST_F(HandlerSpecTest, Ex7_3_CompletelyEmptyNodes) {
1021
  EXPECT_CALL(handler, OnDocumentStart(_));
1022
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1023
1024
1025
1026
1027
1028
1029
1030
1031
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_3);
}

1032
TEST_F(HandlerSpecTest, Ex7_4_DoubleQuotedImplicitKeys) {
1033
  EXPECT_CALL(handler, OnDocumentStart(_));
1034
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1035
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
1036
1037
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1038
1039
1040
1041
1042
1043
1044
1045
1046
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_4);
}

1047
TEST_F(HandlerSpecTest, Ex7_5_DoubleQuotedLineBreaks) {
1048
1049
1050
1051
1052
1053
1054
1055
1056
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(
      handler,
      OnScalar(_, "!", 0,
               "folded to a space,\nto a line feed, or \t \tnon-content"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_5);
}

1057
TEST_F(HandlerSpecTest, Ex7_6_DoubleQuotedLines) {
1058
1059
1060
1061
1062
1063
1064
1065
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(
      handler,
      OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_6);
}

1066
TEST_F(HandlerSpecTest, Ex7_7_SingleQuotedCharacters) {
1067
1068
1069
1070
1071
1072
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "here's to \"quotes\""));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_7);
}

1073
TEST_F(HandlerSpecTest, Ex7_8_SingleQuotedImplicitKeys) {
1074
  EXPECT_CALL(handler, OnDocumentStart(_));
1075
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1076
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit block key"));
1077
1078
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1079
1080
1081
1082
1083
1084
1085
1086
1087
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "implicit flow key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_8);
}

1088
TEST_F(HandlerSpecTest, Ex7_9_SingleQuotedLines) {
1089
1090
1091
1092
1093
1094
1095
1096
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(
      handler,
      OnScalar(_, "!", 0, " 1st non-empty\n2nd non-empty 3rd non-empty "));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_9);
}

1097
TEST_F(HandlerSpecTest, Ex7_10_PlainCharacters) {
1098
  EXPECT_CALL(handler, OnDocumentStart(_));
1099
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1100
1101
1102
1103
1104
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "Up, up, and away!"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
1105
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "::vector"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, ": - ()"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "Up, up, and away!"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "-123"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://example.com/foo#bar"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_10);
}

1117
TEST_F(HandlerSpecTest, Ex7_11_PlainImplicitKeys) {
1118
  EXPECT_CALL(handler, OnDocumentStart(_));
1119
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1120
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit block key"));
1121
1122
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1123
1124
1125
1126
1127
1128
1129
1130
1131
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit flow key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_11);
}

1132
TEST_F(HandlerSpecTest, Ex7_12_PlainLines) {
1133
1134
1135
1136
1137
1138
1139
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "?", 0,
                                "1st non-empty\n2nd non-empty 3rd non-empty"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_12);
}

1140
TEST_F(HandlerSpecTest, Ex7_13_FlowSequence) {
1141
  EXPECT_CALL(handler, OnDocumentStart(_));
1142
1143
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1144
1145
1146
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnSequenceEnd());
1147
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1148
1149
1150
1151
1152
1153
1154
1155
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_13);
}

1156
TEST_F(HandlerSpecTest, Ex7_14_FlowSequenceEntries) {
1157
  EXPECT_CALL(handler, OnDocumentStart(_));
1158
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1159
1160
1161
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "double quoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "single quoted"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain text"));
1162
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1163
1164
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
  EXPECT_CALL(handler, OnSequenceEnd());
1165
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1166
1167
1168
1169
1170
1171
1172
1173
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "single"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "pair"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_14);
}

1174
TEST_F(HandlerSpecTest, Ex7_15_FlowMappings) {
1175
  EXPECT_CALL(handler, OnDocumentStart(_));
1176
1177
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1178
1179
1180
1181
1182
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "four"));
  EXPECT_CALL(handler, OnMapEnd());
1183
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "five"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "six"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "seven"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "eight"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_15);
}

1194
TEST_F(HandlerSpecTest, Ex7_16_FlowMappingEntries) {
1195
  EXPECT_CALL(handler, OnDocumentStart(_));
1196
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "implicit"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_16);
}

1208
TEST_F(HandlerSpecTest, Ex7_17_FlowMappingSeparateValues) {
1209
  EXPECT_CALL(handler, OnDocumentStart(_));
1210
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "unquoted"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "separate"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "http://foo.com"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted value"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "omitted key"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_17);
}

1224
TEST_F(HandlerSpecTest, Ex7_18_FlowMappingAdjacentValues) {
1225
  EXPECT_CALL(handler, OnDocumentStart(_));
1226
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "adjacent"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "readable"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "empty"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_18);
}

1238
TEST_F(HandlerSpecTest, Ex7_19_SinglePairFlowMappings) {
1239
  EXPECT_CALL(handler, OnDocumentStart(_));
1240
1241
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1242
1243
1244
1245
1246
1247
1248
1249
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_19);
}

1250
TEST_F(HandlerSpecTest, Ex7_20_SinglePairExplicitEntry) {
1251
  EXPECT_CALL(handler, OnDocumentStart(_));
1252
1253
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1254
1255
1256
1257
1258
1259
1260
1261
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo bar"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "baz"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_20);
}

1262
TEST_F(HandlerSpecTest, Ex7_21_SinglePairImplicitEntries) {
1263
  EXPECT_CALL(handler, OnDocumentStart(_));
1264
1265
1266
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1267
1268
1269
1270
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "YAML"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "separate"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
1271
1272
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Default));
1273
1274
1275
1276
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "empty key entry"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
1277
1278
1279
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "JSON"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "like"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "adjacent"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_21);
}

1291
1292
TEST_F(HandlerSpecTest, Ex7_22_InvalidImplicitKeys) {
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex7_22), ErrorMsg::END_OF_SEQ_FLOW);
1293
1294
}

1295
TEST_F(HandlerSpecTest, Ex7_23_FlowContent) {
1296
  EXPECT_CALL(handler, OnDocumentStart(_));
1297
1298
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Flow));
1299
1300
1301
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
  EXPECT_CALL(handler, OnSequenceEnd());
1302
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Flow));
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "a"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "b"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "a"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "c"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_23);
}

1314
TEST_F(HandlerSpecTest, Ex7_24_FlowNodes) {
1315
  EXPECT_CALL(handler, OnDocumentStart(_));
1316
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1317
1318
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, "a"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "b"));
1319
  EXPECT_CALL(handler, OnAnchor(_, "anchor"));
1320
1321
1322
1323
1324
1325
1326
1327
  EXPECT_CALL(handler, OnScalar(_, "!", 1, "c"));
  EXPECT_CALL(handler, OnAlias(_, 1));
  EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:str", 0, ""));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex7_24);
}

1328
TEST_F(HandlerSpecTest, Ex8_1_BlockScalarHeader) {
1329
  EXPECT_CALL(handler, OnDocumentStart(_));
1330
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1331
1332
1333
1334
1335
1336
1337
1338
1339
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, " folded\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "keep\n\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, " strip"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_1);
}

1340
TEST_F(HandlerSpecTest, Ex8_2_BlockIndentationHeader) {
1341
  EXPECT_CALL(handler, OnDocumentStart(_));
1342
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1343
1344
1345
1346
1347
1348
1349
1350
1351
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "detected\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\n# detected\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, " explicit\n"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\t\ndetected\n"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_2);
}

1352
1353
TEST_F(HandlerSpecTest, Ex8_3a_InvalidBlockScalarIndentationIndicators) {
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3a), ErrorMsg::END_OF_SEQ);
1354
1355
}

1356
1357
TEST_F(HandlerSpecTest, Ex8_3b_InvalidBlockScalarIndentationIndicators) {
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3b), ErrorMsg::END_OF_SEQ);
1358
1359
}

1360
TEST_F(HandlerSpecTest, Ex8_3c_InvalidBlockScalarIndentationIndicators) {
1361
1362
1363
  EXPECT_THROW_PARSER_EXCEPTION(IgnoreParse(ex8_3c), ErrorMsg::END_OF_SEQ);
}

1364
TEST_F(HandlerSpecTest, Ex8_4_ChompingFinalLineBreak) {
1365
  EXPECT_CALL(handler, OnDocumentStart(_));
1366
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "text\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_4);
}

1378
TEST_F(HandlerSpecTest, DISABLED_Ex8_5_ChompingTrailingLines) {
1379
  EXPECT_CALL(handler, OnDocumentStart(_));
1380
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
  // NOTE: I believe this is a bug in the YAML spec -
  // it should be "# text\n\n"
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "# text\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_5);
}

1394
TEST_F(HandlerSpecTest, Ex8_6_EmptyScalarChomping) {
1395
  EXPECT_CALL(handler, OnDocumentStart(_));
1396
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "strip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "clip"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, ""));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "keep"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_6);
}

1408
TEST_F(HandlerSpecTest, Ex8_7_LiteralScalar) {
1409
1410
1411
1412
1413
1414
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "literal\n\ttext\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_7);
}

1415
TEST_F(HandlerSpecTest, Ex8_8_LiteralContent) {
1416
1417
1418
1419
1420
1421
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "\n\nliteral\n \n\ntext\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_8);
}

1422
TEST_F(HandlerSpecTest, Ex8_9_FoldedScalar) {
1423
1424
1425
1426
1427
1428
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "folded text\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_9);
}

1429
TEST_F(HandlerSpecTest, Ex8_10_FoldedLines) {
1430
1431
1432
1433
1434
1435
1436
1437
1438
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
                       "lines\n\nlast line\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_10);
}

1439
TEST_F(HandlerSpecTest, Ex8_11_MoreIndentedLines) {
1440
1441
1442
1443
1444
1445
1446
1447
1448
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
                       "lines\n\nlast line\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_11);
}

1449
TEST_F(HandlerSpecTest, Ex8_12_EmptySeparationLines) {
1450
1451
1452
1453
1454
1455
1456
1457
1458
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
                       "lines\n\nlast line\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_12);
}

1459
TEST_F(HandlerSpecTest, Ex8_13_FinalEmptyLines) {
1460
1461
1462
1463
1464
1465
1466
1467
1468
  EXPECT_CALL(handler, OnDocumentStart(_));
  EXPECT_CALL(handler,
              OnScalar(_, "!", 0,
                       "\nfolded line\nnext line\n  * bullet\n\n  * list\n  * "
                       "lines\n\nlast line\n"));
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_13);
}

1469
TEST_F(HandlerSpecTest, Ex8_14_BlockSequence) {
1470
  EXPECT_CALL(handler, OnDocumentStart(_));
1471
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1472
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "block sequence"));
1473
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1474
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
1475
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1476
1477
1478
1479
1480
1481
1482
1483
1484
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "three"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_14);
}

1485
TEST_F(HandlerSpecTest, Ex8_15_BlockSequenceEntryTypes) {
1486
  EXPECT_CALL(handler, OnDocumentStart(_));
1487
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1488
1489
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "block node\n"));
1490
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1491
1492
1493
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnSequenceEnd());
1494
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1495
1496
1497
1498
1499
1500
1501
1502
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_15);
}

1503
TEST_F(HandlerSpecTest, Ex8_16_BlockMappings) {
1504
  EXPECT_CALL(handler, OnDocumentStart(_));
1505
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1506
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "block mapping"));
1507
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1508
1509
1510
1511
1512
1513
1514
1515
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_16);
}

1516
TEST_F(HandlerSpecTest, Ex8_17_ExplicitBlockMappingEntries) {
1517
  EXPECT_CALL(handler, OnDocumentStart(_));
1518
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1519
1520
1521
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "explicit key"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "block key\n"));
1522
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1523
1524
1525
1526
1527
1528
1529
1530
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "one"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "two"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_17);
}

1531
TEST_F(HandlerSpecTest, Ex8_18_ImplicitBlockMappingEntries) {
1532
  EXPECT_CALL(handler, OnDocumentStart(_));
1533
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1534
1535
1536
1537
1538
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "plain key"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "in-line value"));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnNull(_, 0));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "quoted key"));
1539
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1540
1541
1542
1543
1544
1545
1546
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_18);
}

1547
TEST_F(HandlerSpecTest, Ex8_19_CompactBlockMappings) {
1548
  EXPECT_CALL(handler, OnDocumentStart(_));
1549
1550
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1551
1552
1553
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sun"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "yellow"));
  EXPECT_CALL(handler, OnMapEnd());
1554
1555
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1556
1557
1558
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "earth"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "blue"));
  EXPECT_CALL(handler, OnMapEnd());
1559
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1560
1561
1562
1563
1564
1565
1566
1567
1568
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "moon"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "white"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_19);
}

1569
TEST_F(HandlerSpecTest, Ex8_20_BlockNodeTypes) {
1570
  EXPECT_CALL(handler, OnDocumentStart(_));
1571
  EXPECT_CALL(handler, OnSequenceStart(_, "?", 0, EmitterStyle::Block));
1572
1573
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "flow in block"));
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "Block scalar\n"));
1574
1575
  EXPECT_CALL(handler,
              OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
1576
1577
1578
1579
1580
1581
1582
1583
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_20);
}

1584
TEST_F(HandlerSpecTest, DISABLED_Ex8_21_BlockScalarNodes) {
1585
  EXPECT_CALL(handler, OnDocumentStart(_));
1586
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "literal"));
  // NOTE: I believe this is a bug in the YAML spec
  // - it should be "value\n"
  EXPECT_CALL(handler, OnScalar(_, "!", 0, "value"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "folded"));
  EXPECT_CALL(handler, OnScalar(_, "!foo", 0, "value"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_21);
}

1598
TEST_F(HandlerSpecTest, Ex8_22_BlockCollectionNodes) {
1599
  EXPECT_CALL(handler, OnDocumentStart(_));
1600
  EXPECT_CALL(handler, OnMapStart(_, "?", 0, EmitterStyle::Block));
1601
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "sequence"));
1602
1603
  EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
                                       EmitterStyle::Block));
1604
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "entry"));
1605
1606
  EXPECT_CALL(handler, OnSequenceStart(_, "tag:yaml.org,2002:seq", 0,
                                       EmitterStyle::Block));
1607
1608
1609
1610
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "nested"));
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnSequenceEnd());
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "mapping"));
1611
1612
  EXPECT_CALL(handler,
              OnMapStart(_, "tag:yaml.org,2002:map", 0, EmitterStyle::Block));
1613
1614
1615
1616
1617
1618
1619
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "foo"));
  EXPECT_CALL(handler, OnScalar(_, "?", 0, "bar"));
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnMapEnd());
  EXPECT_CALL(handler, OnDocumentEnd());
  Parse(ex8_22);
}
1620
1621
}  // namespace
}  // namespace YAML