Skip to content

Commit 2acccd7

Browse files
authored
Merge pull request #874 from magento-cloud/MAGETWO-51176-om
[Cloud] MAGETWO-51176 ST compiler supplies ObjectManagerInterface to direct third party dependencies
2 parents f59e74c + 8498e12 commit 2acccd7

File tree

17 files changed

+898
-126
lines changed

17 files changed

+898
-126
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\ObjectManager\Factory;
8+
9+
use Magento\Framework\ObjectManager\TestAsset\Basic;
10+
use Magento\Framework\ObjectManager\TestAsset\BasicInjection;
11+
use Magento\Framework\ObjectManager\TestAsset\ComplexDependencies;
12+
use Magento\Framework\ObjectManager\TestAsset\ConstructorNineArguments;
13+
use Magento\Framework\ObjectManager\TestAsset\DependsOnAlias;
14+
use Magento\Framework\ObjectManager\TestAsset\DependsOnInterface;
15+
use Magento\Framework\ObjectManager\TestAsset\HasOptionalParameters;
16+
use Magento\Framework\ObjectManager\TestAsset\TestAssetInterface;
17+
18+
abstract class AbstractFactoryRuntimeDefinitionsTestCases extends \PHPUnit_Framework_TestCase
19+
{
20+
const ALIAS_OVERRIDDEN_STRING = 'overridden';
21+
const ALIAS_OVERRIDDEN_INT = 99;
22+
23+
/** @var ComplexDependencies */
24+
protected $complexDependenciesObject;
25+
26+
/** @var AbstractFactory */
27+
protected $factory;
28+
29+
/**
30+
* Child test cases should create this object using the type of factory they are testing
31+
*
32+
* @return AbstractFactory
33+
*/
34+
abstract protected function createFactoryToTest();
35+
36+
public function setUp()
37+
{
38+
$this->factory = $this->createFactoryToTest();
39+
40+
/**
41+
* Test creates one object which depends on all the other kind of objects whose creation we need to test. This
42+
* means the test can not only test creating each of the varied constructor scenarios (e.g., a class with
43+
* optional constructor parameters) but also test creating an object which *depends* on each of the varied
44+
* scenarios.
45+
*/
46+
$this->complexDependenciesObject = $this->factory->create(ComplexDependencies::class);
47+
}
48+
49+
public function testCreateComplexDependencies()
50+
{
51+
$this->assertInstanceOf(ComplexDependencies::class, $this->complexDependenciesObject);
52+
}
53+
54+
public function testCreateBasic()
55+
{
56+
$this->assertInstanceOf(Basic::class, $this->complexDependenciesObject->getBasic());
57+
}
58+
59+
public function testCreateBasicInjection()
60+
{
61+
$this->assertInstanceOf(BasicInjection::class, $this->complexDependenciesObject->getBasicInjection());
62+
$this->assertInstanceOf(
63+
Basic::class,
64+
$this->complexDependenciesObject->getBasicInjection()->getBasicDependency()
65+
);
66+
}
67+
68+
public function testCreateInterface()
69+
{
70+
$this->assertInstanceOf(TestAssetInterface::class, $this->complexDependenciesObject->getTestAssetInterface());
71+
}
72+
73+
public function testCreateConstructorNestedInjection()
74+
{
75+
$this->assertInstanceOf(
76+
ConstructorNineArguments::class,
77+
$this->complexDependenciesObject->getConstructorNineArguments()
78+
);
79+
$this->assertInstanceOf(
80+
Basic::class,
81+
$this->complexDependenciesObject->getConstructorNineArguments()->getBasicDependency()
82+
);
83+
}
84+
85+
public function testCreateObjectDependsOnInterface()
86+
{
87+
$this->assertInstanceOf(DependsOnInterface::class, $this->complexDependenciesObject->getDependsOnInterface());
88+
$this->assertInstanceOf(
89+
TestAssetInterface::class,
90+
$this->complexDependenciesObject->getDependsOnInterface()->getInterfaceDependency()
91+
);
92+
}
93+
94+
public function testCreateObjectHasOptionalParameters()
95+
{
96+
$this->assertInstanceOf(
97+
HasOptionalParameters::class,
98+
$this->complexDependenciesObject->getHasOptionalParameters()
99+
);
100+
$this->assertEquals(
101+
HasOptionalParameters::CONSTRUCTOR_INT_PARAM_DEFAULT,
102+
$this->complexDependenciesObject->getHasOptionalParameters()->getOptionalIntegerParameter()
103+
);
104+
$this->assertEquals(
105+
HasOptionalParameters::CONSTRUCTOR_STRING_PARAM_DEFAULT,
106+
$this->complexDependenciesObject->getHasOptionalParameters()->getOptionalStringParameter()
107+
);
108+
$this->assertInstanceOf(
109+
TestAssetInterface::class,
110+
$this->complexDependenciesObject->getHasOptionalParameters()->getRequiredInterfaceParam()
111+
);
112+
$this->assertInstanceOf(
113+
Basic::class,
114+
$this->complexDependenciesObject->getHasOptionalParameters()->getRequiredObjectParameter()
115+
);
116+
}
117+
118+
public function testCreateObjectDependsOnAlias()
119+
{
120+
$this->assertInstanceOf(DependsOnAlias::class, $this->complexDependenciesObject->getDependsOnAlias());
121+
$this->assertEquals(
122+
self::ALIAS_OVERRIDDEN_STRING,
123+
$this->complexDependenciesObject->getDependsOnAlias()->getOverriddenString()
124+
);
125+
$this->assertEquals(
126+
self::ALIAS_OVERRIDDEN_INT,
127+
$this->complexDependenciesObject->getDependsOnAlias()->getOverRiddenInteger()
128+
);
129+
}
130+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\ObjectManager\Factory;
8+
9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\Interception\ObjectManager\Config\Compiled as CompiledConfig;
11+
use Magento\Framework\ObjectManager\TestAsset\Basic;
12+
use Magento\Framework\ObjectManager\TestAsset\DependsOnAlias;
13+
use Magento\Framework\ObjectManager\TestAsset\HasOptionalParameters;
14+
use Magento\Framework\ObjectManager\TestAsset\InterfaceImplementation;
15+
use Magento\Framework\ObjectManager\TestAsset\TestAssetInterface;
16+
17+
class CompiledTest extends AbstractFactoryRuntimeDefinitionsTestCases
18+
{
19+
/**
20+
* Child test cases should create this object using the type of factory they are testing
21+
*
22+
* @return AbstractFactory
23+
*/
24+
protected function createFactoryToTest()
25+
{
26+
$diConfig = [
27+
'arguments' => [
28+
'Alias' => [
29+
'requiredInterfaceParameter' => ['_i_' => InterfaceImplementation::class],
30+
'requiredObjectParameter' => ['_i_' => Basic::class],
31+
'optionalInterfaceParameter' => ['_i_' => InterfaceImplementation::class],
32+
'optionalObjectParameter' => ['_i_' => Basic::class],
33+
'optionalStringParameter' => ['_v_' => self::ALIAS_OVERRIDDEN_STRING],
34+
'optionalIntegerParameter' => ['_v_' => self::ALIAS_OVERRIDDEN_INT],
35+
],
36+
DependsOnAlias::class => [
37+
'object' => ['_i_' => 'Alias']
38+
],
39+
],
40+
'instanceTypes' => [
41+
'Alias' => HasOptionalParameters::class
42+
],
43+
'preferences' => [
44+
TestAssetInterface::class => InterfaceImplementation::class
45+
]
46+
];
47+
48+
$compiledConfig = new CompiledConfig($diConfig);
49+
$factory = new Compiled($compiledConfig);
50+
$factory->setObjectManager(new ObjectManager($factory, $compiledConfig));
51+
return $factory;
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\ObjectManager\Factory\Dynamic;
8+
9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\ObjectManager\Factory\AbstractFactory;
11+
use Magento\Framework\ObjectManager\Factory\AbstractFactoryRuntimeDefinitionsTestCases;
12+
use Magento\Framework\ObjectManager\TestAsset\Basic;
13+
use Magento\Framework\ObjectManager\TestAsset\DependsOnAlias;
14+
use Magento\Framework\ObjectManager\TestAsset\HasOptionalParameters;
15+
use Magento\Framework\ObjectManager\TestAsset\InterfaceImplementation;
16+
use Magento\Framework\ObjectManager\TestAsset\TestAssetInterface;
17+
18+
class DeveloperTest extends AbstractFactoryRuntimeDefinitionsTestCases
19+
{
20+
/**
21+
* Child test cases should create this object using the type of factory they are testing
22+
*
23+
* @return AbstractFactory
24+
*/
25+
protected function createFactoryToTest()
26+
{
27+
$runtimeDiConfig = [
28+
'preferences' => [
29+
TestAssetInterface::class => InterfaceImplementation::class
30+
],
31+
'Alias' => [
32+
'type' => HasOptionalParameters::class,
33+
'arguments' => [
34+
'requiredInterfaceParameter' => ['instance' => InterfaceImplementation::class],
35+
'requiredObjectParameter' => ['instance' => Basic::class],
36+
'optionalInterfaceParameter' => ['instance' => InterfaceImplementation::class],
37+
'optionalObjectParameter' => ['instance' => Basic::class],
38+
'optionalStringParameter' => self::ALIAS_OVERRIDDEN_STRING,
39+
'optionalIntegerParameter' => self::ALIAS_OVERRIDDEN_INT,
40+
]
41+
],
42+
DependsOnAlias::class => [
43+
'arguments' => [
44+
'object' => ['instance' => 'Alias']
45+
]
46+
]
47+
];
48+
49+
$runtimeConfig = new \Magento\Framework\Interception\ObjectManager\Config\Developer();
50+
$runtimeConfig->extend($runtimeDiConfig);
51+
$factory = new \Magento\Framework\ObjectManager\Factory\Dynamic\Developer($runtimeConfig);
52+
$factory->setObjectManager(new ObjectManager($factory, $runtimeConfig));
53+
return $factory;
54+
}
55+
}

dev/tests/integration/testsuite/Magento/Framework/ObjectManager/TestAsset/BasicAlias.php

-10
This file was deleted.

dev/tests/integration/testsuite/Magento/Framework/ObjectManager/TestAsset/BasicInjection.php

+5
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,9 @@ public function __construct(\Magento\Framework\ObjectManager\TestAsset\Basic $ob
1919
{
2020
$this->_object = $object;
2121
}
22+
23+
public function getBasicDependency()
24+
{
25+
return $this->_object;
26+
}
2227
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\ObjectManager\TestAsset;
7+
8+
class ComplexDependencies
9+
{
10+
/**
11+
* @var Basic
12+
*/
13+
private $basic;
14+
15+
/**
16+
* @var BasicInjection
17+
*/
18+
private $basicInjection;
19+
20+
/**
21+
* @var DependsOnInterface
22+
*/
23+
private $dependsOnInterface;
24+
25+
/**
26+
* @var HasOptionalParameters
27+
*/
28+
private $hasOptionalParameters;
29+
30+
/**
31+
* @var TestAssetInterface
32+
*/
33+
private $testAssetInterface;
34+
35+
/**
36+
* @var ConstructorNineArguments
37+
*/
38+
private $constructorNineArguments;
39+
40+
/**
41+
* @var DependsOnAlias
42+
*/
43+
private $dependsOnAlias;
44+
45+
/**
46+
* @param Basic $basic
47+
* @param BasicInjection $basicInjection
48+
* @param DependsOnInterface $dependsOnInterface
49+
* @param HasOptionalParameters $hasOptionalParameters
50+
* @param TestAssetInterface $testAssetInterface
51+
* @param ConstructorNineArguments $constructorNineArguments
52+
* @param DependsOnAlias $dependsOnAlias
53+
*/
54+
public function __construct(
55+
\Magento\Framework\ObjectManager\TestAsset\Basic $basic,
56+
\Magento\Framework\ObjectManager\TestAsset\BasicInjection $basicInjection,
57+
\Magento\Framework\ObjectManager\TestAsset\DependsOnInterface $dependsOnInterface,
58+
\Magento\Framework\ObjectManager\TestAsset\HasOptionalParameters $hasOptionalParameters,
59+
\Magento\Framework\ObjectManager\TestAsset\TestAssetInterface $testAssetInterface,
60+
\Magento\Framework\ObjectManager\TestAsset\ConstructorNineArguments $constructorNineArguments,
61+
DependsOnAlias $dependsOnAlias
62+
) {
63+
$this->basic = $basic;
64+
$this->basicInjection = $basicInjection;
65+
$this->dependsOnInterface = $dependsOnInterface;
66+
$this->hasOptionalParameters = $hasOptionalParameters;
67+
$this->testAssetInterface = $testAssetInterface;
68+
$this->constructorNineArguments = $constructorNineArguments;
69+
$this->dependsOnAlias = $dependsOnAlias;
70+
}
71+
72+
/**
73+
* @return DependsOnAlias
74+
*/
75+
public function getDependsOnAlias()
76+
{
77+
return $this->dependsOnAlias;
78+
}
79+
80+
/**
81+
* @return Basic
82+
*/
83+
public function getBasic()
84+
{
85+
return $this->basic;
86+
}
87+
88+
/**
89+
* @return BasicInjection
90+
*/
91+
public function getBasicInjection()
92+
{
93+
return $this->basicInjection;
94+
}
95+
96+
/**
97+
* @return DependsOnInterface
98+
*/
99+
public function getDependsOnInterface()
100+
{
101+
return $this->dependsOnInterface;
102+
}
103+
104+
/**
105+
* @return HasOptionalParameters
106+
*/
107+
public function getHasOptionalParameters()
108+
{
109+
return $this->hasOptionalParameters;
110+
}
111+
112+
/**
113+
* @return TestAssetInterface
114+
*/
115+
public function getTestAssetInterface()
116+
{
117+
return $this->testAssetInterface;
118+
}
119+
120+
/**
121+
* @return ConstructorNineArguments
122+
*/
123+
public function getConstructorNineArguments()
124+
{
125+
return $this->constructorNineArguments;
126+
}
127+
}

0 commit comments

Comments
 (0)