2 namespace TYPO3\CMS\Extbase\Tests\Unit\
Object\Container
;
5 * This file is part of the TYPO3 CMS project.
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
14 * The TYPO3 project - inspiring people to share!
16 use Psr\Log\LoggerInterface
;
17 use TYPO3\CMS\Core\Log\Logger
;
18 use TYPO3\CMS\Extbase\
Object\Container\Container
;
19 use TYPO3\CMS\Extbase\
Object\Exception
;
20 use TYPO3\CMS\Extbase\
Object\Exception\CannotBuildObjectException
;
21 use TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException
;
22 use TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClassForPublicPropertyInjection
;
23 use TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ProtectedPropertyInjectClass
;
24 use TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\PublicPropertyInjectClass
;
29 class ContainerTest
extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
32 * @var \TYPO3\CMS\Extbase\Object\Container\Container
37 * @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
42 * @var \TYPO3\CMS\Extbase\Object\Container\ClassInfo
44 protected $cachedClassInfo;
46 protected function setUp()
48 // The mocked cache will always indicate that he has nothing in the cache to force that we get the real class info
49 $mockedCache = $this->getMockBuilder(\TYPO3\CMS\Extbase\
Object\Container\ClassInfoCache
::class)
50 ->setMethods(['get', 'set', 'has'])
52 $mockedCache->expects($this->any())->method('get')->will($this->returnValue(false));
53 $mockedCache->expects($this->never())->method('has');
55 $this->logger
= $this->getMockBuilder(Logger
::class)
56 ->setMethods(['notice'])
57 ->disableOriginalConstructor()
60 $this->container
= $this->getMockBuilder(\TYPO3\CMS\Extbase\
Object\Container\Container
::class)
61 ->setMethods(['getLogger', 'getClassInfoCache'])
63 $this->container
->expects($this->any())->method('getClassInfoCache')->will($this->returnValue($mockedCache));
64 $this->container
->expects($this->any())->method('getLogger')->will($this->returnValue($this->logger
));
70 public function getInstanceReturnsInstanceOfSimpleClass()
72 $object = $this->container
->getInstance('t3lib_object_tests_c');
73 $this->assertInstanceOf('t3lib_object_tests_c', $object);
79 public function getInstanceReturnsInstanceOfSimpleNamespacedClass()
81 $object = $this->container
->getInstance(\TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\NamespacedClass
::class);
82 $this->assertInstanceOf(\TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\NamespacedClass
::class, $object);
88 public function getInstanceReturnsInstanceOfAClassWithConstructorInjection()
90 $object = $this->container
->getInstance('t3lib_object_tests_b');
91 $this->assertInstanceOf('t3lib_object_tests_b', $object);
92 $this->assertInstanceOf('t3lib_object_tests_c', $object->c
);
98 public function getInstanceReturnsInstanceOfAClassWithTwoLevelDependency()
100 $object = $this->container
->getInstance('t3lib_object_tests_a');
101 $this->assertInstanceOf('t3lib_object_tests_a', $object);
102 $this->assertInstanceOf('t3lib_object_tests_c', $object->b
->c
);
108 public function getInstanceReturnsInstanceOfAClassWithMixedSimpleTypeAndConstructorInjection()
110 $object = $this->container
->getInstance('t3lib_object_tests_amixed_array');
111 $this->assertInstanceOf('t3lib_object_tests_amixed_array', $object);
112 $this->assertEquals(['some' => 'default'], $object->myvalue
);
118 public function getInstanceReturnsInstanceOfAClassWithMixedSimpleTypeAndConstructorInjectionWithNullDefaultValue()
120 $object = $this->container
->getInstance('t3lib_object_tests_amixed_null');
121 $this->assertInstanceOf('t3lib_object_tests_amixed_null', $object);
122 $this->assertNull($object->myvalue
);
128 public function getInstanceThrowsExceptionWhenTryingToInstanciateASingletonWithConstructorParameters()
130 $this->expectException(Exception
::class);
131 $this->expectExceptionCode(1292858051);
132 $this->container
->getInstance('t3lib_object_tests_amixed_array_singleton', ['somevalue']);
138 public function getInstanceReturnsInstanceOfAClassWithConstructorInjectionAndDefaultConstructorParameters()
140 $object = $this->container
->getInstance('t3lib_object_tests_amixed_array');
141 $this->assertInstanceOf('t3lib_object_tests_b', $object->b
);
142 $this->assertInstanceOf('t3lib_object_tests_c', $object->c
);
143 $this->assertEquals(['some' => 'default'], $object->myvalue
);
149 public function getInstancePassesGivenParameterToTheNewObject()
151 $mockObject = $this->createMock('t3lib_object_tests_c');
152 $object = $this->container
->getInstance('t3lib_object_tests_a', [$mockObject]);
153 $this->assertInstanceOf('t3lib_object_tests_a', $object);
154 $this->assertSame($mockObject, $object->c
);
160 public function getInstanceReturnsAFreshInstanceIfObjectIsNoSingleton()
162 $object1 = $this->container
->getInstance('t3lib_object_tests_a');
163 $object2 = $this->container
->getInstance('t3lib_object_tests_a');
164 $this->assertNotSame($object1, $object2);
170 public function getInstanceReturnsSameInstanceInstanceIfObjectIsSingleton()
172 $object1 = $this->container
->getInstance('t3lib_object_tests_singleton');
173 $object2 = $this->container
->getInstance('t3lib_object_tests_singleton');
174 $this->assertSame($object1, $object2);
180 public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaConstructorInjectionContainCyclicDependencies()
182 $this->expectException(CannotBuildObjectException
::class);
183 $this->expectExceptionCode(1295611406);
184 $this->container
->getInstance('t3lib_object_tests_cyclic1WithSetterDependency');
190 public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaSetterInjectionContainCyclicDependencies()
192 $this->expectException(CannotBuildObjectException
::class);
193 $this->expectExceptionCode(1295611406);
194 $this->container
->getInstance('t3lib_object_tests_cyclic1');
200 public function getInstanceThrowsExceptionIfClassWasNotFound()
202 $this->expectException(UnknownClassException
::class);
203 $this->expectExceptionCode(1278450972);
204 $this->container
->getInstance('nonextistingclass_bla');
210 public function getInstanceInitializesObjects()
212 $instance = $this->container
->getInstance('t3lib_object_tests_initializable');
213 $this->assertTrue($instance->isInitialized());
219 public function getEmptyObjectReturnsInstanceOfSimpleClass()
221 $object = $this->container
->getEmptyObject('t3lib_object_tests_c');
222 $this->assertInstanceOf('t3lib_object_tests_c', $object);
228 public function getEmptyObjectReturnsInstanceOfClassImplementingSerializable()
230 $object = $this->container
->getEmptyObject('t3lib_object_tests_serializable');
231 $this->assertInstanceOf('t3lib_object_tests_serializable', $object);
237 public function getEmptyObjectInitializesObjects()
239 $object = $this->container
->getEmptyObject('t3lib_object_tests_initializable');
240 $this->assertTrue($object->isInitialized());
246 public function test_canGetChildClass()
248 $object = $this->container
->getInstance('t3lib_object_tests_b_child');
249 $this->assertInstanceOf('t3lib_object_tests_b_child', $object);
255 public function test_canInjectInterfaceInClass()
257 $this->container
->registerImplementation('t3lib_object_tests_someinterface', 't3lib_object_tests_someimplementation');
258 $object = $this->container
->getInstance('t3lib_object_tests_needsinterface');
259 $this->assertInstanceOf('t3lib_object_tests_needsinterface', $object);
260 $this->assertInstanceOf('t3lib_object_tests_someinterface', $object->dependency
);
261 $this->assertInstanceOf('t3lib_object_tests_someimplementation', $object->dependency
);
267 public function test_canBuildCyclicDependenciesOfSingletonsWithSetter()
269 $object = $this->container
->getInstance('t3lib_object_tests_resolveablecyclic1');
270 $this->assertInstanceOf('t3lib_object_tests_resolveablecyclic1', $object);
271 $this->assertInstanceOf('t3lib_object_tests_resolveablecyclic1', $object->o2
->o3
->o1
);
277 public function singletonWhichRequiresPrototypeViaSetterInjectionWorksAndAddsDebugMessage()
279 $this->logger
->expects($this->once())->method('notice')->with('The singleton "t3lib_object_singletonNeedsPrototype" needs a prototype in "injectDependency". This is often a bad code smell; often you rather want to inject a singleton.');
280 $object = $this->container
->getInstance('t3lib_object_singletonNeedsPrototype');
281 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
287 public function singletonWhichRequiresSingletonViaSetterInjectionWorks()
289 $this->logger
->expects($this->never())->method('notice');
290 $object = $this->container
->getInstance('t3lib_object_singletonNeedsSingleton');
291 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
297 public function prototypeWhichRequiresPrototypeViaSetterInjectionWorks()
299 $this->logger
->expects($this->never())->method('notice');
300 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsPrototype');
301 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
307 public function prototypeWhichRequiresSingletonViaSetterInjectionWorks()
309 $this->logger
->expects($this->never())->method('notice');
310 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsSingleton');
311 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
317 public function singletonWhichRequiresPrototypeViaConstructorInjectionWorksAndAddsDebugMessage()
319 $this->logger
->expects($this->once())->method('notice')->with('The singleton "t3lib_object_singletonNeedsPrototypeInConstructor" needs a prototype in the constructor. This is often a bad code smell; often you rather want to inject a singleton.');
320 $object = $this->container
->getInstance('t3lib_object_singletonNeedsPrototypeInConstructor');
321 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
327 public function singletonWhichRequiresSingletonViaConstructorInjectionWorks()
329 $this->logger
->expects($this->never())->method('notice');
330 $object = $this->container
->getInstance('t3lib_object_singletonNeedsSingletonInConstructor');
331 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
337 public function prototypeWhichRequiresPrototypeViaConstructorInjectionWorks()
339 $this->logger
->expects($this->never())->method('notice');
340 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsPrototypeInConstructor');
341 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
347 public function prototypeWhichRequiresSingletonViaConstructorInjectionWorks()
349 $this->logger
->expects($this->never())->method('notice');
350 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsSingletonInConstructor');
351 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
357 public function isSingletonReturnsTrueForSingletonInstancesAndFalseForPrototypes()
359 $this->assertTrue($this->container
->isSingleton(\TYPO3\CMS\Extbase\
Object\Container\Container
::class));
360 $this->assertFalse($this->container
->isSingleton(\TYPO3\CMS\Extbase\Core\Bootstrap
::class));
366 public function isPrototypeReturnsFalseForSingletonInstancesAndTrueForPrototypes()
368 $this->assertFalse($this->container
->isPrototype(\TYPO3\CMS\Extbase\
Object\Container\Container
::class));
369 $this->assertTrue($this->container
->isPrototype(\TYPO3\CMS\Extbase\Core\Bootstrap
::class));
372 /************************************************
373 * Test regarding constructor argument injection
374 ************************************************/
377 * test class SimpleTypeConstructorArgument
380 public function getInstanceGivesSimpleConstructorArgumentToClassInstance()
382 $object = $this->container
->getInstance(
383 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\SimpleTypeConstructorArgument
::class,
386 $this->assertTrue($object->foo
);
390 * test class SimpleTypeConstructorArgument
393 public function getInstanceDoesNotInfluenceSimpleTypeConstructorArgumentIfNotGiven()
395 $object = $this->container
->getInstance(
396 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\SimpleTypeConstructorArgument
::class
398 $this->assertFalse($object->foo
);
402 * test class MandatoryConstructorArgument
405 public function getInstanceGivesExistingConstructorArgumentToClassInstance()
407 $argumentTestClass = new Fixtures\
ArgumentTestClass();
408 $object = $this->container
->getInstance(
409 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
412 $this->assertInstanceOf(
413 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
416 $this->assertSame($argumentTestClass, $object->argumentTestClass
);
420 * test class MandatoryConstructorArgument
423 public function getInstanceInjectsNewInstanceOfClassToClassIfArgumentIsMandatory()
425 $object = $this->container
->getInstance(
426 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class
428 $this->assertInstanceOf(
429 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
432 $this->assertInstanceOf(
433 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
434 $object->argumentTestClass
439 * test class OptionalConstructorArgument
442 public function getInstanceDoesNotInjectAnOptionalArgumentIfNotGiven()
444 $object = $this->container
->getInstance(
445 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class
447 $this->assertInstanceOf(
448 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
451 $this->assertNull($object->argumentTestClass
);
455 * test class OptionalConstructorArgument
458 public function getInstanceDoesNotInjectAnOptionalArgumentIfGivenArgumentIsNull()
460 $object = $this->container
->getInstance(
461 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
464 $this->assertInstanceOf(
465 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
468 $this->assertNull($object->argumentTestClass
);
472 * test class OptionalConstructorArgument
475 public function getInstanceGivesExistingConstructorArgumentToClassInstanceIfArgumentIsGiven()
477 $argumentTestClass = new Fixtures\
ArgumentTestClass();
478 $object = $this->container
->getInstance(
479 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
482 $this->assertInstanceOf(
483 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
486 $this->assertSame($argumentTestClass, $object->argumentTestClass
);
490 * test class MandatoryConstructorArgumentTwo
493 public function getInstanceGivesTwoArgumentsToClassConstructor()
495 $firstArgument = new Fixtures\
ArgumentTestClass();
496 $secondArgument = new Fixtures\
ArgumentTestClass();
497 $object = $this->container
->getInstance(
498 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
499 [$firstArgument, $secondArgument]
501 $this->assertInstanceOf(
502 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
507 $object->argumentTestClass
511 $object->argumentTestClassTwo
516 * test class MandatoryConstructorArgumentTwo
519 public function getInstanceInjectsTwoMandatoryArguments()
521 $object = $this->container
->getInstance(
522 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class
524 $this->assertInstanceOf(
525 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
528 $this->assertInstanceOf(
529 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
530 $object->argumentTestClass
532 $this->assertInstanceOf(
533 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
534 $object->argumentTestClassTwo
536 $this->assertNotSame(
537 $object->argumentTestClass
,
538 $object->argumentTestClassTwo
543 * test class MandatoryConstructorArgumentTwo
546 public function getInstanceInjectsSecondMandatoryArgumentIfFirstIsGiven()
548 $firstArgument = new Fixtures\
ArgumentTestClass();
549 $object = $this->container
->getInstance(
550 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
553 $this->assertInstanceOf(
554 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
559 $object->argumentTestClass
561 $this->assertInstanceOf(
562 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
563 $object->argumentTestClassTwo
565 $this->assertNotSame(
566 $object->argumentTestClass
,
567 $object->argumentTestClassTwo
572 * test class MandatoryConstructorArgumentTwo
575 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsGiven()
577 $secondArgument = new Fixtures\
ArgumentTestClass();
578 $object = $this->container
->getInstance(
579 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
580 [null, $secondArgument]
582 $this->assertInstanceOf(
583 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
586 $this->assertInstanceOf(
587 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
588 $object->argumentTestClass
590 $this->assertInstanceOf(
591 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
592 $object->argumentTestClassTwo
596 $object->argumentTestClassTwo
598 $this->assertNotSame(
599 $object->argumentTestClass
,
600 $object->argumentTestClassTwo
605 * test class TwoConstructorArgumentsSecondOptional
608 public function getInstanceGivesTwoArgumentsToClassConstructorIfSecondIsOptional()
610 $firstArgument = new Fixtures\
ArgumentTestClass();
611 $secondArgument = new Fixtures\
ArgumentTestClass();
612 $object = $this->container
->getInstance(
613 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
614 [$firstArgument, $secondArgument]
616 $this->assertInstanceOf(
617 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
622 $object->argumentTestClass
626 $object->argumentTestClassTwo
631 * test class TwoConstructorArgumentsSecondOptional
634 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsOptionalAndNoneAreGiven()
636 $object = $this->container
->getInstance(
637 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class
639 $this->assertInstanceOf(
640 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
643 $this->assertInstanceOf(
644 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
645 $object->argumentTestClass
647 $this->assertNull($object->argumentTestClassTwo
);
651 * test class TwoConstructorArgumentsSecondOptional
654 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsOptionalAndBothAreGivenAsNull()
656 $object = $this->container
->getInstance(
657 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
660 $this->assertInstanceOf(
661 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
664 $this->assertInstanceOf(
665 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
666 $object->argumentTestClass
668 $this->assertNull($object->argumentTestClassTwo
);
672 * test class TwoConstructorArgumentsSecondOptional
675 public function getInstanceGivesFirstArgumentToConstructorIfSecondIsOptionalAndFirstIsGiven()
677 $firstArgument = new Fixtures\
ArgumentTestClass();
678 $object = $this->container
->getInstance(
679 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
682 $this->assertInstanceOf(
683 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
688 $object->argumentTestClass
690 $this->assertNull($object->argumentTestClassTwo
);
694 * test class TwoConstructorArgumentsSecondOptional
697 public function getInstanceGivesFirstArgumentToConstructorIfSecondIsOptionalFirstIsGivenAndSecondIsGivenNull()
699 $firstArgument = new Fixtures\
ArgumentTestClass();
700 $object = $this->container
->getInstance(
701 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
702 [$firstArgument, null]
704 $this->assertInstanceOf(
705 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
710 $object->argumentTestClass
712 $this->assertNull($object->argumentTestClassTwo
);
716 * test class TwoConstructorArgumentsFirstOptional
720 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGivenAsNull()
722 $object = $this->container
->getInstance(
723 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
726 $this->assertInstanceOf(
727 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
730 $this->assertInstanceOf(
731 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
732 $object->argumentTestClassTwo
737 * test class TwoConstructorArgumentsFirstOptional
740 public function getInstanceOnFirstOptionalAndSecondMandatoryGivesTwoGivenArgumentsToConstructor()
742 $first = new Fixtures\
ArgumentTestClass();
743 $second = new Fixtures\
ArgumentTestClass();
744 $object = $this->container
->getInstance(
745 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
748 $this->assertInstanceOf(
749 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
754 $object->argumentTestClass
758 $object->argumentTestClassTwo
763 * test class TwoConstructorArgumentsFirstOptional
766 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGiven()
768 $first = new Fixtures\
ArgumentTestClass();
769 $object = $this->container
->getInstance(
770 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
773 $this->assertInstanceOf(
774 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
779 $object->argumentTestClass
781 $this->assertInstanceOf(
782 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
783 $object->argumentTestClassTwo
785 $this->assertNotSame(
786 $object->argumentTestClass
,
787 $object->argumentTestClassTwo
792 * test class TwoConstructorArgumentsFirstOptional
796 public function getInstanceOnFirstOptionalAndSecondMandatoryGivesSecondArgumentAsIsIfFirstIsGivenAsNullAndSecondIsGiven()
798 $second = new Fixtures\
ArgumentTestClass();
799 $object = $this->container
->getInstance(
800 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
803 $this->assertInstanceOf(
804 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
809 $object->argumentTestClassTwo
814 * test class TwoConstructorArgumentsFirstOptional
818 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGivenAsNullAndSecondIsNull()
820 $object = $this->container
->getInstance(
821 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
824 $this->assertInstanceOf(
825 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
828 $this->assertInstanceOf(
829 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
830 $object->argumentTestClassTwo
835 * test class TwoConstructorArgumentsBothOptional
838 public function getInstanceOnTwoOptionalGivesTwoGivenArgumentsToConstructor()
840 $first = new Fixtures\
ArgumentTestClass();
841 $second = new Fixtures\
ArgumentTestClass();
842 $object = $this->container
->getInstance(
843 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
846 $this->assertInstanceOf(
847 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
852 $object->argumentTestClass
856 $object->argumentTestClassTwo
861 * test class TwoConstructorArgumentsBothOptional
864 public function getInstanceOnTwoOptionalGivesNoArgumentsToConstructorIfArgumentsAreNull()
866 $object = $this->container
->getInstance(
867 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
870 $this->assertInstanceOf(
871 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
874 $this->assertNull($object->argumentTestClass
);
875 $this->assertNull($object->argumentTestClassTwo
);
879 * test class TwoConstructorArgumentsBothOptional
882 public function getInstanceOnTwoOptionalGivesNoArgumentsToConstructorIfNoneAreGiven()
884 $object = $this->container
->getInstance(
885 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class
887 $this->assertInstanceOf(
888 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
891 $this->assertNull($object->argumentTestClass
);
892 $this->assertNull($object->argumentTestClassTwo
);
896 * test class TwoConstructorArgumentsBothOptional
899 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsObjectAndSecondIsNotGiven()
901 $first = new Fixtures\
ArgumentTestClass();
902 $object = $this->container
->getInstance(
903 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
906 $this->assertInstanceOf(
907 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
912 $object->argumentTestClass
914 $this->assertNull($object->argumentTestClassTwo
);
918 * test class TwoConstructorArgumentsBothOptional
921 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsObjectAndSecondIsNull()
923 $first = new Fixtures\
ArgumentTestClass();
924 $object = $this->container
->getInstance(
925 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
928 $this->assertInstanceOf(
929 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
934 $object->argumentTestClass
936 $this->assertNull($object->argumentTestClassTwo
);
940 * test class TwoConstructorArgumentsBothOptional
943 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsNullAndSecondIsObject()
945 $second = new Fixtures\
ArgumentTestClass();
946 $object = $this->container
->getInstance(
947 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
950 $this->assertInstanceOf(
951 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
954 $this->assertNull($object->argumentTestClass
);
957 $object->argumentTestClassTwo
964 public function getInstanceInjectsPublicProperties()
966 $container = new Container();
967 $object = $container->getInstance(PublicPropertyInjectClass
::class);
968 self
::assertInstanceOf(ArgumentTestClassForPublicPropertyInjection
::class, $object->foo
);
974 public function getInstanceInjectsProtectedProperties()
976 $container = new Container();
977 $object = $container->getInstance(ProtectedPropertyInjectClass
::class);
978 self
::assertInstanceOf(ArgumentTestClassForPublicPropertyInjection
::class, $object->getFoo());