4cec9a9e86
* 2.5: Updated generateSql tool Fix the implementation of deprecated Locale classes Fix phpdoc and coding standards Replace usages of the deprecated TypeTestCase by the new one Remove usages of deprecated constants Update functional tests to use the PSR NullLogger fix regression in form tests after pr #13027 | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - Make fabbot happy Clean up testing No global state for isolated tests and other fixes No global state for isolated tests and other fixes fix #10054 - form data collector with dynamic fields [TwigBundle] Moved the setting of the default escaping strategy from the Twig engine to the Twig environment [Debug] fix checkip6 [HttpFoundation] fixed error when an IP in the X-Forwarded-For HTTP header contains a port Update the note about origins of the CssSelector component. Use the correct cssselect library name in docblocks. [DomCrawler] fixed bug #12143 Conflicts: src/Symfony/Bundle/FrameworkBundle/Templating/GlobalVariables.php src/Symfony/Component/Serializer/Normalizer/DenormalizableInterface.php
237 lines
6.4 KiB
PHP
237 lines
6.4 KiB
PHP
<?php
|
||
|
||
/*
|
||
* This file is part of the Symfony package.
|
||
*
|
||
* (c) Fabien Potencier <fabien@symfony.com>
|
||
*
|
||
* For the full copyright and license information, please view the LICENSE
|
||
* file that was distributed with this source code.
|
||
*/
|
||
|
||
namespace Symfony\Component\Yaml\Tests;
|
||
|
||
use Symfony\Component\Yaml\Parser;
|
||
use Symfony\Component\Yaml\Dumper;
|
||
|
||
class DumperTest extends \PHPUnit_Framework_TestCase
|
||
{
|
||
protected $parser;
|
||
protected $dumper;
|
||
protected $path;
|
||
|
||
protected $array = array(
|
||
'' => 'bar',
|
||
'foo' => '#bar',
|
||
'foo\'bar' => array(),
|
||
'bar' => array(1, 'foo'),
|
||
'foobar' => array(
|
||
'foo' => 'bar',
|
||
'bar' => array(1, 'foo'),
|
||
'foobar' => array(
|
||
'foo' => 'bar',
|
||
'bar' => array(1, 'foo'),
|
||
),
|
||
),
|
||
);
|
||
|
||
protected function setUp()
|
||
{
|
||
$this->parser = new Parser();
|
||
$this->dumper = new Dumper();
|
||
$this->path = __DIR__.'/Fixtures';
|
||
}
|
||
|
||
protected function tearDown()
|
||
{
|
||
$this->parser = null;
|
||
$this->dumper = null;
|
||
$this->path = null;
|
||
$this->array = null;
|
||
}
|
||
|
||
public function testSetIndentation()
|
||
{
|
||
$this->dumper->setIndentation(7);
|
||
|
||
$expected = <<<EOF
|
||
'': bar
|
||
foo: '#bar'
|
||
'foo''bar': { }
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar:
|
||
- 1
|
||
- foo
|
||
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 4, 0));
|
||
}
|
||
|
||
public function testSpecifications()
|
||
{
|
||
$files = $this->parser->parse(file_get_contents($this->path.'/index.yml'));
|
||
foreach ($files as $file) {
|
||
$yamls = file_get_contents($this->path.'/'.$file.'.yml');
|
||
|
||
// split YAMLs documents
|
||
foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
|
||
if (!$yaml) {
|
||
continue;
|
||
}
|
||
|
||
$test = $this->parser->parse($yaml);
|
||
if (isset($test['dump_skip']) && $test['dump_skip']) {
|
||
continue;
|
||
} elseif (isset($test['todo']) && $test['todo']) {
|
||
// TODO
|
||
} else {
|
||
eval('$expected = '.trim($test['php']).';');
|
||
$this->assertSame($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public function testInlineLevel()
|
||
{
|
||
$expected = <<<EOF
|
||
{ '': bar, foo: '#bar', 'foo''bar': { }, bar: [1, foo], foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } } }
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, -10), '->dump() takes an inline level argument');
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 0), '->dump() takes an inline level argument');
|
||
|
||
$expected = <<<EOF
|
||
'': bar
|
||
foo: '#bar'
|
||
'foo''bar': { }
|
||
bar: [1, foo]
|
||
foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } }
|
||
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 1), '->dump() takes an inline level argument');
|
||
|
||
$expected = <<<EOF
|
||
'': bar
|
||
foo: '#bar'
|
||
'foo''bar': { }
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar: [1, foo]
|
||
foobar: { foo: bar, bar: [1, foo] }
|
||
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 2), '->dump() takes an inline level argument');
|
||
|
||
$expected = <<<EOF
|
||
'': bar
|
||
foo: '#bar'
|
||
'foo''bar': { }
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar: [1, foo]
|
||
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 3), '->dump() takes an inline level argument');
|
||
|
||
$expected = <<<EOF
|
||
'': bar
|
||
foo: '#bar'
|
||
'foo''bar': { }
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar:
|
||
- 1
|
||
- foo
|
||
foobar:
|
||
foo: bar
|
||
bar:
|
||
- 1
|
||
- foo
|
||
|
||
EOF;
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 4), '->dump() takes an inline level argument');
|
||
$this->assertEquals($expected, $this->dumper->dump($this->array, 10), '->dump() takes an inline level argument');
|
||
}
|
||
|
||
public function testObjectSupportEnabled()
|
||
{
|
||
$dump = $this->dumper->dump(array('foo' => new A(), 'bar' => 1), 0, 0, false, true);
|
||
|
||
$this->assertEquals('{ foo: !!php/object:O:30:"Symfony\Component\Yaml\Tests\A":1:{s:1:"a";s:3:"foo";}, bar: 1 }', $dump, '->dump() is able to dump objects');
|
||
}
|
||
|
||
public function testObjectSupportDisabledButNoExceptions()
|
||
{
|
||
$dump = $this->dumper->dump(array('foo' => new A(), 'bar' => 1));
|
||
|
||
$this->assertEquals('{ foo: null, bar: 1 }', $dump, '->dump() does not dump objects when disabled');
|
||
}
|
||
|
||
/**
|
||
* @expectedException \Symfony\Component\Yaml\Exception\DumpException
|
||
*/
|
||
public function testObjectSupportDisabledWithExceptions()
|
||
{
|
||
$this->dumper->dump(array('foo' => new A(), 'bar' => 1), 0, 0, true, false);
|
||
}
|
||
|
||
/**
|
||
* @dataProvider getEscapeSequences
|
||
*/
|
||
public function testEscapedEscapeSequencesInQuotedScalar($input, $expected)
|
||
{
|
||
$this->assertEquals($expected, $this->dumper->dump($input));
|
||
}
|
||
|
||
public function getEscapeSequences()
|
||
{
|
||
return array(
|
||
'null' => array("\t\\0", '"\t\\\\0"'),
|
||
'bell' => array("\t\\a", '"\t\\\\a"'),
|
||
'backspace' => array("\t\\b", '"\t\\\\b"'),
|
||
'horizontal-tab' => array("\t\\t", '"\t\\\\t"'),
|
||
'line-feed' => array("\t\\n", '"\t\\\\n"'),
|
||
'vertical-tab' => array("\t\\v", '"\t\\\\v"'),
|
||
'form-feed' => array("\t\\f", '"\t\\\\f"'),
|
||
'carriage-return' => array("\t\\r", '"\t\\\\r"'),
|
||
'escape' => array("\t\\e", '"\t\\\\e"'),
|
||
'space' => array("\t\\ ", '"\t\\\\ "'),
|
||
'double-quote' => array("\t\\\"", '"\t\\\\\\""'),
|
||
'slash' => array("\t\\/", '"\t\\\\/"'),
|
||
'backslash' => array("\t\\\\", '"\t\\\\\\\\"'),
|
||
'next-line' => array("\t\\N", '"\t\\\\N"'),
|
||
'non-breaking-space' => array("\t\\<EFBFBD>", '"\t\\\\<5C>"'),
|
||
'line-separator' => array("\t\\L", '"\t\\\\L"'),
|
||
'paragraph-separator' => array("\t\\P", '"\t\\\\P"'),
|
||
);
|
||
}
|
||
}
|
||
|
||
class A
|
||
{
|
||
public $a = 'foo';
|
||
}
|