108 lines
4.2 KiB
PHP
Executable File
108 lines
4.2 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Framework\Interception;
|
|
|
|
/**
|
|
* Class GeneralTest
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class GeneralTest extends AbstractPlugin
|
|
{
|
|
protected function setUp(): void
|
|
{
|
|
$this->setUpInterceptionConfig(
|
|
[\Magento\Framework\Interception\Fixture\InterceptedInterface::class =>
|
|
[
|
|
'plugins' => [
|
|
'first' => [
|
|
'instance' =>
|
|
\Magento\Framework\Interception\Fixture\Intercepted\InterfacePlugin::class,
|
|
'sortOrder' => 10,
|
|
],
|
|
],
|
|
], \Magento\Framework\Interception\Fixture\Intercepted::class =>
|
|
[
|
|
'plugins' => [
|
|
'second' => [
|
|
'instance' => \Magento\Framework\Interception\Fixture\Intercepted\Plugin::class,
|
|
'sortOrder' => 20,
|
|
],
|
|
],
|
|
],
|
|
]
|
|
);
|
|
|
|
parent::setUp();
|
|
}
|
|
|
|
public function testMethodCanBePluginized()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<P:D>1: <D>test</D></P:D>', $subject->D('test'));
|
|
}
|
|
|
|
public function testPluginCanCallOnlyNextMethodOnNext()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals(
|
|
'<IP:aG><P:aG><G><P:G><P:bG><IP:G><IP:bG>test</IP:bG></IP:G></P:bG></P:G></G></P:aG></IP:aG>',
|
|
$subject->G('test')
|
|
);
|
|
}
|
|
|
|
public function testBeforeAndAfterPluginsAreExecuted()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals(
|
|
'<IP:F><P:D>1: <D>prefix_<F><IP:C><P:C><C>test</C></P:C>' . '</IP:C></F></D></P:D></IP:F>',
|
|
$subject->A('prefix_')->F('test')
|
|
);
|
|
}
|
|
|
|
public function testPluginCallsOtherMethodsOnSubject()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals(
|
|
'<P:K><IP:F><P:D>1: <D>prefix_<F><IP:C><P:C><C><IP:C><P:C><C>test' .
|
|
'</C></P:C></IP:C></C></P:C></IP:C></F></D></P:D></IP:F></P:K>',
|
|
$subject->A('prefix_')->K('test')
|
|
);
|
|
}
|
|
|
|
public function testInterfacePluginsAreInherited()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<IP:C><P:C><C>test</C></P:C></IP:C>', $subject->C('test'));
|
|
}
|
|
|
|
public function testInternalMethodCallsAreIntercepted()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<B>12<IP:C><P:C><C>1</C></P:C></IP:C></B>', $subject->B('1', '2'));
|
|
}
|
|
|
|
public function testChainedMethodsAreIntercepted()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<P:D>1: <D>prefix_test</D></P:D>', $subject->A('prefix_')->D('test'));
|
|
}
|
|
|
|
public function testFinalMethodWorks()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<P:D>1: <D>prefix_test</D></P:D>', $subject->A('prefix_')->D('test'));
|
|
$this->assertEquals('<E>prefix_final</E>', $subject->E('final'));
|
|
$this->assertEquals('<P:D>2: <D>prefix_test</D></P:D>', $subject->D('test'));
|
|
}
|
|
|
|
public function testObjectKeepsStateBetweenInvocations()
|
|
{
|
|
$subject = $this->_objectManager->create(\Magento\Framework\Interception\Fixture\Intercepted::class);
|
|
$this->assertEquals('<P:D>1: <D>test</D></P:D>', $subject->D('test'));
|
|
$this->assertEquals('<P:D>2: <D>test</D></P:D>', $subject->D('test'));
|
|
}
|
|
}
|