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\Exception
;
19 use TYPO3\CMS\Extbase\
Object\Exception\CannotBuildObjectException
;
20 use TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException
;
25 class ContainerTest
extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
28 * @var \TYPO3\CMS\Extbase\Object\Container\Container
33 * @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
38 * @var \TYPO3\CMS\Extbase\Object\Container\ClassInfo
40 protected $cachedClassInfo;
42 protected function setUp()
44 // The mocked cache will always indicate that he has nothing in the cache to force that we get the real class info
45 $mockedCache = $this->getMockBuilder(\TYPO3\CMS\Extbase\
Object\Container\ClassInfoCache
::class)
46 ->setMethods(['get', 'set', 'has'])
48 $mockedCache->expects($this->any())->method('get')->will($this->returnValue(false));
49 $mockedCache->expects($this->never())->method('has');
51 $this->logger
= $this->getMockBuilder(Logger
::class)
52 ->setMethods(['notice'])
53 ->disableOriginalConstructor()
56 $this->container
= $this->getMockBuilder(\TYPO3\CMS\Extbase\
Object\Container\Container
::class)
57 ->setMethods(['getLogger', 'getClassInfoCache'])
59 $this->container
->expects($this->any())->method('getClassInfoCache')->will($this->returnValue($mockedCache));
60 $this->container
->expects($this->any())->method('getLogger')->will($this->returnValue($this->logger
));
66 public function getInstanceReturnsInstanceOfSimpleClass()
68 $object = $this->container
->getInstance('t3lib_object_tests_c');
69 $this->assertInstanceOf('t3lib_object_tests_c', $object);
75 public function getInstanceReturnsInstanceOfSimpleNamespacedClass()
77 $object = $this->container
->getInstance(\TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\NamespacedClass
::class);
78 $this->assertInstanceOf(\TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\NamespacedClass
::class, $object);
84 public function getInstanceReturnsInstanceOfAClassWithConstructorInjection()
86 $object = $this->container
->getInstance('t3lib_object_tests_b');
87 $this->assertInstanceOf('t3lib_object_tests_b', $object);
88 $this->assertInstanceOf('t3lib_object_tests_c', $object->c
);
94 public function getInstanceReturnsInstanceOfAClassWithTwoLevelDependency()
96 $object = $this->container
->getInstance('t3lib_object_tests_a');
97 $this->assertInstanceOf('t3lib_object_tests_a', $object);
98 $this->assertInstanceOf('t3lib_object_tests_c', $object->b
->c
);
104 public function getInstanceReturnsInstanceOfAClassWithMixedSimpleTypeAndConstructorInjection()
106 $object = $this->container
->getInstance('t3lib_object_tests_amixed_array');
107 $this->assertInstanceOf('t3lib_object_tests_amixed_array', $object);
108 $this->assertEquals(['some' => 'default'], $object->myvalue
);
114 public function getInstanceReturnsInstanceOfAClassWithMixedSimpleTypeAndConstructorInjectionWithNullDefaultValue()
116 $object = $this->container
->getInstance('t3lib_object_tests_amixed_null');
117 $this->assertInstanceOf('t3lib_object_tests_amixed_null', $object);
118 $this->assertNull($object->myvalue
);
124 public function getInstanceThrowsExceptionWhenTryingToInstanciateASingletonWithConstructorParameters()
126 $this->expectException(Exception
::class);
127 $this->expectExceptionCode(1292858051);
128 $this->container
->getInstance('t3lib_object_tests_amixed_array_singleton', ['somevalue']);
134 public function getInstanceReturnsInstanceOfAClassWithConstructorInjectionAndDefaultConstructorParameters()
136 $object = $this->container
->getInstance('t3lib_object_tests_amixed_array');
137 $this->assertInstanceOf('t3lib_object_tests_b', $object->b
);
138 $this->assertInstanceOf('t3lib_object_tests_c', $object->c
);
139 $this->assertEquals(['some' => 'default'], $object->myvalue
);
145 public function getInstancePassesGivenParameterToTheNewObject()
147 $mockObject = $this->createMock('t3lib_object_tests_c');
148 $object = $this->container
->getInstance('t3lib_object_tests_a', [$mockObject]);
149 $this->assertInstanceOf('t3lib_object_tests_a', $object);
150 $this->assertSame($mockObject, $object->c
);
156 public function getInstanceReturnsAFreshInstanceIfObjectIsNoSingleton()
158 $object1 = $this->container
->getInstance('t3lib_object_tests_a');
159 $object2 = $this->container
->getInstance('t3lib_object_tests_a');
160 $this->assertNotSame($object1, $object2);
166 public function getInstanceReturnsSameInstanceInstanceIfObjectIsSingleton()
168 $object1 = $this->container
->getInstance('t3lib_object_tests_singleton');
169 $object2 = $this->container
->getInstance('t3lib_object_tests_singleton');
170 $this->assertSame($object1, $object2);
176 public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaConstructorInjectionContainCyclicDependencies()
178 $this->expectException(CannotBuildObjectException
::class);
179 $this->expectExceptionCode(1295611406);
180 $this->container
->getInstance('t3lib_object_tests_cyclic1WithSetterDependency');
186 public function getInstanceThrowsExceptionIfPrototypeObjectsWiredViaSetterInjectionContainCyclicDependencies()
188 $this->expectException(CannotBuildObjectException
::class);
189 $this->expectExceptionCode(1295611406);
190 $this->container
->getInstance('t3lib_object_tests_cyclic1');
196 public function getInstanceThrowsExceptionIfClassWasNotFound()
198 $this->expectException(UnknownClassException
::class);
199 $this->expectExceptionCode(1278450972);
200 $this->container
->getInstance('nonextistingclass_bla');
206 public function getInstanceInitializesObjects()
208 $instance = $this->container
->getInstance('t3lib_object_tests_initializable');
209 $this->assertTrue($instance->isInitialized());
215 public function getEmptyObjectReturnsInstanceOfSimpleClass()
217 $object = $this->container
->getEmptyObject('t3lib_object_tests_c');
218 $this->assertInstanceOf('t3lib_object_tests_c', $object);
224 public function getEmptyObjectReturnsInstanceOfClassImplementingSerializable()
226 $object = $this->container
->getEmptyObject('t3lib_object_tests_serializable');
227 $this->assertInstanceOf('t3lib_object_tests_serializable', $object);
233 public function getEmptyObjectInitializesObjects()
235 $object = $this->container
->getEmptyObject('t3lib_object_tests_initializable');
236 $this->assertTrue($object->isInitialized());
242 public function test_canGetChildClass()
244 $object = $this->container
->getInstance('t3lib_object_tests_b_child');
245 $this->assertInstanceOf('t3lib_object_tests_b_child', $object);
251 public function test_canInjectInterfaceInClass()
253 $this->container
->registerImplementation('t3lib_object_tests_someinterface', 't3lib_object_tests_someimplementation');
254 $object = $this->container
->getInstance('t3lib_object_tests_needsinterface');
255 $this->assertInstanceOf('t3lib_object_tests_needsinterface', $object);
256 $this->assertInstanceOf('t3lib_object_tests_someinterface', $object->dependency
);
257 $this->assertInstanceOf('t3lib_object_tests_someimplementation', $object->dependency
);
263 public function test_canBuildCyclicDependenciesOfSingletonsWithSetter()
265 $object = $this->container
->getInstance('t3lib_object_tests_resolveablecyclic1');
266 $this->assertInstanceOf('t3lib_object_tests_resolveablecyclic1', $object);
267 $this->assertInstanceOf('t3lib_object_tests_resolveablecyclic1', $object->o2
->o3
->o1
);
273 public function singletonWhichRequiresPrototypeViaSetterInjectionWorksAndAddsDebugMessage()
275 $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.');
276 $object = $this->container
->getInstance('t3lib_object_singletonNeedsPrototype');
277 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
283 public function singletonWhichRequiresSingletonViaSetterInjectionWorks()
285 $this->logger
->expects($this->never())->method('notice');
286 $object = $this->container
->getInstance('t3lib_object_singletonNeedsSingleton');
287 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
293 public function prototypeWhichRequiresPrototypeViaSetterInjectionWorks()
295 $this->logger
->expects($this->never())->method('notice');
296 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsPrototype');
297 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
303 public function prototypeWhichRequiresSingletonViaSetterInjectionWorks()
305 $this->logger
->expects($this->never())->method('notice');
306 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsSingleton');
307 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
313 public function singletonWhichRequiresPrototypeViaConstructorInjectionWorksAndAddsDebugMessage()
315 $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.');
316 $object = $this->container
->getInstance('t3lib_object_singletonNeedsPrototypeInConstructor');
317 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
323 public function singletonWhichRequiresSingletonViaConstructorInjectionWorks()
325 $this->logger
->expects($this->never())->method('notice');
326 $object = $this->container
->getInstance('t3lib_object_singletonNeedsSingletonInConstructor');
327 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
333 public function prototypeWhichRequiresPrototypeViaConstructorInjectionWorks()
335 $this->logger
->expects($this->never())->method('notice');
336 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsPrototypeInConstructor');
337 $this->assertInstanceOf('t3lib_object_prototype', $object->dependency
);
343 public function prototypeWhichRequiresSingletonViaConstructorInjectionWorks()
345 $this->logger
->expects($this->never())->method('notice');
346 $object = $this->container
->getInstance('t3lib_object_prototypeNeedsSingletonInConstructor');
347 $this->assertInstanceOf('t3lib_object_singleton', $object->dependency
);
353 public function isSingletonReturnsTrueForSingletonInstancesAndFalseForPrototypes()
355 $this->assertTrue($this->container
->isSingleton(\TYPO3\CMS\Extbase\
Object\Container\Container
::class));
356 $this->assertFalse($this->container
->isSingleton(\TYPO3\CMS\Extbase\Core\Bootstrap
::class));
362 public function isPrototypeReturnsFalseForSingletonInstancesAndTrueForPrototypes()
364 $this->assertFalse($this->container
->isPrototype(\TYPO3\CMS\Extbase\
Object\Container\Container
::class));
365 $this->assertTrue($this->container
->isPrototype(\TYPO3\CMS\Extbase\Core\Bootstrap
::class));
368 /************************************************
369 * Test regarding constructor argument injection
370 ************************************************/
373 * test class SimpleTypeConstructorArgument
376 public function getInstanceGivesSimpleConstructorArgumentToClassInstance()
378 $object = $this->container
->getInstance(
379 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\SimpleTypeConstructorArgument
::class,
382 $this->assertTrue($object->foo
);
386 * test class SimpleTypeConstructorArgument
389 public function getInstanceDoesNotInfluenceSimpleTypeConstructorArgumentIfNotGiven()
391 $object = $this->container
->getInstance(
392 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\SimpleTypeConstructorArgument
::class
394 $this->assertFalse($object->foo
);
398 * test class MandatoryConstructorArgument
401 public function getInstanceGivesExistingConstructorArgumentToClassInstance()
403 $argumentTestClass = new Fixtures\
ArgumentTestClass();
404 $object = $this->container
->getInstance(
405 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
408 $this->assertInstanceOf(
409 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
412 $this->assertSame($argumentTestClass, $object->argumentTestClass
);
416 * test class MandatoryConstructorArgument
419 public function getInstanceInjectsNewInstanceOfClassToClassIfArgumentIsMandatory()
421 $object = $this->container
->getInstance(
422 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class
424 $this->assertInstanceOf(
425 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgument
::class,
428 $this->assertInstanceOf(
429 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
430 $object->argumentTestClass
435 * test class OptionalConstructorArgument
438 public function getInstanceDoesNotInjectAnOptionalArgumentIfNotGiven()
440 $object = $this->container
->getInstance(
441 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class
443 $this->assertInstanceOf(
444 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
447 $this->assertNull($object->argumentTestClass
);
451 * test class OptionalConstructorArgument
454 public function getInstanceDoesNotInjectAnOptionalArgumentIfGivenArgumentIsNull()
456 $object = $this->container
->getInstance(
457 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
460 $this->assertInstanceOf(
461 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
464 $this->assertNull($object->argumentTestClass
);
468 * test class OptionalConstructorArgument
471 public function getInstanceGivesExistingConstructorArgumentToClassInstanceIfArgumentIsGiven()
473 $argumentTestClass = new Fixtures\
ArgumentTestClass();
474 $object = $this->container
->getInstance(
475 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
478 $this->assertInstanceOf(
479 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\OptionalConstructorArgument
::class,
482 $this->assertSame($argumentTestClass, $object->argumentTestClass
);
486 * test class MandatoryConstructorArgumentTwo
489 public function getInstanceGivesTwoArgumentsToClassConstructor()
491 $firstArgument = new Fixtures\
ArgumentTestClass();
492 $secondArgument = new Fixtures\
ArgumentTestClass();
493 $object = $this->container
->getInstance(
494 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
495 [$firstArgument, $secondArgument]
497 $this->assertInstanceOf(
498 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
503 $object->argumentTestClass
507 $object->argumentTestClassTwo
512 * test class MandatoryConstructorArgumentTwo
515 public function getInstanceInjectsTwoMandatoryArguments()
517 $object = $this->container
->getInstance(
518 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class
520 $this->assertInstanceOf(
521 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
524 $this->assertInstanceOf(
525 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
526 $object->argumentTestClass
528 $this->assertInstanceOf(
529 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
530 $object->argumentTestClassTwo
532 $this->assertNotSame(
533 $object->argumentTestClass
,
534 $object->argumentTestClassTwo
539 * test class MandatoryConstructorArgumentTwo
542 public function getInstanceInjectsSecondMandatoryArgumentIfFirstIsGiven()
544 $firstArgument = new Fixtures\
ArgumentTestClass();
545 $object = $this->container
->getInstance(
546 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
549 $this->assertInstanceOf(
550 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
555 $object->argumentTestClass
557 $this->assertInstanceOf(
558 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
559 $object->argumentTestClassTwo
561 $this->assertNotSame(
562 $object->argumentTestClass
,
563 $object->argumentTestClassTwo
568 * test class MandatoryConstructorArgumentTwo
571 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsGiven()
573 $secondArgument = new Fixtures\
ArgumentTestClass();
574 $object = $this->container
->getInstance(
575 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
576 [null, $secondArgument]
578 $this->assertInstanceOf(
579 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\MandatoryConstructorArgumentTwo
::class,
582 $this->assertInstanceOf(
583 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
584 $object->argumentTestClass
586 $this->assertInstanceOf(
587 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
588 $object->argumentTestClassTwo
592 $object->argumentTestClassTwo
594 $this->assertNotSame(
595 $object->argumentTestClass
,
596 $object->argumentTestClassTwo
601 * test class TwoConstructorArgumentsSecondOptional
604 public function getInstanceGivesTwoArgumentsToClassConstructorIfSecondIsOptional()
606 $firstArgument = new Fixtures\
ArgumentTestClass();
607 $secondArgument = new Fixtures\
ArgumentTestClass();
608 $object = $this->container
->getInstance(
609 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
610 [$firstArgument, $secondArgument]
612 $this->assertInstanceOf(
613 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
618 $object->argumentTestClass
622 $object->argumentTestClassTwo
627 * test class TwoConstructorArgumentsSecondOptional
630 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsOptionalAndNoneAreGiven()
632 $object = $this->container
->getInstance(
633 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class
635 $this->assertInstanceOf(
636 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
639 $this->assertInstanceOf(
640 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
641 $object->argumentTestClass
643 $this->assertNull($object->argumentTestClassTwo
);
647 * test class TwoConstructorArgumentsSecondOptional
650 public function getInstanceInjectsFirstMandatoryArgumentIfSecondIsOptionalAndBothAreGivenAsNull()
652 $object = $this->container
->getInstance(
653 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
656 $this->assertInstanceOf(
657 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
660 $this->assertInstanceOf(
661 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
662 $object->argumentTestClass
664 $this->assertNull($object->argumentTestClassTwo
);
668 * test class TwoConstructorArgumentsSecondOptional
671 public function getInstanceGivesFirstArgumentToConstructorIfSecondIsOptionalAndFirstIsGiven()
673 $firstArgument = new Fixtures\
ArgumentTestClass();
674 $object = $this->container
->getInstance(
675 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
678 $this->assertInstanceOf(
679 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
684 $object->argumentTestClass
686 $this->assertNull($object->argumentTestClassTwo
);
690 * test class TwoConstructorArgumentsSecondOptional
693 public function getInstanceGivesFirstArgumentToConstructorIfSecondIsOptionalFirstIsGivenAndSecondIsGivenNull()
695 $firstArgument = new Fixtures\
ArgumentTestClass();
696 $object = $this->container
->getInstance(
697 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
698 [$firstArgument, null]
700 $this->assertInstanceOf(
701 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsSecondOptional
::class,
706 $object->argumentTestClass
708 $this->assertNull($object->argumentTestClassTwo
);
712 * test class TwoConstructorArgumentsFirstOptional
716 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGivenAsNull()
718 $object = $this->container
->getInstance(
719 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
722 $this->assertInstanceOf(
723 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
726 $this->assertInstanceOf(
727 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
728 $object->argumentTestClassTwo
733 * test class TwoConstructorArgumentsFirstOptional
736 public function getInstanceOnFirstOptionalAndSecondMandatoryGivesTwoGivenArgumentsToConstructor()
738 $first = new Fixtures\
ArgumentTestClass();
739 $second = new Fixtures\
ArgumentTestClass();
740 $object = $this->container
->getInstance(
741 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
744 $this->assertInstanceOf(
745 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
750 $object->argumentTestClass
754 $object->argumentTestClassTwo
759 * test class TwoConstructorArgumentsFirstOptional
762 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGiven()
764 $first = new Fixtures\
ArgumentTestClass();
765 $object = $this->container
->getInstance(
766 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
769 $this->assertInstanceOf(
770 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
775 $object->argumentTestClass
777 $this->assertInstanceOf(
778 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
779 $object->argumentTestClassTwo
781 $this->assertNotSame(
782 $object->argumentTestClass
,
783 $object->argumentTestClassTwo
788 * test class TwoConstructorArgumentsFirstOptional
792 public function getInstanceOnFirstOptionalAndSecondMandatoryGivesSecondArgumentAsIsIfFirstIsGivenAsNullAndSecondIsGiven()
794 $second = new Fixtures\
ArgumentTestClass();
795 $object = $this->container
->getInstance(
796 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
799 $this->assertInstanceOf(
800 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
805 $object->argumentTestClassTwo
810 * test class TwoConstructorArgumentsFirstOptional
814 public function getInstanceOnFirstOptionalAndSecondMandatoryInjectsSecondArgumentIfFirstIsGivenAsNullAndSecondIsNull()
816 $object = $this->container
->getInstance(
817 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
820 $this->assertInstanceOf(
821 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsFirstOptional
::class,
824 $this->assertInstanceOf(
825 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\ArgumentTestClass
::class,
826 $object->argumentTestClassTwo
831 * test class TwoConstructorArgumentsBothOptional
834 public function getInstanceOnTwoOptionalGivesTwoGivenArgumentsToConstructor()
836 $first = new Fixtures\
ArgumentTestClass();
837 $second = new Fixtures\
ArgumentTestClass();
838 $object = $this->container
->getInstance(
839 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
842 $this->assertInstanceOf(
843 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
848 $object->argumentTestClass
852 $object->argumentTestClassTwo
857 * test class TwoConstructorArgumentsBothOptional
860 public function getInstanceOnTwoOptionalGivesNoArgumentsToConstructorIfArgumentsAreNull()
862 $object = $this->container
->getInstance(
863 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
866 $this->assertInstanceOf(
867 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
870 $this->assertNull($object->argumentTestClass
);
871 $this->assertNull($object->argumentTestClassTwo
);
875 * test class TwoConstructorArgumentsBothOptional
878 public function getInstanceOnTwoOptionalGivesNoArgumentsToConstructorIfNoneAreGiven()
880 $object = $this->container
->getInstance(
881 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class
883 $this->assertInstanceOf(
884 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
887 $this->assertNull($object->argumentTestClass
);
888 $this->assertNull($object->argumentTestClassTwo
);
892 * test class TwoConstructorArgumentsBothOptional
895 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsObjectAndSecondIsNotGiven()
897 $first = new Fixtures\
ArgumentTestClass();
898 $object = $this->container
->getInstance(
899 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
902 $this->assertInstanceOf(
903 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
908 $object->argumentTestClass
910 $this->assertNull($object->argumentTestClassTwo
);
914 * test class TwoConstructorArgumentsBothOptional
917 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsObjectAndSecondIsNull()
919 $first = new Fixtures\
ArgumentTestClass();
920 $object = $this->container
->getInstance(
921 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
924 $this->assertInstanceOf(
925 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
930 $object->argumentTestClass
932 $this->assertNull($object->argumentTestClassTwo
);
936 * test class TwoConstructorArgumentsBothOptional
939 public function getInstanceOnTwoOptionalGivesOneArgumentToConstructorIfFirstIsNullAndSecondIsObject()
941 $second = new Fixtures\
ArgumentTestClass();
942 $object = $this->container
->getInstance(
943 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
946 $this->assertInstanceOf(
947 \TYPO3\CMS\Extbase\Tests\Unit\
Object\Container\Fixtures\TwoConstructorArgumentsBothOptional
::class,
950 $this->assertNull($object->argumentTestClass
);
953 $object->argumentTestClassTwo