Skip to content

Commit 74b9029

Browse files
author
Alexander Paliarush
committed
MAGETWO-31931: Implement ExtensionInterface Code Generator
- Added extension interface generator - Refactored usages of _getFullyQualifiedClassName - Fixed namespace name generation
1 parent 3f80869 commit 74b9029

File tree

33 files changed

+299
-81
lines changed

33 files changed

+299
-81
lines changed

dev/tests/integration/testsuite/Magento/Framework/Code/_expected/SourceClassWithNamespaceFactory.php.sample

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class SourceClassWithNamespaceFactory
2929
* @param \Magento\Framework\ObjectManagerInterface $objectManager
3030
* @param string $instanceName
3131
*/
32-
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = 'Magento\\Framework\\Code\\GeneratorTest\\SourceClassWithNamespace')
32+
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = '\\Magento\\Framework\\Code\\GeneratorTest\\SourceClassWithNamespace')
3333
{
3434
$this->_objectManager = $objectManager;
3535
$this->_instanceName = $instanceName;

dev/tests/integration/testsuite/Magento/Framework/Code/_expected/SourceClassWithNamespaceProxy.php.sample

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class Proxy extends \Magento\Framework\Code\GeneratorTest\SourceClassWithNamespa
4444
* @param string $instanceName
4545
* @param bool $shared
4646
*/
47-
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = 'Magento\\Framework\\Code\\GeneratorTest\\SourceClassWithNamespace', $shared = true)
47+
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = '\\Magento\\Framework\\Code\\GeneratorTest\\SourceClassWithNamespace', $shared = true)
4848
{
4949
$this->_objectManager = $objectManager;
5050
$this->_instanceName = $instanceName;

dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Magento\Framework\ObjectManager\Code\Generator\Converter;
1515
use Magento\Framework\ObjectManager\Code\Generator\Factory;
1616
use Magento\Framework\ObjectManager\Code\Generator\Repository;
17+
use Magento\Framework\Api\Code\Generator\ObjectExtensionInterface;
1718

1819
/**
1920
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -326,7 +327,9 @@ public function testConstructorIntegrity()
326327
Repository::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Repository',
327328
Converter::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Converter',
328329
Mapper::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\Mapper',
329-
SearchResults::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\SearchResults'
330+
SearchResults::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\SearchResults',
331+
ObjectExtensionInterface::ENTITY_TYPE =>
332+
'Magento\Framework\Api\Code\Generator\ObjectExtensionInterface'
330333
]
331334
);
332335
$generationAutoloader = new \Magento\Framework\Code\Generator\Autoloader($generator);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Api\Code\Generator;
8+
9+
class ExtensionInterfaceGeneratorTest extends \PHPUnit_Framework_TestCase
10+
{
11+
public function testGenerate()
12+
{
13+
$objectManager = new \Magento\TestFramework\Helper\ObjectManager($this);
14+
$configReaderMock = $this->getMockBuilder('Magento\Framework\Api\Config\Reader')
15+
->disableOriginalConstructor()
16+
->getMock();
17+
$configReaderMock->expects($this->any())
18+
->method('read')
19+
->willReturn(
20+
[
21+
'Magento\Catalog\Api\Data\ProductInterface' => [
22+
'string_attribute' => 'string',
23+
'complex_object_attribute' => '\Magento\Bundle\Api\Data\OptionInterface[]'
24+
],
25+
'Magento\Catalog\Api\Data\Product' => [
26+
'should_not_include' => 'string',
27+
],
28+
]
29+
);
30+
31+
/** @var \Magento\Framework\Api\Code\Generator\ObjectExtensionInterface $model */
32+
$model = $objectManager->getObject(
33+
'Magento\Framework\Api\Code\Generator\ObjectExtensionInterface',
34+
[
35+
'configReader' => $configReaderMock,
36+
'sourceClassName' => '\Magento\Catalog\Api\Data\Product',
37+
'resultClassName' => '\Magento\Catalog\Api\Data\ProductExtensionInterface',
38+
'classGenerator' => null
39+
]
40+
);
41+
$expectedResult = file_get_contents(__DIR__ . '/_files/SampleExtensionInterface.txt');
42+
$reflectionObject = new \ReflectionObject($model);
43+
$reflectionMethod = $reflectionObject->getMethod('_generateCode');
44+
$reflectionMethod->setAccessible(true);
45+
$generatedCode = $reflectionMethod->invoke($model);
46+
$this->assertEquals($expectedResult, $generatedCode);
47+
}
48+
49+
public function testValidateException()
50+
{
51+
$objectManager = new \Magento\TestFramework\Helper\ObjectManager($this);
52+
/** @var \Magento\Framework\Api\Code\Generator\ObjectExtensionInterface $model */
53+
$model = $objectManager->getObject(
54+
'Magento\Framework\Api\Code\Generator\ObjectExtensionInterface',
55+
[
56+
'sourceClassName' => '\Magento\Catalog\Api\Data\Product',
57+
'resultClassName' => '\Magento\Catalog\Api\Data\ProductInterface'
58+
]
59+
);
60+
$reflectionObject = new \ReflectionObject($model);
61+
$reflectionMethod = $reflectionObject->getMethod('_validateData');
62+
$reflectionMethod->setAccessible(true);
63+
64+
$expectedValidationResult = false;
65+
$this->assertEquals($expectedValidationResult, $reflectionMethod->invoke($model));
66+
$this->assertTrue(
67+
in_array(
68+
'Invalid extension interface name [\Magento\Catalog\Api\Data\ProductInterface].'
69+
. ' Use \Magento\Catalog\Api\Data\ProductExtensionInterface',
70+
$model->getErrors()
71+
),
72+
'Expected validation error message is missing.'
73+
);
74+
}
75+
}

