Skip to content

Commit b156e3b

Browse files
committed
Merge branch 'MAGETWO-57975' into MPI-PR-Bugfixes
2 parents 1e19c93 + fe79e4a commit b156e3b

File tree

5 files changed

+170
-0
lines changed

5 files changed

+170
-0
lines changed

app/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@
674674
<type name="Magento\Framework\Code\Generator">
675675
<arguments>
676676
<argument name="generatedEntities" xsi:type="array">
677+
<item name="extensionInterfaceFactory" xsi:type="string">\Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceFactoryGenerator</item>
677678
<item name="factory" xsi:type="string">\Magento\Framework\ObjectManager\Code\Generator\Factory</item>
678679
<item name="proxy" xsi:type="string">\Magento\Framework\ObjectManager\Code\Generator\Proxy</item>
679680
<item name="interceptor" xsi:type="string">\Magento\Framework\Interception\Code\Generator\Interceptor</item>

dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@
55
*/
66
namespace Magento\Framework\Code;
77

8+
use Magento\Framework\Code\Generator;
89
use Magento\Framework\App\Filesystem\DirectoryList;
910
use Magento\Framework\Interception\Code\Generator as InterceptionGenerator;
1011
use Magento\Framework\ObjectManager\Code\Generator as DIGenerator;
12+
use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceFactoryGenerator;
13+
use Magento\TestFramework\Helper\Bootstrap;
1114

