webworld888/core/tests/Interception/AdvisorCollectionTest.php
2021-10-26 19:14:12 +09:00

122 lines
3.8 KiB
PHP

<?php
/**
* @author XE Developers <developers@xpressengine.com>
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
* @link https://xpressengine.io
*/
namespace Xpressengine\Tests\Interception;
use Xpressengine\Interception\Advisor;
use Xpressengine\Interception\AdvisorCollection;
class AdvisorCollectionTest extends \PHPUnit\Framework\TestCase
{
/**
* @var AdvisorCollection
*/
protected $advisorCollection = null;
protected function tearDown()
{
\Mockery::close();
parent::tearDown();
}
protected function setUp()
{
$this->advisorCollection = new AdvisorCollection();
parent::setUp(); // TODO: Change the autogenerated stub
}
/**
*
* @expectedException \Xpressengine\Interception\Exceptions\AdvisorNameAlreadyExistsException
*/
public function testPutDuplicateAdvisorName()
{
$advisor1 = new Advisor(
'ad1', 'Xpressengine\Tests\Interception\Document@insertDocument', function ($target, $args) {
return $target($args);
}
);
$this->advisorCollection->put($advisor1);
$advisor2 = new Advisor(
'ad1', ['Xpressengine\Tests\Interception\Document@insertDocument', 'Xpressengine\Tests\Interception\Document@deleteDocument'], function ($target, $args) {
return $target($args);
}
);
$this->advisorCollection->put($advisor2);
}
public function testPutAndGetAdvisorList()
{
$advisor1 = new Advisor(
'ad1', 'Xpressengine\Tests\Interception\Document@insertDocument', function ($target, $args) {
return $target($args);
}
);
$this->advisorCollection->put($advisor1);
$advisor2 = new Advisor(
'ad2', ['Xpressengine\Tests\Interception\Document@insertDocument', 'Xpressengine\Tests\Interception\Document@deleteDocument'], function ($target, $args) {
return $target($args);
}
);
$this->advisorCollection->put($advisor2, ['before' => ['ad1', 'ad3']]);
$advisor3 = new Advisor(
'ad3', 'Xpressengine\Tests\Interception\Document@deleteDocument', function ($target, $args) {
return $target($args);
});
$this->advisorCollection->put($advisor3, ['before'=>['ad1']]);
$proxyObject = \Mockery::mock('Proxy');
$advisorList = $this->advisorCollection->getAdvisorList('Xpressengine\Tests\Interception\Document@insertDocument', $proxyObject);
$this->assertEquals($advisorList->next(), $advisor1);
$this->assertEquals($advisorList->next(), $advisor2);
$advisorList = $this->advisorCollection->getAdvisorList('Xpressengine\Tests\Interception\Document@deleteDocument', $proxyObject);
$this->assertEquals($advisorList->next(), $advisor3);
$this->assertEquals($advisorList->next(), $advisor2);
}
public function testSetAlias()
{
$advisor1 = new Advisor(
'ad1', 'Bar@insertDocument', function ($target, $args) {
return $target($args);
}
);
$this->advisorCollection->put($advisor1);
$this->advisorCollection->setAlias('Bar', 'Acme\\Bar');
$this->assertEquals(['Bar'=>'Acme\\Bar'], $this->getPropertyValue($this->advisorCollection, 'aliases'));
$map = $this->getPropertyValue($this->advisorCollection, 'advisorMap');
$this->assertFalse(isset($map->Bar));
}
protected function getPropertyValue($object, $property)
{
$refl = new \ReflectionObject($object);
$repoProp = $refl->getProperty($property);
$repoProp->setAccessible(true);
return $repoProp->getValue($object);
}
}