DumperTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /*
  3. * This file is part of the symfony package.
  4. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  5. *
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. */
  9. require_once __DIR__.'/../../../bootstrap.php';
  10. use Symfony\Components\YAML\YAML;
  11. use Symfony\Components\YAML\Parser;
  12. use Symfony\Components\YAML\Dumper;
  13. YAML::setSpecVersion('1.1');
  14. $t = new LimeTest(148);
  15. $parser = new Parser();
  16. $dumper = new Dumper();
  17. $path = __DIR__.'/../../../../fixtures/Symfony/Components/YAML';
  18. $files = $parser->parse(file_get_contents($path.'/index.yml'));
  19. foreach ($files as $file)
  20. {
  21. $t->diag($file);
  22. $yamls = file_get_contents($path.'/'.$file.'.yml');
  23. // split YAMLs documents
  24. foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml)
  25. {
  26. if (!$yaml)
  27. {
  28. continue;
  29. }
  30. $test = $parser->parse($yaml);
  31. if (isset($test['dump_skip']) && $test['dump_skip'])
  32. {
  33. continue;
  34. }
  35. else if (isset($test['todo']) && $test['todo'])
  36. {
  37. $t->todo($test['test']);
  38. }
  39. else
  40. {
  41. $expected = eval('return '.trim($test['php']).';');
  42. $t->is($parser->parse($dumper->dump($expected, 10)), $expected, $test['test']);
  43. }
  44. }
  45. }
  46. // inline level
  47. $array = array(
  48. '' => 'bar',
  49. 'foo' => '#bar',
  50. 'foo\'bar' => array(),
  51. 'bar' => array(1, 'foo'),
  52. 'foobar' => array(
  53. 'foo' => 'bar',
  54. 'bar' => array(1, 'foo'),
  55. 'foobar' => array(
  56. 'foo' => 'bar',
  57. 'bar' => array(1, 'foo'),
  58. ),
  59. ),
  60. );
  61. $expected = <<<EOF
  62. { '': bar, foo: '#bar', 'foo''bar': { }, bar: [1, foo], foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } } }
  63. EOF;
  64. $t->is($dumper->dump($array, -10), $expected, '->dump() takes an inline level argument');
  65. $t->is($dumper->dump($array, 0), $expected, '->dump() takes an inline level argument');
  66. $expected = <<<EOF
  67. '': bar
  68. foo: '#bar'
  69. 'foo''bar': { }
  70. bar: [1, foo]
  71. foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } }
  72. EOF;
  73. $t->is($dumper->dump($array, 1), $expected, '->dump() takes an inline level argument');
  74. $expected = <<<EOF
  75. '': bar
  76. foo: '#bar'
  77. 'foo''bar': { }
  78. bar:
  79. - 1
  80. - foo
  81. foobar:
  82. foo: bar
  83. bar: [1, foo]
  84. foobar: { foo: bar, bar: [1, foo] }
  85. EOF;
  86. $t->is($dumper->dump($array, 2), $expected, '->dump() takes an inline level argument');
  87. $expected = <<<EOF
  88. '': bar
  89. foo: '#bar'
  90. 'foo''bar': { }
  91. bar:
  92. - 1
  93. - foo
  94. foobar:
  95. foo: bar
  96. bar:
  97. - 1
  98. - foo
  99. foobar:
  100. foo: bar
  101. bar: [1, foo]
  102. EOF;
  103. $t->is($dumper->dump($array, 3), $expected, '->dump() takes an inline level argument');
  104. $expected = <<<EOF
  105. '': bar
  106. foo: '#bar'
  107. 'foo''bar': { }
  108. bar:
  109. - 1
  110. - foo
  111. foobar:
  112. foo: bar
  113. bar:
  114. - 1
  115. - foo
  116. foobar:
  117. foo: bar
  118. bar:
  119. - 1
  120. - foo
  121. EOF;
  122. $t->is($dumper->dump($array, 4), $expected, '->dump() takes an inline level argument');
  123. $t->is($dumper->dump($array, 10), $expected, '->dump() takes an inline level argument');
  124. // objects
  125. $t->diag('Objects support');
  126. class A
  127. {
  128. public $a = 'foo';
  129. }
  130. $a = array('foo' => new A(), 'bar' => 1);
  131. $t->is($dumper->dump($a), '{ foo: !!php/object:O:1:"A":1:{s:1:"a";s:3:"foo";}, bar: 1 }', '->dump() is able to dump objects');