YtsSpecificationExamples.yml (41578B)
1 --- %YAML:1.0 2 test: Sequence of scalars 3 spec: 2.1 4 yaml: | 5 - Mark McGwire 6 - Sammy Sosa 7 - Ken Griffey 8 php: | 9 array('Mark McGwire', 'Sammy Sosa', 'Ken Griffey') 10 --- 11 test: Mapping of scalars to scalars 12 spec: 2.2 13 yaml: | 14 hr: 65 15 avg: 0.278 16 rbi: 147 17 php: | 18 array('hr' => 65, 'avg' => 0.278, 'rbi' => 147) 19 --- 20 test: Mapping of scalars to sequences 21 spec: 2.3 22 yaml: | 23 american: 24 - Boston Red Sox 25 - Detroit Tigers 26 - New York Yankees 27 national: 28 - New York Mets 29 - Chicago Cubs 30 - Atlanta Braves 31 php: | 32 array('american' => 33 array( 'Boston Red Sox', 'Detroit Tigers', 34 'New York Yankees' ), 35 'national' => 36 array( 'New York Mets', 'Chicago Cubs', 37 'Atlanta Braves' ) 38 ) 39 --- 40 test: Sequence of mappings 41 spec: 2.4 42 yaml: | 43 - 44 name: Mark McGwire 45 hr: 65 46 avg: 0.278 47 - 48 name: Sammy Sosa 49 hr: 63 50 avg: 0.288 51 php: | 52 array( 53 array('name' => 'Mark McGwire', 'hr' => 65, 'avg' => 0.278), 54 array('name' => 'Sammy Sosa', 'hr' => 63, 'avg' => 0.288) 55 ) 56 --- 57 test: Legacy A5 58 todo: true 59 spec: legacy_A5 60 yaml: | 61 ? 62 - New York Yankees 63 - Atlanta Braves 64 : 65 - 2001-07-02 66 - 2001-08-12 67 - 2001-08-14 68 ? 69 - Detroit Tigers 70 - Chicago Cubs 71 : 72 - 2001-07-23 73 perl-busted: > 74 YAML.pm will be able to emulate this behavior soon. In this regard 75 it may be somewhat more correct than Python's native behaviour which 76 can only use tuples as mapping keys. PyYAML will also need to figure 77 out some clever way to roundtrip structured keys. 78 python: | 79 [ 80 { 81 ('New York Yankees', 'Atlanta Braves'): 82 [yaml.timestamp('2001-07-02'), 83 yaml.timestamp('2001-08-12'), 84 yaml.timestamp('2001-08-14')], 85 ('Detroit Tigers', 'Chicago Cubs'): 86 [yaml.timestamp('2001-07-23')] 87 } 88 ] 89 ruby: | 90 { 91 [ 'New York Yankees', 'Atlanta Braves' ] => 92 [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ], 93 [ 'Detroit Tigers', 'Chicago Cubs' ] => 94 [ Date.new( 2001, 7, 23 ) ] 95 } 96 syck: | 97 struct test_node seq1[] = { 98 { T_STR, 0, "New York Yankees" }, 99 { T_STR, 0, "Atlanta Braves" }, 100 end_node 101 }; 102 struct test_node seq2[] = { 103 { T_STR, 0, "2001-07-02" }, 104 { T_STR, 0, "2001-08-12" }, 105 { T_STR, 0, "2001-08-14" }, 106 end_node 107 }; 108 struct test_node seq3[] = { 109 { T_STR, 0, "Detroit Tigers" }, 110 { T_STR, 0, "Chicago Cubs" }, 111 end_node 112 }; 113 struct test_node seq4[] = { 114 { T_STR, 0, "2001-07-23" }, 115 end_node 116 }; 117 struct test_node map[] = { 118 { T_SEQ, 0, 0, seq1 }, 119 { T_SEQ, 0, 0, seq2 }, 120 { T_SEQ, 0, 0, seq3 }, 121 { T_SEQ, 0, 0, seq4 }, 122 end_node 123 }; 124 struct test_node stream[] = { 125 { T_MAP, 0, 0, map }, 126 end_node 127 }; 128 129 --- 130 test: Sequence of sequences 131 spec: 2.5 132 yaml: | 133 - [ name , hr , avg ] 134 - [ Mark McGwire , 65 , 0.278 ] 135 - [ Sammy Sosa , 63 , 0.288 ] 136 php: | 137 array( 138 array( 'name', 'hr', 'avg' ), 139 array( 'Mark McGwire', 65, 0.278 ), 140 array( 'Sammy Sosa', 63, 0.288 ) 141 ) 142 --- 143 test: Mapping of mappings 144 todo: true 145 spec: 2.6 146 yaml: | 147 Mark McGwire: {hr: 65, avg: 0.278} 148 Sammy Sosa: { 149 hr: 63, 150 avg: 0.288 151 } 152 php: | 153 array( 154 'Mark McGwire' => 155 array( 'hr' => 65, 'avg' => 0.278 ), 156 'Sammy Sosa' => 157 array( 'hr' => 63, 'avg' => 0.288 ) 158 ) 159 --- 160 test: Two documents in a stream each with a leading comment 161 todo: true 162 spec: 2.7 163 yaml: | 164 # Ranking of 1998 home runs 165 --- 166 - Mark McGwire 167 - Sammy Sosa 168 - Ken Griffey 169 170 # Team ranking 171 --- 172 - Chicago Cubs 173 - St Louis Cardinals 174 ruby: | 175 y = YAML::Stream.new 176 y.add( [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ] ) 177 y.add( [ 'Chicago Cubs', 'St Louis Cardinals' ] ) 178 documents: 2 179 180 --- 181 test: Play by play feed from a game 182 todo: true 183 spec: 2.8 184 yaml: | 185 --- 186 time: 20:03:20 187 player: Sammy Sosa 188 action: strike (miss) 189 ... 190 --- 191 time: 20:03:47 192 player: Sammy Sosa 193 action: grand slam 194 ... 195 perl: | 196 [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ] 197 documents: 2 198 199 --- 200 test: Single document with two comments 201 spec: 2.9 202 yaml: | 203 hr: # 1998 hr ranking 204 - Mark McGwire 205 - Sammy Sosa 206 rbi: 207 # 1998 rbi ranking 208 - Sammy Sosa 209 - Ken Griffey 210 php: | 211 array( 212 'hr' => array( 'Mark McGwire', 'Sammy Sosa' ), 213 'rbi' => array( 'Sammy Sosa', 'Ken Griffey' ) 214 ) 215 --- 216 test: Node for Sammy Sosa appears twice in this document 217 spec: 2.10 218 yaml: | 219 --- 220 hr: 221 - Mark McGwire 222 # Following node labeled SS 223 - &SS Sammy Sosa 224 rbi: 225 - *SS # Subsequent occurrence 226 - Ken Griffey 227 php: | 228 array( 229 'hr' => 230 array('Mark McGwire', 'Sammy Sosa'), 231 'rbi' => 232 array('Sammy Sosa', 'Ken Griffey') 233 ) 234 --- 235 test: Mapping between sequences 236 todo: true 237 spec: 2.11 238 yaml: | 239 ? # PLAY SCHEDULE 240 - Detroit Tigers 241 - Chicago Cubs 242 : 243 - 2001-07-23 244 245 ? [ New York Yankees, 246 Atlanta Braves ] 247 : [ 2001-07-02, 2001-08-12, 248 2001-08-14 ] 249 ruby: | 250 { 251 [ 'Detroit Tigers', 'Chicago Cubs' ] => [ Date.new( 2001, 7, 23 ) ], 252 [ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ] 253 } 254 syck: | 255 struct test_node seq1[] = { 256 { T_STR, 0, "New York Yankees" }, 257 { T_STR, 0, "Atlanta Braves" }, 258 end_node 259 }; 260 struct test_node seq2[] = { 261 { T_STR, 0, "2001-07-02" }, 262 { T_STR, 0, "2001-08-12" }, 263 { T_STR, 0, "2001-08-14" }, 264 end_node 265 }; 266 struct test_node seq3[] = { 267 { T_STR, 0, "Detroit Tigers" }, 268 { T_STR, 0, "Chicago Cubs" }, 269 end_node 270 }; 271 struct test_node seq4[] = { 272 { T_STR, 0, "2001-07-23" }, 273 end_node 274 }; 275 struct test_node map[] = { 276 { T_SEQ, 0, 0, seq3 }, 277 { T_SEQ, 0, 0, seq4 }, 278 { T_SEQ, 0, 0, seq1 }, 279 { T_SEQ, 0, 0, seq2 }, 280 end_node 281 }; 282 struct test_node stream[] = { 283 { T_MAP, 0, 0, map }, 284 end_node 285 }; 286 287 --- 288 test: Sequence key shortcut 289 spec: 2.12 290 yaml: | 291 --- 292 # products purchased 293 - item : Super Hoop 294 quantity: 1 295 - item : Basketball 296 quantity: 4 297 - item : Big Shoes 298 quantity: 1 299 php: | 300 array ( 301 array ( 302 'item' => 'Super Hoop', 303 'quantity' => 1, 304 ), 305 array ( 306 'item' => 'Basketball', 307 'quantity' => 4, 308 ), 309 array ( 310 'item' => 'Big Shoes', 311 'quantity' => 1, 312 ) 313 ) 314 perl: | 315 [ 316 { item => 'Super Hoop', quantity => 1 }, 317 { item => 'Basketball', quantity => 4 }, 318 { item => 'Big Shoes', quantity => 1 } 319 ] 320 321 ruby: | 322 [ 323 { 'item' => 'Super Hoop', 'quantity' => 1 }, 324 { 'item' => 'Basketball', 'quantity' => 4 }, 325 { 'item' => 'Big Shoes', 'quantity' => 1 } 326 ] 327 python: | 328 [ 329 { 'item': 'Super Hoop', 'quantity': 1 }, 330 { 'item': 'Basketball', 'quantity': 4 }, 331 { 'item': 'Big Shoes', 'quantity': 1 } 332 ] 333 syck: | 334 struct test_node map1[] = { 335 { T_STR, 0, "item" }, 336 { T_STR, 0, "Super Hoop" }, 337 { T_STR, 0, "quantity" }, 338 { T_STR, 0, "1" }, 339 end_node 340 }; 341 struct test_node map2[] = { 342 { T_STR, 0, "item" }, 343 { T_STR, 0, "Basketball" }, 344 { T_STR, 0, "quantity" }, 345 { T_STR, 0, "4" }, 346 end_node 347 }; 348 struct test_node map3[] = { 349 { T_STR, 0, "item" }, 350 { T_STR, 0, "Big Shoes" }, 351 { T_STR, 0, "quantity" }, 352 { T_STR, 0, "1" }, 353 end_node 354 }; 355 struct test_node seq[] = { 356 { T_MAP, 0, 0, map1 }, 357 { T_MAP, 0, 0, map2 }, 358 { T_MAP, 0, 0, map3 }, 359 end_node 360 }; 361 struct test_node stream[] = { 362 { T_SEQ, 0, 0, seq }, 363 end_node 364 }; 365 366 367 --- 368 test: Literal perserves newlines 369 todo: true 370 spec: 2.13 371 yaml: | 372 # ASCII Art 373 --- | 374 \//||\/|| 375 // || ||_ 376 perl: | 377 "\\//||\\/||\n// || ||_\n" 378 ruby: | 379 "\\//||\\/||\n// || ||_\n" 380 python: | 381 [ 382 flushLeft( 383 """ 384 \//||\/|| 385 // || ||_ 386 """ 387 ) 388 ] 389 syck: | 390 struct test_node stream[] = { 391 { T_STR, 0, "\\//||\\/||\n// || ||_\n" }, 392 end_node 393 }; 394 395 --- 396 test: Folded treats newlines as a space 397 todo: true 398 spec: 2.14 399 yaml: | 400 --- 401 Mark McGwire's 402 year was crippled 403 by a knee injury. 404 perl: | 405 "Mark McGwire's year was crippled by a knee injury." 406 ruby: | 407 "Mark McGwire's year was crippled by a knee injury." 408 python: | 409 [ "Mark McGwire's year was crippled by a knee injury." ] 410 syck: | 411 struct test_node stream[] = { 412 { T_STR, 0, "Mark McGwire's year was crippled by a knee injury." }, 413 end_node 414 }; 415 416 --- 417 test: Newlines preserved for indented and blank lines 418 todo: true 419 spec: 2.15 420 yaml: | 421 --- > 422 Sammy Sosa completed another 423 fine season with great stats. 424 425 63 Home Runs 426 0.288 Batting Average 427 428 What a year! 429 perl: | 430 "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n" 431 ruby: | 432 "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n" 433 python: | 434 [ 435 flushLeft( 436 """ 437 Sammy Sosa completed another fine season with great stats. 438 439 63 Home Runs 440 0.288 Batting Average 441 442 What a year! 443 """ 444 ) 445 ] 446 syck: | 447 struct test_node stream[] = { 448 { T_STR, 0, "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n" }, 449 end_node 450 }; 451 452 453 --- 454 test: Indentation determines scope 455 spec: 2.16 456 yaml: | 457 name: Mark McGwire 458 accomplishment: > 459 Mark set a major league 460 home run record in 1998. 461 stats: | 462 65 Home Runs 463 0.278 Batting Average 464 php: | 465 array( 466 'name' => 'Mark McGwire', 467 'accomplishment' => "Mark set a major league home run record in 1998.\n", 468 'stats' => "65 Home Runs\n0.278 Batting Average\n" 469 ) 470 --- 471 test: Quoted scalars 472 todo: true 473 spec: 2.17 474 yaml: | 475 unicode: "Sosa did fine.\u263A" 476 control: "\b1998\t1999\t2000\n" 477 hexesc: "\x0D\x0A is \r\n" 478 479 single: '"Howdy!" he cried.' 480 quoted: ' # not a ''comment''.' 481 tie-fighter: '|\-*-/|' 482 ruby: | 483 { 484 "tie-fighter" => "|\\-*-/|", 485 "control"=>"\0101998\t1999\t2000\n", 486 "unicode"=>"Sosa did fine." + ["263A".hex ].pack('U*'), 487 "quoted"=>" # not a 'comment'.", 488 "single"=>"\"Howdy!\" he cried.", 489 "hexesc"=>"\r\n is \r\n" 490 } 491 --- 492 test: Multiline flow scalars 493 todo: true 494 spec: 2.18 495 yaml: | 496 plain: 497 This unquoted scalar 498 spans many lines. 499 500 quoted: "So does this 501 quoted scalar.\n" 502 ruby: | 503 { 504 'plain' => 'This unquoted scalar spans many lines.', 505 'quoted' => "So does this quoted scalar.\n" 506 } 507 --- 508 test: Integers 509 spec: 2.19 510 yaml: | 511 canonical: 12345 512 decimal: +12,345 513 octal: 014 514 hexadecimal: 0xC 515 php: | 516 array( 517 'canonical' => 12345, 518 'decimal' => 12345, 519 'octal' => 014, 520 'hexadecimal' => 0xC 521 ) 522 --- 523 # FIX: spec shows parens around -inf and NaN 524 test: Floating point 525 spec: 2.20 526 yaml: | 527 canonical: 1.23015e+3 528 exponential: 12.3015e+02 529 fixed: 1,230.15 530 negative infinity: -.inf 531 not a number: .NaN 532 float as whole number: !!float 1 533 php: | 534 array( 535 'canonical' => 1230.15, 536 'exponential' => 1230.15, 537 'fixed' => 1230.15, 538 'negative infinity' => log(0), 539 'not a number' => -log(0), 540 'float as whole number' => (float) 1 541 ) 542 --- 543 test: Miscellaneous 544 spec: 2.21 545 yaml: | 546 null: ~ 547 true: true 548 false: false 549 string: '12345' 550 php: | 551 array( 552 '' => null, 553 1 => true, 554 0 => false, 555 'string' => '12345' 556 ) 557 --- 558 test: Timestamps 559 todo: true 560 spec: 2.22 561 yaml: | 562 canonical: 2001-12-15T02:59:43.1Z 563 iso8601: 2001-12-14t21:59:43.10-05:00 564 spaced: 2001-12-14 21:59:43.10 -05:00 565 date: 2002-12-14 # Time is noon UTC 566 php: | 567 array( 568 'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ), 569 'iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ), 570 'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ), 571 'date' => Date.new( 2002, 12, 14 ) 572 ) 573 --- 574 test: legacy Timestamps test 575 todo: true 576 spec: legacy D4 577 yaml: | 578 canonical: 2001-12-15T02:59:43.00Z 579 iso8601: 2001-02-28t21:59:43.00-05:00 580 spaced: 2001-12-14 21:59:43.00 -05:00 581 date: 2002-12-14 582 php: | 583 array( 584 'canonical' => Time::utc( 2001, 12, 15, 2, 59, 43, 0 ), 585 'iso8601' => YAML::mktime( 2001, 2, 28, 21, 59, 43, 0, "-05:00" ), 586 'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0, "-05:00" ), 587 'date' => Date.new( 2002, 12, 14 ) 588 ) 589 --- 590 test: Various explicit families 591 todo: true 592 spec: 2.23 593 yaml: | 594 not-date: !str 2002-04-28 595 picture: !binary | 596 R0lGODlhDAAMAIQAAP//9/X 597 17unp5WZmZgAAAOfn515eXv 598 Pz7Y6OjuDg4J+fn5OTk6enp 599 56enmleECcgggoBADs= 600 601 application specific tag: !!something | 602 The semantics of the tag 603 above may be different for 604 different documents. 605 606 ruby-setup: | 607 YAML.add_private_type( "something" ) do |type, val| 608 "SOMETHING: #{val}" 609 end 610 ruby: | 611 { 612 'not-date' => '2002-04-28', 613 'picture' => "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236i^\020' \202\n\001\000;", 614 'application specific tag' => "SOMETHING: The semantics of the tag\nabove may be different for\ndifferent documents.\n" 615 } 616 --- 617 test: Application specific family 618 todo: true 619 spec: 2.24 620 yaml: | 621 # Establish a tag prefix 622 --- !clarkevans.com,2002/graph/^shape 623 # Use the prefix: shorthand for 624 # !clarkevans.com,2002/graph/circle 625 - !^circle 626 center: &ORIGIN {x: 73, 'y': 129} 627 radius: 7 628 - !^line # !clarkevans.com,2002/graph/line 629 start: *ORIGIN 630 finish: { x: 89, 'y': 102 } 631 - !^label 632 start: *ORIGIN 633 color: 0xFFEEBB 634 value: Pretty vector drawing. 635 ruby-setup: | 636 YAML.add_domain_type( "clarkevans.com,2002", 'graph/shape' ) { |type, val| 637 if Array === val 638 val << "Shape Container" 639 val 640 else 641 raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect 642 end 643 } 644 one_shape_proc = Proc.new { |type, val| 645 scheme, domain, type = type.split( /:/, 3 ) 646 if val.is_a? ::Hash 647 val['TYPE'] = "Shape: #{type}" 648 val 649 else 650 raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect 651 end 652 } 653 YAML.add_domain_type( "clarkevans.com,2002", 'graph/circle', &one_shape_proc ) 654 YAML.add_domain_type( "clarkevans.com,2002", 'graph/line', &one_shape_proc ) 655 YAML.add_domain_type( "clarkevans.com,2002", 'graph/label', &one_shape_proc ) 656 ruby: | 657 [ 658 { 659 "radius" => 7, 660 "center"=> 661 { 662 "x" => 73, 663 "y" => 129 664 }, 665 "TYPE" => "Shape: graph/circle" 666 }, { 667 "finish" => 668 { 669 "x" => 89, 670 "y" => 102 671 }, 672 "TYPE" => "Shape: graph/line", 673 "start" => 674 { 675 "x" => 73, 676 "y" => 129 677 } 678 }, { 679 "TYPE" => "Shape: graph/label", 680 "value" => "Pretty vector drawing.", 681 "start" => 682 { 683 "x" => 73, 684 "y" => 129 685 }, 686 "color" => 16772795 687 }, 688 "Shape Container" 689 ] 690 # --- 691 # test: Unordered set 692 # spec: 2.25 693 # yaml: | 694 # # sets are represented as a 695 # # mapping where each key is 696 # # associated with the empty string 697 # --- !set 698 # ? Mark McGwire 699 # ? Sammy Sosa 700 # ? Ken Griff 701 --- 702 test: Ordered mappings 703 todo: true 704 spec: 2.26 705 yaml: | 706 # ordered maps are represented as 707 # a sequence of mappings, with 708 # each mapping having one key 709 --- !omap 710 - Mark McGwire: 65 711 - Sammy Sosa: 63 712 - Ken Griffy: 58 713 ruby: | 714 YAML::Omap[ 715 'Mark McGwire', 65, 716 'Sammy Sosa', 63, 717 'Ken Griffy', 58 718 ] 719 --- 720 test: Invoice 721 dump_skip: true 722 spec: 2.27 723 yaml: | 724 --- !clarkevans.com,2002/^invoice 725 invoice: 34843 726 date : 2001-01-23 727 bill-to: &id001 728 given : Chris 729 family : Dumars 730 address: 731 lines: | 732 458 Walkman Dr. 733 Suite #292 734 city : Royal Oak 735 state : MI 736 postal : 48046 737 ship-to: *id001 738 product: 739 - 740 sku : BL394D 741 quantity : 4 742 description : Basketball 743 price : 450.00 744 - 745 sku : BL4438H 746 quantity : 1 747 description : Super Hoop 748 price : 2392.00 749 tax : 251.42 750 total: 4443.52 751 comments: > 752 Late afternoon is best. 753 Backup contact is Nancy 754 Billsmer @ 338-4338. 755 php: | 756 array( 757 'invoice' => 34843, 'date' => mktime(0, 0, 0, 1, 23, 2001), 758 'bill-to' => 759 array( 'given' => 'Chris', 'family' => 'Dumars', 'address' => array( 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ) ) 760 , 'ship-to' => 761 array( 'given' => 'Chris', 'family' => 'Dumars', 'address' => array( 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ) ) 762 , 'product' => 763 array( 764 array( 'sku' => 'BL394D', 'quantity' => 4, 'description' => 'Basketball', 'price' => 450.00 ), 765 array( 'sku' => 'BL4438H', 'quantity' => 1, 'description' => 'Super Hoop', 'price' => 2392.00 ) 766 ), 767 'tax' => 251.42, 'total' => 4443.52, 768 'comments' => "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n" 769 ) 770 --- 771 test: Log file 772 todo: true 773 spec: 2.28 774 yaml: | 775 --- 776 Time: 2001-11-23 15:01:42 -05:00 777 User: ed 778 Warning: > 779 This is an error message 780 for the log file 781 --- 782 Time: 2001-11-23 15:02:31 -05:00 783 User: ed 784 Warning: > 785 A slightly different error 786 message. 787 --- 788 Date: 2001-11-23 15:03:17 -05:00 789 User: ed 790 Fatal: > 791 Unknown variable "bar" 792 Stack: 793 - file: TopClass.py 794 line: 23 795 code: | 796 x = MoreObject("345\n") 797 - file: MoreClass.py 798 line: 58 799 code: |- 800 foo = bar 801 ruby: | 802 y = YAML::Stream.new 803 y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 01, 42, 00, "-05:00" ), 804 'User' => 'ed', 'Warning' => "This is an error message for the log file\n" } ) 805 y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 02, 31, 00, "-05:00" ), 806 'User' => 'ed', 'Warning' => "A slightly different error message.\n" } ) 807 y.add( { 'Date' => YAML::mktime( 2001, 11, 23, 15, 03, 17, 00, "-05:00" ), 808 'User' => 'ed', 'Fatal' => "Unknown variable \"bar\"\n", 809 'Stack' => [ 810 { 'file' => 'TopClass.py', 'line' => 23, 'code' => "x = MoreObject(\"345\\n\")\n" }, 811 { 'file' => 'MoreClass.py', 'line' => 58, 'code' => "foo = bar" } ] } ) 812 documents: 3 813 814 --- 815 test: Throwaway comments 816 yaml: | 817 ### These are four throwaway comment ### 818 819 ### lines (the second line is empty). ### 820 this: | # Comments may trail lines. 821 contains three lines of text. 822 The third one starts with a 823 # character. This isn't a comment. 824 825 # These are three throwaway comment 826 # lines (the first line is empty). 827 php: | 828 array( 829 'this' => "contains three lines of text.\nThe third one starts with a\n# character. This isn't a comment.\n" 830 ) 831 --- 832 test: Document with a single value 833 todo: true 834 yaml: | 835 --- > 836 This YAML stream contains a single text value. 837 The next stream is a log file - a sequence of 838 log entries. Adding an entry to the log is a 839 simple matter of appending it at the end. 840 ruby: | 841 "This YAML stream contains a single text value. The next stream is a log file - a sequence of log entries. Adding an entry to the log is a simple matter of appending it at the end.\n" 842 --- 843 test: Document stream 844 todo: true 845 yaml: | 846 --- 847 at: 2001-08-12 09:25:00.00 Z 848 type: GET 849 HTTP: '1.0' 850 url: '/index.html' 851 --- 852 at: 2001-08-12 09:25:10.00 Z 853 type: GET 854 HTTP: '1.0' 855 url: '/toc.html' 856 ruby: | 857 y = YAML::Stream.new 858 y.add( { 859 'at' => Time::utc( 2001, 8, 12, 9, 25, 00 ), 860 'type' => 'GET', 861 'HTTP' => '1.0', 862 'url' => '/index.html' 863 } ) 864 y.add( { 865 'at' => Time::utc( 2001, 8, 12, 9, 25, 10 ), 866 'type' => 'GET', 867 'HTTP' => '1.0', 868 'url' => '/toc.html' 869 } ) 870 documents: 2 871 872 --- 873 test: Top level mapping 874 yaml: | 875 # This stream is an example of a top-level mapping. 876 invoice : 34843 877 date : 2001-01-23 878 total : 4443.52 879 php: | 880 array( 881 'invoice' => 34843, 882 'date' => mktime(0, 0, 0, 1, 23, 2001), 883 'total' => 4443.52 884 ) 885 --- 886 test: Single-line documents 887 todo: true 888 yaml: | 889 # The following is a sequence of three documents. 890 # The first contains an empty mapping, the second 891 # an empty sequence, and the last an empty string. 892 --- {} 893 --- [ ] 894 --- '' 895 ruby: | 896 y = YAML::Stream.new 897 y.add( {} ) 898 y.add( [] ) 899 y.add( '' ) 900 documents: 3 901 902 --- 903 test: Document with pause 904 todo: true 905 yaml: | 906 # A communication channel based on a YAML stream. 907 --- 908 sent at: 2002-06-06 11:46:25.10 Z 909 payload: Whatever 910 # Receiver can process this as soon as the following is sent: 911 ... 912 # Even if the next message is sent long after: 913 --- 914 sent at: 2002-06-06 12:05:53.47 Z 915 payload: Whatever 916 ... 917 ruby: | 918 y = YAML::Stream.new 919 y.add( 920 { 'sent at' => YAML::mktime( 2002, 6, 6, 11, 46, 25, 0.10 ), 921 'payload' => 'Whatever' } 922 ) 923 y.add( 924 { "payload" => "Whatever", "sent at" => YAML::mktime( 2002, 6, 6, 12, 5, 53, 0.47 ) } 925 ) 926 documents: 2 927 928 --- 929 test: Explicit typing 930 yaml: | 931 integer: 12 932 also int: ! "12" 933 string: !str 12 934 php: | 935 array( 'integer' => 12, 'also int' => 12, 'string' => '12' ) 936 --- 937 test: Private types 938 todo: true 939 yaml: | 940 # Both examples below make use of the 'x-private:ball' 941 # type family URI, but with different semantics. 942 --- 943 pool: !!ball 944 number: 8 945 color: black 946 --- 947 bearing: !!ball 948 material: steel 949 ruby: | 950 y = YAML::Stream.new 951 y.add( { 'pool' => 952 YAML::PrivateType.new( 'ball', 953 { 'number' => 8, 'color' => 'black' } ) } 954 ) 955 y.add( { 'bearing' => 956 YAML::PrivateType.new( 'ball', 957 { 'material' => 'steel' } ) } 958 ) 959 documents: 2 960 961 --- 962 test: Type family under yaml.org 963 yaml: | 964 # The URI is 'tag:yaml.org,2002:str' 965 - !str a Unicode string 966 php: | 967 array( 'a Unicode string' ) 968 --- 969 test: Type family under perl.yaml.org 970 todo: true 971 yaml: | 972 # The URI is 'tag:perl.yaml.org,2002:Text::Tabs' 973 - !perl/Text::Tabs {} 974 ruby: | 975 [ YAML::DomainType.new( 'perl.yaml.org,2002', 'Text::Tabs', {} ) ] 976 --- 977 test: Type family under clarkevans.com 978 todo: true 979 yaml: | 980 # The URI is 'tag:clarkevans.com,2003-02:timesheet' 981 - !clarkevans.com,2003-02/timesheet {} 982 ruby: | 983 [ YAML::DomainType.new( 'clarkevans.com,2003-02', 'timesheet', {} ) ] 984 --- 985 test: URI Escaping 986 todo: true 987 yaml: | 988 same: 989 - !domain.tld,2002/type\x30 value 990 - !domain.tld,2002/type0 value 991 different: # As far as the YAML parser is concerned 992 - !domain.tld,2002/type%30 value 993 - !domain.tld,2002/type0 value 994 ruby-setup: | 995 YAML.add_domain_type( "domain.tld,2002", "type0" ) { |type, val| 996 "ONE: #{val}" 997 } 998 YAML.add_domain_type( "domain.tld,2002", "type%30" ) { |type, val| 999 "TWO: #{val}" 1000 } 1001 ruby: | 1002 { 'same' => [ 'ONE: value', 'ONE: value' ], 'different' => [ 'TWO: value', 'ONE: value' ] } 1003 --- 1004 test: URI Prefixing 1005 todo: true 1006 yaml: | 1007 # 'tag:domain.tld,2002:invoice' is some type family. 1008 invoice: !domain.tld,2002/^invoice 1009 # 'seq' is shorthand for 'tag:yaml.org,2002:seq'. 1010 # This does not effect '^customer' below 1011 # because it is does not specify a prefix. 1012 customers: !seq 1013 # '^customer' is shorthand for the full 1014 # notation 'tag:domain.tld,2002:customer'. 1015 - !^customer 1016 given : Chris 1017 family : Dumars 1018 ruby-setup: | 1019 YAML.add_domain_type( "domain.tld,2002", /(invoice|customer)/ ) { |type, val| 1020 if val.is_a? ::Hash 1021 scheme, domain, type = type.split( /:/, 3 ) 1022 val['type'] = "domain #{type}" 1023 val 1024 else 1025 raise YAML::Error, "Not a Hash in domain.tld/invoice: " + val.inspect 1026 end 1027 } 1028 ruby: | 1029 { "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } } 1030 1031 --- 1032 test: Overriding anchors 1033 yaml: | 1034 anchor : &A001 This scalar has an anchor. 1035 override : &A001 > 1036 The alias node below is a 1037 repeated use of this value. 1038 alias : *A001 1039 php: | 1040 array( 'anchor' => 'This scalar has an anchor.', 1041 'override' => "The alias node below is a repeated use of this value.\n", 1042 'alias' => "The alias node below is a repeated use of this value.\n" ) 1043 --- 1044 test: Flow and block formatting 1045 todo: true 1046 yaml: | 1047 empty: [] 1048 flow: [ one, two, three # May span lines, 1049 , four, # indentation is 1050 five ] # mostly ignored. 1051 block: 1052 - First item in top sequence 1053 - 1054 - Subordinate sequence entry 1055 - > 1056 A folded sequence entry 1057 - Sixth item in top sequence 1058 ruby: | 1059 { 'empty' => [], 'flow' => [ 'one', 'two', 'three', 'four', 'five' ], 1060 'block' => [ 'First item in top sequence', [ 'Subordinate sequence entry' ], 1061 "A folded sequence entry\n", 'Sixth item in top sequence' ] } 1062 --- 1063 test: Complete mapping test 1064 todo: true 1065 yaml: | 1066 empty: {} 1067 flow: { one: 1, two: 2 } 1068 spanning: { one: 1, 1069 two: 2 } 1070 block: 1071 first : First entry 1072 second: 1073 key: Subordinate mapping 1074 third: 1075 - Subordinate sequence 1076 - { } 1077 - Previous mapping is empty. 1078 - A key: value pair in a sequence. 1079 A second: key:value pair. 1080 - The previous entry is equal to the following one. 1081 - 1082 A key: value pair in a sequence. 1083 A second: key:value pair. 1084 !float 12 : This key is a float. 1085 ? > 1086 ? 1087 : This key had to be protected. 1088 "\a" : This key had to be escaped. 1089 ? > 1090 This is a 1091 multi-line 1092 folded key 1093 : Whose value is 1094 also multi-line. 1095 ? this also works as a key 1096 : with a value at the next line. 1097 ? 1098 - This key 1099 - is a sequence 1100 : 1101 - With a sequence value. 1102 ? 1103 This: key 1104 is a: mapping 1105 : 1106 with a: mapping value. 1107 ruby: | 1108 { 'empty' => {}, 'flow' => { 'one' => 1, 'two' => 2 }, 1109 'spanning' => { 'one' => 1, 'two' => 2 }, 1110 'block' => { 'first' => 'First entry', 'second' => 1111 { 'key' => 'Subordinate mapping' }, 'third' => 1112 [ 'Subordinate sequence', {}, 'Previous mapping is empty.', 1113 { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' }, 1114 'The previous entry is equal to the following one.', 1115 { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' } ], 1116 12.0 => 'This key is a float.', "?\n" => 'This key had to be protected.', 1117 "\a" => 'This key had to be escaped.', 1118 "This is a multi-line folded key\n" => "Whose value is also multi-line.", 1119 'this also works as a key' => 'with a value at the next line.', 1120 [ 'This key', 'is a sequence' ] => [ 'With a sequence value.' ] } } 1121 # Couldn't recreate map exactly, so we'll do a detailed check to be sure it's entact 1122 obj_y['block'].keys.each { |k| 1123 if Hash === k 1124 v = obj_y['block'][k] 1125 if k['This'] == 'key' and k['is a'] == 'mapping' and v['with a'] == 'mapping value.' 1126 obj_r['block'][k] = v 1127 end 1128 end 1129 } 1130 --- 1131 test: Literal explicit indentation 1132 yaml: | 1133 # Explicit indentation must 1134 # be given in all the three 1135 # following cases. 1136 leading spaces: |2 1137 This value starts with four spaces. 1138 1139 leading line break: |2 1140 1141 This value starts with a line break. 1142 1143 leading comment indicator: |2 1144 # first line starts with a 1145 # character. 1146 1147 # Explicit indentation may 1148 # also be given when it is 1149 # not required. 1150 redundant: |2 1151 This value is indented 2 spaces. 1152 php: | 1153 array( 1154 'leading spaces' => " This value starts with four spaces.\n", 1155 'leading line break' => "\nThis value starts with a line break.\n", 1156 'leading comment indicator' => "# first line starts with a\n# character.\n", 1157 'redundant' => "This value is indented 2 spaces.\n" 1158 ) 1159 --- 1160 test: Chomping and keep modifiers 1161 yaml: | 1162 clipped: | 1163 This has one newline. 1164 1165 same as "clipped" above: "This has one newline.\n" 1166 1167 stripped: |- 1168 This has no newline. 1169 1170 same as "stripped" above: "This has no newline." 1171 1172 kept: |+ 1173 This has two newlines. 1174 1175 same as "kept" above: "This has two newlines.\n\n" 1176 php: | 1177 array( 1178 'clipped' => "This has one newline.\n", 1179 'same as "clipped" above' => "This has one newline.\n", 1180 'stripped' => 'This has no newline.', 1181 'same as "stripped" above' => 'This has no newline.', 1182 'kept' => "This has two newlines.\n\n", 1183 'same as "kept" above' => "This has two newlines.\n\n" 1184 ) 1185 --- 1186 test: Literal combinations 1187 todo: true 1188 yaml: | 1189 empty: | 1190 1191 literal: | 1192 The \ ' " characters may be 1193 freely used. Leading white 1194 space is significant. 1195 1196 Line breaks are significant. 1197 Thus this value contains one 1198 empty line and ends with a 1199 single line break, but does 1200 not start with one. 1201 1202 is equal to: "The \\ ' \" characters may \ 1203 be\nfreely used. Leading white\n space \ 1204 is significant.\n\nLine breaks are \ 1205 significant.\nThus this value contains \ 1206 one\nempty line and ends with a\nsingle \ 1207 line break, but does\nnot start with one.\n" 1208 1209 # Comments may follow a block 1210 # scalar value. They must be 1211 # less indented. 1212 1213 # Modifiers may be combined in any order. 1214 indented and chomped: |2- 1215 This has no newline. 1216 1217 also written as: |-2 1218 This has no newline. 1219 1220 both are equal to: " This has no newline." 1221 php: | 1222 array( 1223 'empty' => '', 1224 'literal' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " + 1225 "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" + 1226 "empty line and ends with a\nsingle line break, but does\nnot start with one.\n", 1227 'is equal to' => "The \\ ' \" characters may be\nfreely used. Leading white\n space " + 1228 "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" + 1229 "empty line and ends with a\nsingle line break, but does\nnot start with one.\n", 1230 'indented and chomped' => ' This has no newline.', 1231 'also written as' => ' This has no newline.', 1232 'both are equal to' => ' This has no newline.' 1233 ) 1234 --- 1235 test: Folded combinations 1236 todo: true 1237 yaml: | 1238 empty: > 1239 1240 one paragraph: > 1241 Line feeds are converted 1242 to spaces, so this value 1243 contains no line breaks 1244 except for the final one. 1245 1246 multiple paragraphs: >2 1247 1248 An empty line, either 1249 at the start or in 1250 the value: 1251 1252 Is interpreted as a 1253 line break. Thus this 1254 value contains three 1255 line breaks. 1256 1257 indented text: > 1258 This is a folded 1259 paragraph followed 1260 by a list: 1261 * first entry 1262 * second entry 1263 Followed by another 1264 folded paragraph, 1265 another list: 1266 1267 * first entry 1268 1269 * second entry 1270 1271 And a final folded 1272 paragraph. 1273 1274 above is equal to: | 1275 This is a folded paragraph followed by a list: 1276 * first entry 1277 * second entry 1278 Followed by another folded paragraph, another list: 1279 1280 * first entry 1281 1282 * second entry 1283 1284 And a final folded paragraph. 1285 1286 # Explicit comments may follow 1287 # but must be less indented. 1288 php: | 1289 array( 1290 'empty' => '', 1291 'one paragraph' => 'Line feeds are converted to spaces, so this value'. 1292 " contains no line breaks except for the final one.\n", 1293 'multiple paragraphs' => "\nAn empty line, either at the start or in the value:\n". 1294 "Is interpreted as a line break. Thus this value contains three line breaks.\n", 1295 'indented text' => "This is a folded paragraph followed by a list:\n". 1296 " * first entry\n * second entry\nFollowed by another folded paragraph, ". 1297 "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n", 1298 'above is equal to' => "This is a folded paragraph followed by a list:\n". 1299 " * first entry\n * second entry\nFollowed by another folded paragraph, ". 1300 "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n" 1301 ) 1302 --- 1303 test: Single quotes 1304 todo: true 1305 yaml: | 1306 empty: '' 1307 second: '! : \ etc. can be used freely.' 1308 third: 'a single quote '' must be escaped.' 1309 span: 'this contains 1310 six spaces 1311 1312 and one 1313 line break' 1314 is same as: "this contains six spaces\nand one line break" 1315 php: | 1316 array( 1317 'empty' => '', 1318 'second' => '! : \\ etc. can be used freely.', 1319 'third' => "a single quote ' must be escaped.", 1320 'span' => "this contains six spaces\nand one line break", 1321 'is same as' => "this contains six spaces\nand one line break" 1322 ) 1323 --- 1324 test: Double quotes 1325 todo: true 1326 yaml: | 1327 empty: "" 1328 second: "! : etc. can be used freely." 1329 third: "a \" or a \\ must be escaped." 1330 fourth: "this value ends with an LF.\n" 1331 span: "this contains 1332 four \ 1333 spaces" 1334 is equal to: "this contains four spaces" 1335 php: | 1336 array( 1337 'empty' => '', 1338 'second' => '! : etc. can be used freely.', 1339 'third' => 'a " or a \\ must be escaped.', 1340 'fourth' => "this value ends with an LF.\n", 1341 'span' => "this contains four spaces", 1342 'is equal to' => "this contains four spaces" 1343 ) 1344 --- 1345 test: Unquoted strings 1346 todo: true 1347 yaml: | 1348 first: There is no unquoted empty string. 1349 1350 second: 12 ## This is an integer. 1351 1352 third: !str 12 ## This is a string. 1353 1354 span: this contains 1355 six spaces 1356 1357 and one 1358 line break 1359 1360 indicators: this has no comments. 1361 #:foo and bar# are 1362 both text. 1363 1364 flow: [ can span 1365 lines, # comment 1366 like 1367 this ] 1368 1369 note: { one-line keys: but multi-line values } 1370 1371 php: | 1372 array( 1373 'first' => 'There is no unquoted empty string.', 1374 'second' => 12, 1375 'third' => '12', 1376 'span' => "this contains six spaces\nand one line break", 1377 'indicators' => "this has no comments. #:foo and bar# are both text.", 1378 'flow' => [ 'can span lines', 'like this' ], 1379 'note' => { 'one-line keys' => 'but multi-line values' } 1380 ) 1381 --- 1382 test: Spanning sequences 1383 todo: true 1384 yaml: | 1385 # The following are equal seqs 1386 # with different identities. 1387 flow: [ one, two ] 1388 spanning: [ one, 1389 two ] 1390 block: 1391 - one 1392 - two 1393 php: | 1394 array( 1395 'flow' => [ 'one', 'two' ], 1396 'spanning' => [ 'one', 'two' ], 1397 'block' => [ 'one', 'two' ] 1398 ) 1399 --- 1400 test: Flow mappings 1401 yaml: | 1402 # The following are equal maps 1403 # with different identities. 1404 flow: { one: 1, two: 2 } 1405 block: 1406 one: 1 1407 two: 2 1408 php: | 1409 array( 1410 'flow' => array( 'one' => 1, 'two' => 2 ), 1411 'block' => array( 'one' => 1, 'two' => 2 ) 1412 ) 1413 --- 1414 test: Representations of 12 1415 todo: true 1416 yaml: | 1417 - 12 # An integer 1418 # The following scalars 1419 # are loaded to the 1420 # string value '1' '2'. 1421 - !str 12 1422 - '12' 1423 - "12" 1424 - "\ 1425 1\ 1426 2\ 1427 " 1428 # Strings containing paths and regexps can be unquoted: 1429 - /foo/bar 1430 - d:/foo/bar 1431 - foo/bar 1432 - /a.*b/ 1433 php: | 1434 array( 12, '12', '12', '12', '12', '/foo/bar', 'd:/foo/bar', 'foo/bar', '/a.*b/' ) 1435 --- 1436 test: "Null" 1437 todo: true 1438 yaml: | 1439 canonical: ~ 1440 1441 english: null 1442 1443 # This sequence has five 1444 # entries, two with values. 1445 sparse: 1446 - ~ 1447 - 2nd entry 1448 - Null 1449 - 4th entry 1450 - 1451 1452 four: This mapping has five keys, 1453 only two with values. 1454 1455 php: | 1456 array ( 1457 'canonical' => null, 1458 'english' => null, 1459 'sparse' => array( null, '2nd entry', null, '4th entry', null ]), 1460 'four' => 'This mapping has five keys, only two with values.' 1461 ) 1462 --- 1463 test: Omap 1464 todo: true 1465 yaml: | 1466 # Explicitly typed dictionary. 1467 Bestiary: !omap 1468 - aardvark: African pig-like ant eater. Ugly. 1469 - anteater: South-American ant eater. Two species. 1470 - anaconda: South-American constrictor snake. Scary. 1471 # Etc. 1472 ruby: | 1473 { 1474 'Bestiary' => YAML::Omap[ 1475 'aardvark', 'African pig-like ant eater. Ugly.', 1476 'anteater', 'South-American ant eater. Two species.', 1477 'anaconda', 'South-American constrictor snake. Scary.' 1478 ] 1479 } 1480 1481 --- 1482 test: Pairs 1483 todo: true 1484 yaml: | 1485 # Explicitly typed pairs. 1486 tasks: !pairs 1487 - meeting: with team. 1488 - meeting: with boss. 1489 - break: lunch. 1490 - meeting: with client. 1491 ruby: | 1492 { 1493 'tasks' => YAML::Pairs[ 1494 'meeting', 'with team.', 1495 'meeting', 'with boss.', 1496 'break', 'lunch.', 1497 'meeting', 'with client.' 1498 ] 1499 } 1500 1501 --- 1502 test: Set 1503 todo: true 1504 yaml: | 1505 # Explicitly typed set. 1506 baseball players: !set 1507 Mark McGwire: 1508 Sammy Sosa: 1509 Ken Griffey: 1510 ruby: | 1511 { 1512 'baseball players' => YAML::Set[ 1513 'Mark McGwire', nil, 1514 'Sammy Sosa', nil, 1515 'Ken Griffey', nil 1516 ] 1517 } 1518 1519 --- 1520 test: Boolean 1521 yaml: | 1522 false: used as key 1523 logical: true 1524 answer: false 1525 php: | 1526 array( 1527 false => 'used as key', 1528 'logical' => true, 1529 'answer' => false 1530 ) 1531 --- 1532 test: Integer 1533 yaml: | 1534 canonical: 12345 1535 decimal: +12,345 1536 octal: 014 1537 hexadecimal: 0xC 1538 php: | 1539 array( 1540 'canonical' => 12345, 1541 'decimal' => 12345, 1542 'octal' => 12, 1543 'hexadecimal' => 12 1544 ) 1545 --- 1546 test: Float 1547 yaml: | 1548 canonical: 1.23015e+3 1549 exponential: 12.3015e+02 1550 fixed: 1,230.15 1551 negative infinity: -.inf 1552 not a number: .NaN 1553 php: | 1554 array( 1555 'canonical' => 1230.15, 1556 'exponential' => 1230.15, 1557 'fixed' => 1230.15, 1558 'negative infinity' => log(0), 1559 'not a number' => -log(0) 1560 ) 1561 --- 1562 test: Timestamp 1563 todo: true 1564 yaml: | 1565 canonical: 2001-12-15T02:59:43.1Z 1566 valid iso8601: 2001-12-14t21:59:43.10-05:00 1567 space separated: 2001-12-14 21:59:43.10 -05:00 1568 date (noon UTC): 2002-12-14 1569 ruby: | 1570 array( 1571 'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ), 1572 'valid iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ), 1573 'space separated' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ), 1574 'date (noon UTC)' => Date.new( 2002, 12, 14 ) 1575 ) 1576 --- 1577 test: Binary 1578 todo: true 1579 yaml: | 1580 canonical: !binary "\ 1581 R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\ 1582 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\ 1583 +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\ 1584 AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=" 1585 base64: !binary | 1586 R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 1587 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ 1588 +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC 1589 AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs= 1590 description: > 1591 The binary value above is a tiny arrow 1592 encoded as a gif image. 1593 ruby-setup: | 1594 arrow_gif = "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236iiiccc\243\243\243\204\204\204\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371!\376\016Made with GIMP\000,\000\000\000\000\f\000\f\000\000\005, \216\2010\236\343@\024\350i\020\304\321\212\010\034\317\200M$z\357\3770\205p\270\2601f\r\e\316\001\303\001\036\020' \202\n\001\000;" 1595 ruby: | 1596 { 1597 'canonical' => arrow_gif, 1598 'base64' => arrow_gif, 1599 'description' => "The binary value above is a tiny arrow encoded as a gif image.\n" 1600 } 1601 1602 --- 1603 test: Merge key 1604 todo: true 1605 yaml: | 1606 --- 1607 - &CENTER { x: 1, y: 2 } 1608 - &LEFT { x: 0, y: 2 } 1609 - &BIG { r: 10 } 1610 - &SMALL { r: 1 } 1611 1612 # All the following maps are equal: 1613 1614 - # Explicit keys 1615 x: 1 1616 y: 2 1617 r: 10 1618 label: center/big 1619 1620 - # Merge one map 1621 << : *CENTER 1622 r: 10 1623 label: center/big 1624 1625 - # Merge multiple maps 1626 << : [ *CENTER, *BIG ] 1627 label: center/big 1628 1629 - # Override 1630 << : [ *BIG, *LEFT, *SMALL ] 1631 x: 1 1632 label: center/big 1633 1634 ruby-setup: | 1635 center = { 'x' => 1, 'y' => 2 } 1636 left = { 'x' => 0, 'y' => 2 } 1637 big = { 'r' => 10 } 1638 small = { 'r' => 1 } 1639 node1 = { 'x' => 1, 'y' => 2, 'r' => 10, 'label' => 'center/big' } 1640 node2 = center.dup 1641 node2.update( { 'r' => 10, 'label' => 'center/big' } ) 1642 node3 = big.dup 1643 node3.update( center ) 1644 node3.update( { 'label' => 'center/big' } ) 1645 node4 = small.dup 1646 node4.update( left ) 1647 node4.update( big ) 1648 node4.update( { 'x' => 1, 'label' => 'center/big' } ) 1649 1650 ruby: | 1651 [ 1652 center, left, big, small, node1, node2, node3, node4 1653 ] 1654 1655 --- 1656 test: Default key 1657 todo: true 1658 yaml: | 1659 --- # Old schema 1660 link with: 1661 - library1.dll 1662 - library2.dll 1663 --- # New schema 1664 link with: 1665 - = : library1.dll 1666 version: 1.2 1667 - = : library2.dll 1668 version: 2.3 1669 ruby: | 1670 y = YAML::Stream.new 1671 y.add( { 'link with' => [ 'library1.dll', 'library2.dll' ] } ) 1672 obj_h = Hash[ 'version' => 1.2 ] 1673 obj_h.default = 'library1.dll' 1674 obj_h2 = Hash[ 'version' => 2.3 ] 1675 obj_h2.default = 'library2.dll' 1676 y.add( { 'link with' => [ obj_h, obj_h2 ] } ) 1677 documents: 2 1678 1679 --- 1680 test: Special keys 1681 todo: true 1682 yaml: | 1683 "!": These three keys 1684 "&": had to be quoted 1685 "=": and are normal strings. 1686 # NOTE: the following node should NOT be serialized this way. 1687 encoded node : 1688 !special '!' : '!type' 1689 !special|canonical '&' : 12 1690 = : value 1691 # The proper way to serialize the above node is as follows: 1692 node : !!type &12 value 1693 ruby: | 1694 { '!' => 'These three keys', '&' => 'had to be quoted', 1695 '=' => 'and are normal strings.', 1696 'encoded node' => YAML::PrivateType.new( 'type', 'value' ), 1697 'node' => YAML::PrivateType.new( 'type', 'value' ) }