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