1215
require_once __DIR__ . '/GeneratorTest/SourceClassWithNamespace.php';
1316
require_once __DIR__ . '/GeneratorTest/ParentClassWithNamespace.php';
17+
require_once __DIR__ . '/GeneratorTest/SourceClassWithNamespaceExtension.php';
18+
1419
/**
1520
* @magentoAppIsolation enabled
1621
*/
@@ -51,6 +56,8 @@ protected function setUp()
5156
[
5257
'ioObject' => $this->_ioObject,
5358
'generatedEntities' => [
59+
ExtensionAttributesInterfaceFactoryGenerator::ENTITY_TYPE =>
60+
ExtensionAttributesInterfaceFactoryGenerator::class,
5461
DIGenerator\Factory::ENTITY_TYPE => \Magento\Framework\ObjectManager\Code\Generator\Factory::class,
5562
DIGenerator\Proxy::ENTITY_TYPE => \Magento\Framework\ObjectManager\Code\Generator\Proxy::class,
5663
InterceptionGenerator\Interceptor::ENTITY_TYPE =>
@@ -148,4 +155,34 @@ public function testGenerateClassInterceptorWithNamespace()
148155
$this->assertEquals($expectedContent, $content);
149156
}
150157
}
158+
159+
/**
160+
* Generates a new file with ExtensionInterfaceFactory class and compares with the sample from the
161+
* SourceClassWithNamespaceExtensionInterfaceFactory.php.sample file.
162+
*/
163+
public function testGenerateClassExtensionAttributesInterfaceFactoryWithNamespace()
164+
{
165+
$factoryClassName = self::CLASS_NAME_WITH_NAMESPACE . 'ExtensionInterfaceFactory';
166+
$this->varDirectory->create(
167+
$this->varDirectory->getAbsolutePath('generation') . '/Magento/Framework/Code/GeneratorTest/'
168+
);
169+
170+
$generatorResult = $this->_generator->generateClass($factoryClassName);
171+
172+
$factory = Bootstrap::getObjectManager()->create($factoryClassName);
173+
$object = $factory->create();
174+
175+
$this->assertEquals($generatorResult, Generator::GENERATION_SUCCESS);
176+
$this->assertInstanceOf(self::CLASS_NAME_WITH_NAMESPACE . 'Extension', $object);
177+
178+
$content = $this->_clearDocBlock(
179+
file_get_contents(
180+
$this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . 'ExtensionInterfaceFactory')
181+
)
182+
);
183+
$expectedContent = $this->_clearDocBlock(
184+
file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceExtensionInterfaceFactory.php.sample')
185+
);
186+
$this->assertEquals($expectedContent, $content);
187+
}
151188
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Code\GeneratorTest;
8+
9+
/**
10+
* Source class for ExtensionInterfaceFactory generator.
11+
*/
12+
class SourceClassWithNamespaceExtension extends ParentClassWithNamespace
13+
{
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
namespace Magento\Framework\Code\GeneratorTest;
3+
4+
/**
5+
* Factory class for @see \Magento\Framework\Code\GeneratorTest\SourceClassWithNamespaceExtension
6+
*
7+
* Copyright © Magento, Inc. All rights reserved.
8+
* See COPYING.txt for license details.
9+
*/
10+
class SourceClassWithNamespaceExtensionInterfaceFactory
11+
{
12+
/**
13+
* Object Manager instance
14+
*
15+
* @var \Magento\Framework\ObjectManagerInterface
16+
*/
17+
protected $_objectManager = null;
18+
19+
/**
20+
* Instance name to create
21+
*
22+
* @var string
23+
*/
24+
protected $_instanceName = null;
25+
26+
/**
27+
* ExtensionInterfaceFactory constructor
28+
*
29+
* @param \Magento\Framework\ObjectManagerInterface $objectManager
30+
* @param string $instanceName
31+
*/
32+
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = '\\Magento\\Framework\\Code\\GeneratorTest\\SourceClassWithNamespaceExtension')
33+
{
34+
$this->_objectManager = $objectManager;
35+
$this->_instanceName = $instanceName;
36+
}
37+
38+
/**
39+
* Create class instance with specified parameters
40+
*
41+
* @param array $data
42+
* @return \Magento\Framework\Code\GeneratorTest\SourceClassWithNamespaceExtension
43+
*/
44+
public function create(array $data = array())
45+
{
46+
return $this->_objectManager->create($this->_instanceName, $data);
47+
}
48+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Api\Code\Generator;
8+
9+
use Magento\Framework\ObjectManager\Code\Generator\Factory;
10+
use Magento\Framework\Code\Generator\DefinedClasses;
11+
use Magento\Framework\Code\Generator\Io;
12+
use Magento\Framework\Code\Generator\CodeGeneratorInterface;
13+
14+
class ExtensionAttributesInterfaceFactoryGenerator extends Factory
15+
{
16+
/**
17+
* {@inheritdoc}
18+
*/
19+
const ENTITY_TYPE = 'extensionInterfaceFactory';
20+
21+
/**
22+
* @var string
23+
*/
24+
private static $suffix = 'InterfaceFactory';
25+
26+
/**
27+
* Initialize dependencies.
28+
*
29+
* @param string|null $sourceClassName
30+
* @param string|null $resultClassName
31+
* @param Io $ioObject
32+
* @param CodeGeneratorInterface $classGenerator
33+
* @param DefinedClasses $definedClasses
34+
*/
35+
public function __construct(
36+
$sourceClassName = null,
37+
$resultClassName = null,
38+
Io $ioObject = null,
39+
CodeGeneratorInterface $classGenerator = null,
40+
DefinedClasses $definedClasses = null
41+
) {
42+
$sourceClassName .= 'Extension';
43+
parent::__construct(
44+
$sourceClassName,
45+
$resultClassName,
46+
$ioObject,
47+
$classGenerator,
48+
$definedClasses
49+
);
50+
}
51+
52+
/**
53+
* {@inheritdoc}
54+
*/
55+
protected function _validateData()
56+
{
57+
$result = true;
58+
$sourceClassName = $this->getSourceClassName();
59+
$resultClassName = $this->_getResultClassName();
60+
61+
if ($resultClassName !== $sourceClassName . self::$suffix) {
62+
$this->_addError(
63+
'Invalid Factory class name [' . $resultClassName . ']. Use ' . $sourceClassName . self::$suffix
64+
);
65+
$result = false;
66+
}
67+
68+
return $result;
69+
}
70+
}

0 commit comments

Comments
 (0)