dev/tests/unit/testsuite/Magento/Framework/Api/Code/Generator/_files/SampleBuilder.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace \Magento\Framework\Api\Code\Generator;
1+
namespace Magento\Framework\Api\Code\Generator;
22

33
/**
44
* Builder class for @see \Magento\Framework\Api\Code\Generator\Sample
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace Magento\Catalog\Api\Data;
2+
3+
/**
4+
* ExtensionInterface class for @see \Magento\Catalog\Api\Data\ProductInterface
5+
*/
6+
interface ProductExtensionInterface
7+
{
8+
/**
9+
* @return string
10+
*/
11+
public function getStringAttribute();
12+
13+
/**
14+
* @return \Magento\Bundle\Api\Data\OptionInterface[]
15+
*/
16+
public function getComplexObjectAttribute();
17+
}

dev/tests/unit/testsuite/Magento/Framework/Api/Code/Generator/_files/SampleMapper.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace \Magento\Framework\Api\Code\Generator;
1+
namespace Magento\Framework\Api\Code\Generator;
22

33
/**
44
* Mapper class for @see \Magento\Framework\Api\Code\Generator\Sample
@@ -13,7 +13,7 @@ class SampleMapper
1313
protected $sampleBuilder = null;
1414

1515
/**
16-
* Magento\Framework\Api\Code\Generator\Sample[]
16+
* \Magento\Framework\Api\Code\Generator\Sample[]
1717
*
1818
* @var array
1919
*/

dev/tests/unit/testsuite/Magento/Framework/Api/Code/Generator/_files/SampleSearchResults.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace \Magento\Framework\Api\Code\Generator;
1+
namespace Magento\Framework\Api\Code\Generator;
22

33
class SampleSearchResults extends \Magento\Framework\Api\SearchResults
44
{

dev/tests/unit/testsuite/Magento/Framework/Api/Code/Generator/_files/SampleSearchResultsBuilder.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace \Magento\Framework\Api\Code\Generator;
1+
namespace Magento\Framework\Api\Code\Generator;
22

33
/**
44
* SearchResultsBuilder class for @see \Magento\Framework\Api\Code\Generator\Sample

dev/tests/unit/testsuite/Magento/Framework/Code/Generator/EntityAbstractTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
1010
/**#@+
1111
* Source and result class parameters
1212
*/
13-
const SOURCE_CLASS = 'Magento\Framework\Object';
13+
const SOURCE_CLASS = '\Magento\Framework\Object';
1414

15-
const RESULT_CLASS = 'Magento\Framework\Object_MyResult';
15+
const RESULT_CLASS = '\Magento\Framework\Object_MyResult';
1616

1717
const RESULT_FILE = 'MyResult/MyResult.php';
1818

0 commit comments

Comments
 (0)