Skip to content

Commit 6028e0a

Browse files
author
Bibu Mathew
committed
MAGETWO-30809: Compiled definitions can cause unexpected errors compared to runtime definitions
- Updated getParemeters logic to check if key is defined or not - added unit test method
1 parent 84e5178 commit 6028e0a

File tree

2 files changed

+29
-2
lines changed
  • dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Definition/Compiled
  • lib/internal/Magento/Framework/ObjectManager/Definition

2 files changed

+29
-2
lines changed

dev/tests/unit/testsuite/Magento/Framework/ObjectManager/Definition/Compiled/SerializedTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,30 @@ public function testGetParametersWithUnpacking()
3131
$model = new \Magento\Framework\ObjectManager\Definition\Compiled\Serialized([$signatures, $definitions]);
3232
$this->assertEquals($checkString, $model->getParameters('wonderful'));
3333
}
34+
35+
public function testGetParametersWithUndefinedDefinition()
36+
{
37+
$objectManager = new \Magento\TestFramework\Helper\ObjectManager($this);
38+
$undefinedDefinitionSignature = new \stdClass();
39+
$className = 'undefinedDefinition';
40+
$readerMock = $this->getMock(
41+
'\Magento\Framework\Code\Reader\ClassReader',
42+
['getConstructor'],
43+
[],
44+
'',
45+
false
46+
);
47+
$readerMock->expects($this->once())
48+
->method('getConstructor')
49+
->with($className)
50+
->willReturn($undefinedDefinitionSignature);
51+
$model = $objectManager->getObject(
52+
'Magento\Framework\ObjectManager\Definition\Compiled\Serialized',
53+
[
54+
'definitions' => [[], []],
55+
'reader' => $readerMock
56+
]
57+
);
58+
$this->assertEquals($undefinedDefinitionSignature, $model->getParameters($className));
59+
}
3460
}

lib/internal/Magento/Framework/ObjectManager/Definition/Compiled.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ abstract class Compiled implements \Magento\Framework\ObjectManager\DefinitionIn
2323

2424
/**
2525
* @param array $definitions
26+
* @param \Magento\Framework\Code\Reader\ClassReader $reader
2627
*/
2728
public function __construct(array $definitions, \Magento\Framework\Code\Reader\ClassReader $reader = null)
2829
{
@@ -56,8 +57,8 @@ abstract protected function _unpack($signature);
5657
*/
5758
public function getParameters($className)
5859
{
59-
// if the definition isn't found in the list gathered from the compiled file using reflection to find it
60-
if (!isset($this->_definitions[$className])) {
60+
// if the definition isn't found in the list gathered from the compiled file then using reflection to find it
61+
if (!array_key_exists($className,$this->_definitions)) {
6162
return $this->reader->getConstructor($className);
6263
}
6364

0 commit comments

Comments
 (0)