Pathologic was missing because of a .git folder inside.
[yaffs-website] / vendor / symfony / yaml / Tests / Fixtures / YtsSpecificationExamples.yml
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.0,
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' => gmmktime(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' => gmmktime(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.0,
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' ) }