Skip to content

Commit 2e90ff8

Browse files
author
Dale Sikkema
committed
MAGETWO-47009: Github #2674 Plugins/Interceptors Don't Work with Early Stage Single Instance Objects in Developer Mode
- 2.0.1 release
1 parent f329397 commit 2e90ff8

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

lib/internal/Magento/Framework/App/ObjectManager/Environment/Developer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public function getObjectManagerConfigLoader()
6262
*/
6363
public function configureObjectManager(ConfigInterface $diConfig, &$sharedInstances)
6464
{
65+
$originalSharedInstances = $sharedInstances;
6566
$objectManager = ObjectManager::getInstance();
6667
$sharedInstances['Magento\Framework\ObjectManager\ConfigLoaderInterface'] = $objectManager
6768
->get('Magento\Framework\App\ObjectManager\ConfigLoader');
@@ -80,5 +81,9 @@ public function configureObjectManager(ConfigInterface $diConfig, &$sharedInstan
8081
$diConfig->setInterceptionConfig(
8182
$objectManager->get('Magento\Framework\Interception\Config\Config')
8283
);
84+
/** Reset the shared instances once interception config is set so classes can be intercepted if necessary */
85+
$sharedInstances = $originalSharedInstances;
86+
$sharedInstances['Magento\Framework\ObjectManager\ConfigLoaderInterface'] = $objectManager
87+
->get('Magento\Framework\App\ObjectManager\ConfigLoader');
8388
}
8489
}

lib/internal/Magento/Framework/App/Test/Unit/ObjectManager/Environment/DeveloperTest.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Framework\App\Test\Unit\ObjectManager\Environment;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Framework\App\ObjectManager\Environment\Developer;
910

1011
class DeveloperTest extends \PHPUnit_Framework_TestCase
@@ -29,4 +30,61 @@ public function testGetObjectManagerConfigLoader()
2930
{
3031
$this->assertNull($this->_developer->getObjectManagerConfigLoader());
3132
}
33+
34+
public function testConfigureObjectManager()
35+
{
36+
try {
37+
$origObjectManager = ObjectManager::getInstance();
38+
} catch (\Exception $e) {
39+
$origObjectManager = null;
40+
}
41+
42+
43+
$objectManagerMock = $this->getMockBuilder('Magento\Framework\App\ObjectManager')
44+
->disableOriginalConstructor()
45+
->getMock();
46+
ObjectManager::setInstance($objectManagerMock);
47+
$diConfigMock = $this->getMockBuilder('\Magento\Framework\Interception\ObjectManager\ConfigInterface')
48+
->disableOriginalConstructor()
49+
->getMock();
50+
51+
$configLoaderMock = $this->getMockBuilder('Magento\Framework\App\ObjectManager\ConfigLoader')
52+
->disableOriginalConstructor()
53+
->getMock();
54+
$configLoaderMock->expects($this->any())->method('load')->willReturn([]);
55+
$omReturnMap = [
56+
['Magento\Framework\App\ObjectManager\ConfigLoader', $configLoaderMock],
57+
[
58+
'Magento\Framework\Config\ScopeInterface',
59+
$this->getMockBuilder('Magento\Framework\Config\ScopeInterface')
60+
->disableOriginalConstructor()
61+
->getMock()
62+
],
63+
[
64+
'Magento\Framework\App\ObjectManager\ConfigCache',
65+
$this->getMockBuilder('Magento\Framework\App\ObjectManager\ConfigCache')
66+
->disableOriginalConstructor()
67+
->getMock()
68+
],
69+
[
70+
'Magento\Framework\Interception\Config\Config',
71+
$this->getMockBuilder('Magento\Framework\Interception\Config\Config')
72+
->disableOriginalConstructor()
73+
->getMock()
74+
]
75+
];
76+
$objectManagerMock->expects($this->any())->method('get')->willReturnMap($omReturnMap);
77+
78+
$sharedInstances = ['class_name' => 'shared_object'];
79+
$this->_developer->configureObjectManager($diConfigMock, $sharedInstances);
80+
81+
$expectedSharedInstances = [
82+
'class_name' => 'shared_object',
83+
'Magento\Framework\ObjectManager\ConfigLoaderInterface' => $configLoaderMock
84+
];
85+
$this->assertSame($expectedSharedInstances, $sharedInstances);
86+
if (isset($origObjectManager)) {
87+
ObjectManager::setInstance($origObjectManager);
88+
}
89+
}
3290
}

0 commit comments

Comments
 (0)