[VarDumper] Add Caster for XML-parser resources
This commit is contained in:
parent
59ca5b3af9
commit
00701cba8d
61
src/Symfony/Component/VarDumper/Caster/XmlResourceCaster.php
Normal file
61
src/Symfony/Component/VarDumper/Caster/XmlResourceCaster.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?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\VarDumper\Caster;
|
||||||
|
|
||||||
|
use Symfony\Component\VarDumper\Cloner\Stub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Casts XML resources to array representation.
|
||||||
|
*
|
||||||
|
* @author Nicolas Grekas <p@tchwork.com>
|
||||||
|
*/
|
||||||
|
class XmlResourceCaster
|
||||||
|
{
|
||||||
|
private static $xmlErrors = array(
|
||||||
|
XML_ERROR_NONE => 'XML_ERROR_NONE',
|
||||||
|
XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY',
|
||||||
|
XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX',
|
||||||
|
XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS',
|
||||||
|
XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN',
|
||||||
|
XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN',
|
||||||
|
XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR',
|
||||||
|
XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH',
|
||||||
|
XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE',
|
||||||
|
XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT',
|
||||||
|
XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF',
|
||||||
|
XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY',
|
||||||
|
XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF',
|
||||||
|
XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY',
|
||||||
|
XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF',
|
||||||
|
XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF',
|
||||||
|
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF',
|
||||||
|
XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI',
|
||||||
|
XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING',
|
||||||
|
XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING',
|
||||||
|
XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION',
|
||||||
|
XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING',
|
||||||
|
);
|
||||||
|
|
||||||
|
public static function castXml($h, array $a, Stub $stub, $isNested)
|
||||||
|
{
|
||||||
|
$a['current_byte_index'] = xml_get_current_byte_index($h);
|
||||||
|
$a['current_column_number'] = xml_get_current_column_number($h);
|
||||||
|
$a['current_line_number'] = xml_get_current_line_number($h);
|
||||||
|
$a['error_code'] = xml_get_error_code($h);
|
||||||
|
|
||||||
|
if (isset(self::$xmlErrors[$a['error_code']])) {
|
||||||
|
$a['error_code'] = new ConstStub(self::$xmlErrors[$a['error_code']], $a['error_code']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $a;
|
||||||
|
}
|
||||||
|
}
|
@ -78,6 +78,7 @@ abstract class AbstractCloner implements ClonerInterface
|
|||||||
':process' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castProcess',
|
':process' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castProcess',
|
||||||
':stream' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castStream',
|
':stream' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castStream',
|
||||||
':stream-context' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castStreamContext',
|
':stream-context' => 'Symfony\Component\VarDumper\Caster\ResourceCaster::castStreamContext',
|
||||||
|
':xml' => 'Symfony\Component\VarDumper\Caster\XmlResourceCaster::castXml',
|
||||||
);
|
);
|
||||||
|
|
||||||
protected $maxItems = 2500;
|
protected $maxItems = 2500;
|
||||||
|
@ -102,6 +102,40 @@ array:25 [
|
|||||||
b"bin-key-é" => ""
|
b"bin-key-é" => ""
|
||||||
]
|
]
|
||||||
|
|
||||||
|
EOTXT
|
||||||
|
,
|
||||||
|
$out
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testXmlResource()
|
||||||
|
{
|
||||||
|
if (!extension_loaded('xml')) {
|
||||||
|
$this->markTestSkipped('xml extension is required');
|
||||||
|
}
|
||||||
|
|
||||||
|
$var = xml_parser_create();
|
||||||
|
$ref = (int) $var;
|
||||||
|
|
||||||
|
$dumper = new CliDumper();
|
||||||
|
$dumper->setColors(false);
|
||||||
|
$cloner = new VarCloner();
|
||||||
|
|
||||||
|
$data = $cloner->cloneVar($var);
|
||||||
|
$out = fopen('php://memory', 'r+b');
|
||||||
|
$dumper->dump($data, $out);
|
||||||
|
rewind($out);
|
||||||
|
$out = stream_get_contents($out);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
<<<EOTXT
|
||||||
|
:xml {@{$ref}
|
||||||
|
current_byte_index: 0
|
||||||
|
current_column_number: 1
|
||||||
|
current_line_number: 1
|
||||||
|
error_code: XML_ERROR_NONE
|
||||||
|
}
|
||||||
|
|
||||||
EOTXT
|
EOTXT
|
||||||
,
|
,
|
||||||
$out
|
$out
|
||||||
|
Reference in New Issue
Block a user