124 lines
3.5 KiB
PHP
124 lines
3.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Psy Shell
|
|
*
|
|
* (c) 2012-2014 Justin Hileman
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Psy\Test\Presenter;
|
|
|
|
use Psy\Presenter\ArrayPresenter;
|
|
use Psy\Presenter\ObjectPresenter;
|
|
use Psy\Presenter\Presenter;
|
|
use Psy\Presenter\PresenterManager;
|
|
use Psy\Presenter\ScalarPresenter;
|
|
use Psy\Test\Presenter\Fixtures\SimpleClass;
|
|
|
|
class ObjectPresenterTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
private $presenter;
|
|
private $manager;
|
|
|
|
public function setUp()
|
|
{
|
|
$this->presenter = new ObjectPresenter();
|
|
|
|
$this->manager = new PresenterManager();
|
|
$this->manager->addPresenter(new ScalarPresenter());
|
|
$this->manager->addPresenter(new ArrayPresenter());
|
|
$this->manager->addPresenter($this->presenter);
|
|
}
|
|
|
|
public function testPresentEmptyObject()
|
|
{
|
|
$empty = new \StdClass();
|
|
$this->assertEquals(
|
|
$this->presenter->presentRef($empty) . ' {}',
|
|
$this->presenter->present($empty)
|
|
);
|
|
}
|
|
|
|
public function testPresentWithDepth()
|
|
{
|
|
$obj = new \StdClass();
|
|
$obj->name = 'std';
|
|
$obj->type = 'class';
|
|
$obj->tags = array('stuff', 'junk');
|
|
$obj->child = new \StdClass();
|
|
$obj->child->name = 'std, jr';
|
|
|
|
$hash = spl_object_hash($obj);
|
|
$childHash = spl_object_hash($obj->child);
|
|
|
|
$expected = <<<EOS
|
|
<object>\<<class>stdClass</class> <strong>#$hash</strong>></object> {
|
|
name: <string>"std"</string>,
|
|
type: <string>"class"</string>,
|
|
tags: Array(<number>2</number>),
|
|
child: <object>\<<class>stdClass</class> <strong>#$childHash</strong>></object>
|
|
}
|
|
EOS;
|
|
|
|
$this->assertStringMatchesFormat($expected, $this->presenter->present($obj, 1));
|
|
}
|
|
|
|
public function testPresentWithoutDepth()
|
|
{
|
|
$obj = new \StdClass();
|
|
$obj->name = 'std';
|
|
$obj->type = 'class';
|
|
$obj->tags = array('stuff', 'junk');
|
|
$obj->child = new \StdClass();
|
|
$obj->child->name = 'std, jr';
|
|
|
|
$hash = spl_object_hash($obj);
|
|
$childHash = spl_object_hash($obj->child);
|
|
|
|
$expected = <<<EOS
|
|
<object>\<<class>stdClass</class> <strong>#$hash</strong>></object> {
|
|
name: <string>"std"</string>,
|
|
type: <string>"class"</string>,
|
|
tags: [
|
|
<string>"stuff"</string>,
|
|
<string>"junk"</string>
|
|
],
|
|
child: <object>\<<class>stdClass</class> <strong>#$childHash</strong>></object> {
|
|
name: <string>"std, jr"</string>
|
|
}
|
|
}
|
|
EOS;
|
|
|
|
$this->assertStringMatchesFormat($expected, $this->presenter->present($obj));
|
|
}
|
|
|
|
public function testPresentRef()
|
|
{
|
|
$obj = new \StdClass();
|
|
|
|
$formatted = $this->presenter->presentRef($obj);
|
|
|
|
$this->assertStringMatchesFormat('<object>\<<class>stdClass</class> <strong>#%s</strong>></object>', $formatted);
|
|
$this->assertContains(spl_object_hash($obj), $formatted);
|
|
}
|
|
|
|
public function testPresentVerbose()
|
|
{
|
|
$obj = new SimpleClass();
|
|
$hash = spl_object_hash($obj);
|
|
|
|
$expected = <<<EOS
|
|
<object>\<<class>Psy\Test\Presenter\Fixtures\SimpleClass</class> <strong>#$hash</strong>></object> {
|
|
hello: <string>"Hello world!"</string>,
|
|
<protected>foo</protected>: <string>"bar"</string>,
|
|
<private>secret</private>: <number>42</number>
|
|
}
|
|
EOS;
|
|
|
|
$this->assertStringMatchesFormat($expected, $this->presenter->present($obj, null, Presenter::VERBOSE));
|
|
}
|
|
}
|