Skip to content

Commit

Permalink
[VarDumper] Added support for SplFileObject
Browse files Browse the repository at this point in the history
  • Loading branch information
lyrixx committed Apr 21, 2015
1 parent eb50b13 commit e75c233
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 6 deletions.
55 changes: 55 additions & 0 deletions src/Symfony/Component/VarDumper/Caster/SplCaster.php
Expand Up @@ -20,6 +20,13 @@
*/
class SplCaster
{
private static $splFileObjectFlags = array(
\SplFileObject::DROP_NEW_LINE => 'DROP_NEW_LINE',
\SplFileObject::READ_AHEAD => 'READ_AHEAD',
\SplFileObject::SKIP_EMPTY => 'SKIP_EMPTY',
\SplFileObject::READ_CSV => 'READ_CSV',
);

public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested)
{
$prefix = Caster::PREFIX_VIRTUAL;
Expand Down Expand Up @@ -122,6 +129,54 @@ public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNe
return $a;
}

public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $isNested)
{
static $map = array(
'csvControl' => 'getCsvControl',
'flags' => 'getFlags',
'maxLineLen' => 'getMaxLineLen',
'fstat' => 'fstat',
'eof' => 'eof',
'key' => 'key',
);

$prefix = Caster::PREFIX_VIRTUAL;

foreach ($map as $key => $accessor) {
try {
$a[$prefix.$key] = $c->$accessor();
} catch (\Exception $e) {
}
}

if (isset($a[$prefix.'flags'])) {
$flagsArray = array();
foreach (self::$splFileObjectFlags as $value => $name) {
if ($a[$prefix.'flags'] & $value) {
$flagsArray[] = $name;
}
}
$a[$prefix.'flags'] = new ConstStub(implode('|', $flagsArray), $a[$prefix.'flags']);
}

if (isset($a[$prefix.'fstat'])) {
$fstat = $a[$prefix.'fstat'];
$fstat = array(
'dev' => $fstat['dev'],
'ino' => $fstat['ino'],
'nlink' => $fstat['nlink'],
'rdev' => $fstat['rdev'],
'blksize' => $fstat['blksize'],
'blocks' => $fstat['blocks'],
'…' => '…'.(count($fstat) - 6),
);

$a[$prefix.'fstat'] = $fstat;
}

return $a;
}

public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
{
$a += array(
Expand Down
1 change: 1 addition & 0 deletions src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php
Expand Up @@ -79,6 +79,7 @@ abstract class AbstractCloner implements ClonerInterface
'ArrayObject' => 'Symfony\Component\VarDumper\Caster\SplCaster::castArrayObject',
'SplDoublyLinkedList' => 'Symfony\Component\VarDumper\Caster\SplCaster::castDoublyLinkedList',
'SplFileInfo' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFileInfo',
'SplFileObject' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFileObject',
'SplFixedArray' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFixedArray',
'SplHeap' => 'Symfony\Component\VarDumper\Caster\SplCaster::castHeap',
'SplObjectStorage' => 'Symfony\Component\VarDumper\Caster\SplCaster::castObjectStorage',
Expand Down
61 changes: 55 additions & 6 deletions src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php
Expand Up @@ -23,20 +23,20 @@ public function getCastFileInfoTests()
return array(
array(__FILE__, <<<'EOTXT'
SplFileInfo {
path: "%s/src/Symfony/Component/VarDumper/Tests/Caster"
path: "%s/Tests/Caster"
filename: "SplCasterTest.php"
basename: "SplCasterTest.php"
pathname: "%s/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php"
pathname: "%s/Tests/Caster/SplCasterTest.php"
extension: "php"
realPath: "%s/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php"
realPath: "%s/Tests/Caster/SplCasterTest.php"
aTime: %s-%s-%d %d:%d:%d
mTime: %s-%s-%d %d:%d:%d
cTime: %s-%s-%d %d:%d:%d
inode: %d
size: %d
perms: 0100644
owner: 1000
group: 1000
perms: 0%d
owner: %d
group: %d
type: "file"
writable: true
readable: true
Expand Down Expand Up @@ -72,4 +72,53 @@ public function testCastFileInfo($file, $dump)
{
$this->assertDumpMatchesFormat($dump, new \SplFileInfo($file));
}

public function testCastFileObject()
{
$var = new \SplFileObject(__FILE__);
$var->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY);
$dump = <<<'EOTXT'
SplFileObject {
path: "%s/Tests/Caster"
filename: "SplCasterTest.php"
basename: "SplCasterTest.php"
pathname: "%s/Tests/Caster/SplCasterTest.php"
extension: "php"
realPath: "%s/Tests/Caster/SplCasterTest.php"
aTime: %s-%s-%d %d:%d:%d
mTime: %s-%s-%d %d:%d:%d
cTime: %s-%s-%d %d:%d:%d
inode: %d
size: %d
perms: 0%d
owner: %d
group: %d
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
csvControl: array:2 [
0 => ","
1 => """
]
flags: DROP_NEW_LINE|SKIP_EMPTY
maxLineLen: 0
fstat: array:7 [
"dev" => %d
"ino" => %d
"nlink" => %d
"rdev" => 0
"blksize" => %d
"blocks" => %d
"…" => "…20"
]
eof: false
key: 0
}
EOTXT;
$this->assertDumpMatchesFormat($dump, $var);
}
}

0 comments on commit e75c233

Please sign in to comment.