TestData
2 years ago
BasicTest.php
5 years ago
CallTest.php
5 years ago
ChainTest.php
5 years ago
ConstructParamsTest.php
5 years ago
CreateArgsTest.php
5 years ago
DiceTest.php
5 years ago
NamedInstancesTest.php
5 years ago
NamespaceTest.php
5 years ago
ShareInstancesTest.php
2 years ago
SubstitutionsTest.php
5 years ago
bootstrap.php
5 years ago
NamedInstancesTest.php
142 lines
| 1 | <?php |
| 2 | /* @description Dice - A minimal Dependency Injection Container for PHP * |
| 3 | * @author Tom Butler tom@r.je * |
| 4 | * @copyright 2012-2018 Tom Butler <tom@r.je> | https:// r.je/dice.html * |
| 5 | * @license http:// www.opensource.org/licenses/bsd-license.php BSD License * |
| 6 | * @version 3.0 */ |
| 7 | class NamedInstancesTest extends DiceTest { |
| 8 | public function testMultipleSharedInstancesByNameMixed() { |
| 9 | $rule = []; |
| 10 | $rule['shared'] = true; |
| 11 | $rule['constructParams'][] = 'FirstY'; |
| 12 | |
| 13 | $dice = $this->dice->addRule('Y', $rule); |
| 14 | |
| 15 | $rule = []; |
| 16 | $rule['instanceOf'] = 'Y'; |
| 17 | $rule['shared'] = true; |
| 18 | $rule['inherit'] = false; |
| 19 | $rule['constructParams'][] = 'SecondY'; |
| 20 | |
| 21 | $dice = $dice->addRule('[Y2]', $rule); |
| 22 | |
| 23 | $rule = []; |
| 24 | $rule['constructParams'] = [ [\Dice\Dice::INSTANCE => 'Y'], [\Dice\Dice::INSTANCE => '[Y2]']]; |
| 25 | |
| 26 | $dice = $dice->addRule('Z', $rule); |
| 27 | |
| 28 | $z = $dice->create('Z'); |
| 29 | $this->assertEquals($z->y1->name, 'FirstY'); |
| 30 | $this->assertEquals($z->y2->name, 'SecondY'); |
| 31 | } |
| 32 | |
| 33 | public function testNonSharedComponentByNameA() { |
| 34 | $rule = []; |
| 35 | $rule['instanceOf'] = 'ExtendedB'; |
| 36 | $dice = $this->dice->addRule('$B', $rule); |
| 37 | |
| 38 | $rule = []; |
| 39 | $rule['constructParams'][] = [\Dice\Dice::INSTANCE => '$B']; |
| 40 | $dice = $dice->addRule('A', $rule); |
| 41 | |
| 42 | $a = $dice->create('A'); |
| 43 | $this->assertInstanceOf('ExtendedB', $a->b); |
| 44 | } |
| 45 | |
| 46 | public function testNonSharedComponentByName() { |
| 47 | |
| 48 | $rule = []; |
| 49 | $rule['instanceOf'] = 'Y3'; |
| 50 | $rule['constructParams'][] = 'test'; |
| 51 | |
| 52 | |
| 53 | $dice = $this->dice->addRule('$Y2', $rule); |
| 54 | |
| 55 | |
| 56 | $y2 = $dice->create('$Y2'); |
| 57 | //echo $y2->name; |
| 58 | $this->assertInstanceOf('Y3', $y2); |
| 59 | |
| 60 | $rule = []; |
| 61 | |
| 62 | $rule['constructParams'][] = [\Dice\Dice::INSTANCE => '$Y2']; |
| 63 | $dice = $dice->addRule('Y1', $rule); |
| 64 | |
| 65 | $y1 = $dice->create('Y1'); |
| 66 | $this->assertInstanceOf('Y3', $y1->y2); |
| 67 | } |
| 68 | |
| 69 | public function testSubstitutionByName() { |
| 70 | $rule = []; |
| 71 | $rule['instanceOf'] = 'ExtendedB'; |
| 72 | $dice = $this->dice->addRule('$B', $rule); |
| 73 | |
| 74 | $rule = []; |
| 75 | $rule['substitutions']['B'] = [\Dice\Dice::INSTANCE => '$B']; |
| 76 | |
| 77 | $dice = $dice->addRule('A', $rule); |
| 78 | $a = $dice->create('A'); |
| 79 | |
| 80 | $this->assertInstanceOf('ExtendedB', $a->b); |
| 81 | } |
| 82 | |
| 83 | public function testMultipleSubstitutions() { |
| 84 | $rule = []; |
| 85 | $rule['instanceOf'] = 'Y2'; |
| 86 | $rule['constructParams'][] = 'first'; |
| 87 | $dice = $this->dice->addRule('$Y2A', $rule); |
| 88 | |
| 89 | $rule = []; |
| 90 | $rule['instanceOf'] = 'Y2'; |
| 91 | $rule['constructParams'][] = 'second'; |
| 92 | $dice = $dice->addRule('$Y2B', $rule); |
| 93 | |
| 94 | $rule = []; |
| 95 | $rule['constructParams'] = array([\Dice\Dice::INSTANCE => '$Y2A'], [\Dice\Dice::INSTANCE => '$Y2B']); |
| 96 | $dice = $dice->addRule('HasTwoSameDependencies', $rule); |
| 97 | |
| 98 | $twodep = $dice->create('HasTwoSameDependencies'); |
| 99 | |
| 100 | $this->assertEquals('first', $twodep->y2a->name); |
| 101 | $this->assertEquals('second', $twodep->y2b->name); |
| 102 | } |
| 103 | |
| 104 | public function testNamedInstanceCallWithInheritance() { |
| 105 | $rule1 = []; |
| 106 | $rule1['call'] = [ |
| 107 | ['callMe', [1, 3] ], |
| 108 | ['callMe', [3, 4] ] |
| 109 | ]; |
| 110 | |
| 111 | $dice = $this->dice->addRule('Y', $rule1); |
| 112 | |
| 113 | $rule2 = []; |
| 114 | $rule2['instanceOf'] = 'Y'; |
| 115 | $rule2['constructParams'] = ['Foo']; |
| 116 | |
| 117 | $dice = $dice->addRule('$MyInstance', $rule2); |
| 118 | |
| 119 | $this->assertEquals(array_merge_recursive($rule1, $rule2), $dice->getRule('$MyInstance')); |
| 120 | |
| 121 | } |
| 122 | |
| 123 | public function testNamedInstanceCallWithoutInheritance() { |
| 124 | $rule1 = []; |
| 125 | $rule1['call'] = [ |
| 126 | ['callMe', [1, 3] ], |
| 127 | ['callMe', [3, 4] ] |
| 128 | ]; |
| 129 | |
| 130 | $dice = $this->dice->addRule('Y', $rule1); |
| 131 | |
| 132 | $rule2 = []; |
| 133 | $rule2['instanceOf'] = 'Y'; |
| 134 | $rule2['inherit'] = false; |
| 135 | $rule2['constructParams'] = ['Foo']; |
| 136 | |
| 137 | $dice = $dice->addRule('$MyInstance', $rule2); |
| 138 | |
| 139 | $this->assertEquals($rule2, $dice->getRule('$MyInstance')); |
| 140 | } |
| 141 | |
| 142 | } |