Skip to content
Snippets Groups Projects
Commit 57c8b15a authored by Yuri Kovsher's avatar Yuri Kovsher
Browse files

Merge remote-tracking branch 'main-ce/develop' into MAGETWO-31522

parents c7a6bd31 a68cc70b
No related merge requests found
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Interception;
/**
* Class GeneralTest
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
abstract class AbstractPlugin extends \PHPUnit_Framework_TestCase
{
/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
protected $_configReader;
/**
* @var \Magento\Framework\ObjectManagerInterface
*/
protected $_objectManager;
public function setUpInterceptionConfig($pluginConfig)
{
$config = new \Magento\Framework\Interception\ObjectManager\Config\Developer();
$factory = new \Magento\Framework\ObjectManager\Factory\Dynamic\Developer($config, null);
$this->_configReader = $this->getMock('Magento\Framework\Config\ReaderInterface');
$this->_configReader->expects(
$this->any()
)->method(
'read'
)->will(
$this->returnValue($pluginConfig)
);
$areaList = $this->getMock('Magento\Framework\App\AreaList', [], [], '', false);
$areaList->expects($this->any())->method('getCodes')->will($this->returnValue([]));
$configScope = new \Magento\Framework\Config\Scope($areaList, 'global');
$cache = $this->getMock('Magento\Framework\Config\CacheInterface');
$cache->expects($this->any())->method('load')->will($this->returnValue(false));
$definitions = new \Magento\Framework\ObjectManager\Definition\Runtime();
$relations = new \Magento\Framework\ObjectManager\Relations\Runtime();
$interceptionConfig = new Config\Config(
$this->_configReader,
$configScope,
$cache,
$relations,
$config,
$definitions
);
$interceptionDefinitions = new Definition\Runtime();
$this->_objectManager = new \Magento\Framework\ObjectManager\ObjectManager(
$factory,
$config,
[
'Magento\Framework\Config\CacheInterface' => $cache,
'Magento\Framework\Config\ScopeInterface' => $configScope,
'Magento\Framework\Config\ReaderInterface' => $this->_configReader,
'Magento\Framework\ObjectManager\RelationsInterface' => $relations,
'Magento\Framework\ObjectManager\ConfigInterface' => $config,
'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $config,
'Magento\Framework\ObjectManager\DefinitionInterface' => $definitions,
'Magento\Framework\Interception\DefinitionInterface' => $interceptionDefinitions
]
);
$factory->setObjectManager($this->_objectManager);
$config->setInterceptionConfig($interceptionConfig);
$config->extend(
[
'preferences' => [
'Magento\Framework\Interception\PluginListInterface' =>
'Magento\Framework\Interception\PluginList\PluginList',
'Magento\Framework\Interception\ChainInterface' =>
'Magento\Framework\Interception\Chain\Chain',
],
]
);
}
}
...@@ -77,4 +77,44 @@ class Intercepted extends InterceptedParent implements InterceptedInterface ...@@ -77,4 +77,44 @@ class Intercepted extends InterceptedParent implements InterceptedInterface
{ {
return '<K>' . $param1 . '</K>'; return '<K>' . $param1 . '</K>';
} }
/**
* @SuppressWarnings(PHPMD.ShortMethodName)
*/
public function V($param1)
{
return '<V>' . $param1 . '</V>';
}
/**
* @SuppressWarnings(PHPMD.ShortMethodName)
*/
public function W($param1)
{
return '<W>' . $param1 . '</W>';
}
/**
* @SuppressWarnings(PHPMD.ShortMethodName)
*/
public function X($param1)
{
return '<X>' . $param1 . '</X>';
}
/**
* @SuppressWarnings(PHPMD.ShortMethodName)
*/
public function Y($param1)
{
return '<Y>' . $param1 . '</Y>';
}
/**
* @SuppressWarnings(PHPMD.ShortMethodName)
*/
public function Z($param1)
{
return '<Z>' . $param1 . '</Z>';
}
} }
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Interception\Fixture\Intercepted;
use Magento\Framework\Interception\Fixture\Intercepted;
class FirstPlugin
{
/**
* @var int
*/
protected $_counter = 0;
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundC(Intercepted $subject, \Closure $next, $param1)
{
return '<F:C>' . $next($param1) . '</F:C>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundD(Intercepted $subject, \Closure $next, $param1)
{
$this->_counter++;
return '<F:D>' . $this->_counter . ': ' . $next($param1) . '</F:D>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundK(Intercepted $subject, \Closure $next, $param1)
{
$result = $subject->C($param1);
return '<F:K>' . $subject->F($result) . '</F:K>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeG(Intercepted $subject, $param1)
{
return ['<F:bG>' . $param1 . '</F:bG>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundG(Intercepted $subject, \Closure $next, $param1)
{
return $next('<F:G>' . $param1 . '</F:G>');
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterG(Intercepted $subject, $result)
{
return '<F:aG>' . $result . '</F:aG>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeV(Intercepted $subject, $param1)
{
return ['<F:bV/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundV(Intercepted $subject, \Closure $next, $param1)
{
return '<F:V>' . $param1 . '<F:V/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeW(Intercepted $subject, $param1)
{
return ['<F:bW/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundW(Intercepted $subject, \Closure $next, $param1)
{
return '<F:W>' . $param1 . '<F:W/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterW(Intercepted $subject, $result)
{
return '<F:aW/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeX(Intercepted $subject, $param1)
{
return ['<F:bX/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundY(Intercepted $subject, \Closure $next, $param1)
{
return '<F:Y>' . $param1 . '<F:Y/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterZ(Intercepted $subject, $result)
{
return '<F:aZ/>';
}
}
...@@ -64,4 +64,68 @@ class Plugin ...@@ -64,4 +64,68 @@ class Plugin
{ {
return '<P:aG>' . $result . '</P:aG>'; return '<P:aG>' . $result . '</P:aG>';
} }
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeV(Intercepted $subject, $param1)
{
return ['<P:bV/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundV(Intercepted $subject, \Closure $next, $param1)
{
return '<P:V>' . $param1 . '<P:V/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeW(Intercepted $subject, $param1)
{
return ['<P:bW/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundW(Intercepted $subject, \Closure $next, $param1)
{
return '<P:W>' . $param1 . '<P:W/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterW(Intercepted $subject, $result)
{
return '<P:aW/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeX(Intercepted $subject, $param1)
{
return ['<P:bX/>'];
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundY(Intercepted $subject, \Closure $next, $param1)
{
return '<P:Y>' . $param1 . '<P:Y/>';
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterZ(Intercepted $subject, $result)
{
return '<P:aZ/>';
}
} }
<?php <?php
/** /**
*
* Copyright © 2015 Magento. All rights reserved. * Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details. * See COPYING.txt for license details.
*/ */
...@@ -10,90 +9,30 @@ namespace Magento\Framework\Interception; ...@@ -10,90 +9,30 @@ namespace Magento\Framework\Interception;
* Class GeneralTest * Class GeneralTest
* @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/ */
class GeneralTest extends \PHPUnit_Framework_TestCase class GeneralTest extends AbstractPlugin
{ {
/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
protected $_configReader;
/**
* @var \Magento\Framework\ObjectManagerInterface
*/
protected $_objectManager;
public function setUp() public function setUp()
{ {
$config = new \Magento\Framework\Interception\ObjectManager\Config\Developer(); $this->setUpInterceptionConfig(
$factory = new \Magento\Framework\ObjectManager\Factory\Dynamic\Developer($config, null); [
'Magento\Framework\Interception\Fixture\InterceptedInterface' =>
$this->_configReader = $this->getMock('Magento\Framework\Config\ReaderInterface'); [
$this->_configReader->expects(
$this->any()
)->method(
'read'
)->will(
$this->returnValue(
[
'Magento\Framework\Interception\Fixture\InterceptedInterface' => [
'plugins' => [ 'plugins' => [
'first' => [ 'first' => [
'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\InterfacePlugin', 'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\InterfacePlugin',
'sortOrder' => 10, 'sortOrder' => 10,
], ],
], ],
], ],
'Magento\Framework\Interception\Fixture\Intercepted' => [ 'Magento\Framework\Interception\Fixture\Intercepted' =>
[
'plugins' => [ 'plugins' => [
'second' => [ 'second' => [
'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\Plugin', 'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\Plugin',
'sortOrder' => 20, 'sortOrder' => 20,
], ],
], ],
], ],
]
)
);
$areaList = $this->getMock('Magento\Framework\App\AreaList', [], [], '', false);
$areaList->expects($this->any())->method('getCodes')->will($this->returnValue([]));
$configScope = new \Magento\Framework\Config\Scope($areaList, 'global');
$cache = $this->getMock('Magento\Framework\Config\CacheInterface');
$cache->expects($this->any())->method('load')->will($this->returnValue(false));
$definitions = new \Magento\Framework\ObjectManager\Definition\Runtime();
$relations = new \Magento\Framework\ObjectManager\Relations\Runtime();
$interceptionConfig = new Config\Config(
$this->_configReader,
$configScope,
$cache,
$relations,
$config,
$definitions
);
$interceptionDefinitions = new Definition\Runtime();
$this->_objectManager = new \Magento\Framework\ObjectManager\ObjectManager(
$factory,
$config,
[
'Magento\Framework\Config\CacheInterface' => $cache,
'Magento\Framework\Config\ScopeInterface' => $configScope,
'Magento\Framework\Config\ReaderInterface' => $this->_configReader,
'Magento\Framework\ObjectManager\RelationsInterface' => $relations,
'Magento\Framework\ObjectManager\ConfigInterface' => $config,
'Magento\Framework\Interception\ObjectManager\ConfigInterface' => $config,
'Magento\Framework\ObjectManager\DefinitionInterface' => $definitions,
'Magento\Framework\Interception\DefinitionInterface' => $interceptionDefinitions
]
);
$factory->setObjectManager($this->_objectManager);
$config->setInterceptionConfig($interceptionConfig);
$config->extend(
[
'preferences' => [
'Magento\Framework\Interception\PluginListInterface' =>
'Magento\Framework\Interception\PluginList\PluginList',
'Magento\Framework\Interception\ChainInterface' => 'Magento\Framework\Interception\Chain\Chain',
],
] ]
); );
} }
......
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Interception;
/**
* Class TwoPluginTest
*/
class TwoPluginTest extends AbstractPlugin
{
public function setUp()
{
$this->setUpInterceptionConfig(
[
'Magento\Framework\Interception\Fixture\Intercepted' => [
'plugins' => [
'first' => [
'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\FirstPlugin',
'sortOrder' => 10,
], 'second' => [
'instance' => 'Magento\Framework\Interception\Fixture\Intercepted\Plugin',
'sortOrder' => 20,
]
],
]
]
);
}
public function testPluginBeforeWins()
{
$subject = $this->_objectManager->create('Magento\Framework\Interception\Fixture\Intercepted');
$this->assertEquals('<X><P:bX/></X>', $subject->X('test'));
}
public function testPluginAroundWins()
{
$subject = $this->_objectManager->create('Magento\Framework\Interception\Fixture\Intercepted');
$this->assertEquals('<F:Y>test<F:Y/>', $subject->Y('test'));
}
public function testPluginAfterWins()
{
$subject = $this->_objectManager->create('Magento\Framework\Interception\Fixture\Intercepted');
$this->assertEquals('<P:aZ/>', $subject->Z('test'));
}
public function testPluginBeforeAroundWins()
{
$subject = $this->_objectManager->create('Magento\Framework\Interception\Fixture\Intercepted');
$this->assertEquals('<F:V><F:bV/><F:V/>', $subject->V('test'));
}
public function testPluginBeforeAroundAfterWins()
{
$subject = $this->_objectManager->create('Magento\Framework\Interception\Fixture\Intercepted');
$this->assertEquals('<F:aW/>', $subject->W('test'));
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment