diff --git a/Classes/Service/ViewHelper/Field/FieldContextEntry.php b/Classes/Service/ViewHelper/Field/FieldContextEntry.php index fa05eef..df356e2 100644 --- a/Classes/Service/ViewHelper/Field/FieldContextEntry.php +++ b/Classes/Service/ViewHelper/Field/FieldContextEntry.php @@ -14,9 +14,8 @@ namespace Romm\Formz\Service\ViewHelper\Field; use Romm\Formz\Configuration\Form\Field\Field; -use TYPO3\CMS\Core\SingletonInterface; -class FieldContextEntry implements SingletonInterface +class FieldContextEntry { /** * @var Field @@ -37,10 +36,6 @@ public function __construct(Field $field) } /** - * Returns the current field which was defined by the `FieldViewHelper`. - * - * Returns null if no current field was found. - * * @return Field|null */ public function getField() diff --git a/Classes/Service/ViewHelper/Field/FieldViewHelperService.php b/Classes/Service/ViewHelper/Field/FieldViewHelperService.php index 8695b64..5543760 100644 --- a/Classes/Service/ViewHelper/Field/FieldViewHelperService.php +++ b/Classes/Service/ViewHelper/Field/FieldViewHelperService.php @@ -27,6 +27,10 @@ class FieldViewHelperService implements SingletonInterface { /** + * Contains all current fields being rendered by FormZ: if a field is + * rendered beneath another field, several entries will be added to this + * property. + * * @var FieldContextEntry[] */ protected $contextEntries; @@ -37,7 +41,9 @@ class FieldViewHelperService implements SingletonInterface protected $view; /** - * @todo rename ? + * Adds a new context entry to the entries array. The other field-related + * methods will be processed on this entry until the field rendering has + * ended. * * @param Field $field */ @@ -47,8 +53,15 @@ public function setCurrentField(Field $field) } /** - * Checks that the `FieldViewHelper` has been called. If not, an exception - * is thrown. + * Removes the current field context entry. + */ + public function removeCurrentField() + { + array_pop($this->contextEntries); + } + + /** + * Checks that a field context is found. * * @return bool */ @@ -58,11 +71,7 @@ public function fieldContextExists() } /** - * Returns the current field which was defined by the `FieldViewHelper`. - * - * Returns null if no current field was found. - * - * @return Field|null + * @return Field */ public function getCurrentField() { @@ -109,14 +118,6 @@ public function getView(Layout $layout) return $this->view[$identifier]; } - /** - * Reset every state that can be used by this service. - */ - public function resetState() - { - array_pop($this->contextEntries); - } - /** * @return FieldContextEntry */ diff --git a/Classes/Service/ViewHelper/Slot/SlotViewHelperService.php b/Classes/Service/ViewHelper/Slot/SlotViewHelperService.php index 92ff420..3950764 100644 --- a/Classes/Service/ViewHelper/Slot/SlotViewHelperService.php +++ b/Classes/Service/ViewHelper/Slot/SlotViewHelperService.php @@ -27,15 +27,21 @@ class SlotViewHelperService implements SingletonInterface protected $contextEntries = []; /** - * @todo - * * @param RenderingContextInterface $renderingContext */ - public function initialize(RenderingContextInterface $renderingContext) + public function activate(RenderingContextInterface $renderingContext) { $this->contextEntries[] = GeneralUtility::makeInstance(SlotContextEntry::class, $renderingContext); } + /** + * Removes the current context entry. + */ + public function resetState() + { + array_pop($this->contextEntries); + } + /** * @see \Romm\Formz\Service\ViewHelper\Slot\SlotContextEntry::addSlot() * @@ -104,14 +110,6 @@ public function restoreTemplateVariables($slotName) $this->getCurrentContext()->restoreTemplateVariables($slotName); } - /** - * Removes the current context entry. - */ - public function resetState() - { - array_pop($this->contextEntries); - } - /** * @return SlotContextEntry */ diff --git a/Classes/ViewHelpers/FieldViewHelper.php b/Classes/ViewHelpers/FieldViewHelper.php index 9ef2d1e..dd9a680 100644 --- a/Classes/ViewHelpers/FieldViewHelper.php +++ b/Classes/ViewHelpers/FieldViewHelper.php @@ -105,9 +105,10 @@ public function render() $this->injectFieldInService($this->arguments['name']); /* - * @todo + * Activating the slot service, which will be used all along the + * rendering of this very field. */ - $this->slotService->initialize($this->renderingContext); + $this->slotService->activate($this->renderingContext); /* * Calling this here will process every view helper beneath this one, @@ -136,7 +137,7 @@ public function render() /* * Resetting all services data. */ - $this->fieldService->resetState(); + $this->fieldService->removeCurrentField(); $this->slotService->resetState(); $viewHelperVariableContainer->setView($currentView); diff --git a/Classes/ViewHelpers/FormatMessageViewHelper.php b/Classes/ViewHelpers/FormatMessageViewHelper.php index 719dca8..a48baca 100644 --- a/Classes/ViewHelpers/FormatMessageViewHelper.php +++ b/Classes/ViewHelpers/FormatMessageViewHelper.php @@ -148,8 +148,7 @@ protected function getFieldName() if (empty($fieldName) && $this->fieldService->fieldContextExists() ) { - $field = $this->fieldService->getCurrentField(); - $fieldName = $field->getName(); + $fieldName = $this->fieldService->getCurrentField()->getName(); } if (null === $fieldName) { diff --git a/Tests/Unit/Service/ViewHelper/Field/FieldContentEntryTest.php b/Tests/Unit/Service/ViewHelper/Field/FieldContentEntryTest.php new file mode 100644 index 0000000..911371c --- /dev/null +++ b/Tests/Unit/Service/ViewHelper/Field/FieldContentEntryTest.php @@ -0,0 +1,52 @@ +assertSame($field, $fieldContextEntry->getField()); + } + + /** + * @test + */ + public function setFieldOptionSetsFieldOption() + { + $fieldContextEntry = new FieldContextEntry(new Field); + + $fieldContextEntry->setOption('foo', 'bar'); + $this->assertEquals( + ['foo' => 'bar'], + $fieldContextEntry->getOptions() + ); + + $fieldContextEntry->setOption('bar', 'baz'); + $this->assertEquals( + [ + 'foo' => 'bar', + 'bar' => 'baz' + ], + $fieldContextEntry->getOptions() + ); + + $fieldContextEntry->setOption('foo', 'baz'); + $this->assertEquals( + [ + 'foo' => 'baz', + 'bar' => 'baz' + ], + $fieldContextEntry->getOptions() + ); + } +} diff --git a/Tests/Unit/Service/ViewHelper/Field/FieldViewHelperServiceTest.php b/Tests/Unit/Service/ViewHelper/Field/FieldViewHelperServiceTest.php index d49e05c..b8ff9b6 100644 --- a/Tests/Unit/Service/ViewHelper/Field/FieldViewHelperServiceTest.php +++ b/Tests/Unit/Service/ViewHelper/Field/FieldViewHelperServiceTest.php @@ -11,7 +11,7 @@ class FieldViewHelperServiceTest extends AbstractUnitTest /** * @test */ - public function formContextActivatedTwiceThrowsException() + public function setCurrentFieldSetsCurrentField() { $fieldService = new FieldViewHelperService; $field = new Field; @@ -25,51 +25,35 @@ public function formContextActivatedTwiceThrowsException() /** * @test */ - public function setFieldOptionSetsFieldOption() + public function resetStateResetsState() { $fieldService = new FieldViewHelperService; + $field = new Field; + + $this->assertFalse($fieldService->fieldContextExists()); + $fieldService->setCurrentField($field); + $this->assertTrue($fieldService->fieldContextExists()); - $fieldService->setFieldOption('foo', 'bar'); - $this->assertEquals( - ['foo' => 'bar'], - $fieldService->getFieldOptions() - ); - - $fieldService->setFieldOption('bar', 'baz'); - $this->assertEquals( - [ - 'foo' => 'bar', - 'bar' => 'baz' - ], - $fieldService->getFieldOptions() - ); - - $fieldService->setFieldOption('foo', 'baz'); - $this->assertEquals( - [ - 'foo' => 'baz', - 'bar' => 'baz' - ], - $fieldService->getFieldOptions() - ); + $fieldService->removeCurrentField(); + + $this->assertFalse($fieldService->fieldContextExists()); } /** * @test */ - public function resetStateResetsState() + public function nestingFieldsWorks() { $fieldService = new FieldViewHelperService; - $field = new Field; - - $fieldService->setCurrentField($field); - $fieldService->setFieldOption('foo', 'bar'); - - $fieldService->resetState(); - - $this->assertFalse($fieldService->fieldContextExists()); - $this->assertNull($fieldService->getCurrentField()); - $this->assertEmpty($fieldService->getFieldOptions()); + $field1 = new Field; + $field2 = new Field; + + $fieldService->setCurrentField($field1); + $this->assertSame($field1, $fieldService->getCurrentField()); + $fieldService->setCurrentField($field2); + $this->assertSame($field2, $fieldService->getCurrentField()); + $fieldService->removeCurrentField(); + $this->assertSame($field1, $fieldService->getCurrentField()); } /** diff --git a/Tests/Unit/Service/ViewHelper/Slot/SlotContextEntryTest.php b/Tests/Unit/Service/ViewHelper/Slot/SlotContextEntryTest.php new file mode 100644 index 0000000..0ac919f --- /dev/null +++ b/Tests/Unit/Service/ViewHelper/Slot/SlotContextEntryTest.php @@ -0,0 +1,183 @@ + 'bar']; + $barClosure = function () { + return 'bar'; + }; + $barArguments = ['bar' => 'baz']; + + $this->assertFalse($contextEntry->hasSlot('foo')); + $contextEntry->addSlot('foo', $fooClosure, $fooArguments); + $this->assertTrue($contextEntry->hasSlot('foo')); + $this->assertSame($fooClosure, $contextEntry->getSlotClosure('foo')); + $this->assertEquals($fooArguments, $contextEntry->getSlotArguments('foo')); + + $this->assertFalse($contextEntry->hasSlot('bar')); + $contextEntry->addSlot('bar', $barClosure, $barArguments); + $this->assertTrue($contextEntry->hasSlot('bar')); + $this->assertSame($barClosure, $contextEntry->getSlotClosure('bar')); + $this->assertEquals($barArguments, $contextEntry->getSlotArguments('bar')); + } + + /** + * Checks that arguments declared for both the slot view helper and the + * render view helper are merged and added to the template variable + * container. + * + * @test + */ + public function templateVariablesAreAdded() + { + /** @var RenderingContext|\PHPUnit_Framework_MockObject_MockObject $renderingContext */ + $renderingContext = $this->getMockBuilder(RenderingContext::class) + ->setMethods(['getTemplateVariableContainer']) + ->getMock(); + + $templateVariableContainerMock = $this->getMockBuilder(TemplateVariableContainer::class) + ->setMethods(['add', 'remove']) + ->getMock(); + + $templateVariableContainerMock->expects($this->at(0)) + ->method('add') + ->with('bar', 'baz'); + $templateVariableContainerMock->expects($this->at(1)) + ->method('add') + ->with('foo', 'bar'); + + $renderingContext + ->method('getTemplateVariableContainer') + ->willReturn($templateVariableContainerMock); + + $contextEntry = new SlotContextEntry($renderingContext); + $emptyClosure = function () { + }; + $contextEntry->addSlot('foo', $emptyClosure, ['foo' => 'bar']); + + $contextEntry->addTemplateVariables( + 'foo', + ['bar' => 'baz'] + ); + } + + /** + * Checks that the arguments given in the render view helper are overridden + * by the ones given in the slot view helper before being added to the + * template variable container. + * + * @test + */ + public function templateVariablesAreOverriddenThenAdded() + { + /** @var RenderingContext|\PHPUnit_Framework_MockObject_MockObject $renderingContext */ + $renderingContext = $this->getMockBuilder(RenderingContext::class) + ->setMethods(['getTemplateVariableContainer']) + ->getMock(); + + $templateVariableContainerMock = $this->getMockBuilder(TemplateVariableContainer::class) + ->setMethods(['add']) + ->getMock(); + + $templateVariableContainerMock->expects($this->once()) + ->method('add') + ->with('foo', 'bar'); + + $renderingContext + ->method('getTemplateVariableContainer') + ->willReturn($templateVariableContainerMock); + + $contextEntry = new SlotContextEntry($renderingContext); + $emptyClosure = function () { + }; + $contextEntry->addSlot('foo', $emptyClosure, ['foo' => 'bar']); + + $contextEntry->addTemplateVariables( + 'foo', + ['foo' => 'baz'] + ); + } + + /** + * @test + */ + public function templateVariablesAreProperlyRestored() + { + /** @var RenderingContext|\PHPUnit_Framework_MockObject_MockObject $renderingContext */ + $renderingContext = $this->getMockBuilder(RenderingContext::class) + ->setMethods(['getTemplateVariableContainer']) + ->getMock(); + + $templateVariableContainer = new TemplateVariableContainer; + $templateVariableContainer->add('foo', 'foo'); + + $renderingContext + ->method('getTemplateVariableContainer') + ->willReturn($templateVariableContainer); + + $contextEntry = new SlotContextEntry($renderingContext); + $emptyClosure = function () { + }; + $contextEntry->addSlot('foo', $emptyClosure, ['foo' => 'bar']); + + $this->assertFalse($templateVariableContainer->exists('bar')); + $this->assertEquals( + 'foo', + $templateVariableContainer->get('foo') + ); + + $contextEntry->addTemplateVariables('foo', ['bar' => 'baz']); + + $this->assertTrue($templateVariableContainer->exists('bar')); + $this->assertEquals( + 'bar', + $templateVariableContainer->get('foo') + ); + + $contextEntry->restoreTemplateVariables('foo'); + + $this->assertFalse($templateVariableContainer->exists('bar')); + $this->assertEquals( + 'foo', + $templateVariableContainer->get('foo') + ); + } + + /** + * @test + */ + public function getNotFoundSlotClosureThrowsException() + { + $this->setExpectedException(EntryNotFoundException::class); + + $contextEntry = new SlotContextEntry(new RenderingContext); + $contextEntry->getSlotClosure('bar'); + } + + /** + * @test + */ + public function getNotFoundSlotArgumentsThrowsException() + { + $this->setExpectedException(EntryNotFoundException::class); + + $contextEntry = new SlotContextEntry(new RenderingContext); + $contextEntry->getSlotArguments('bar'); + } +} diff --git a/Tests/Unit/Service/ViewHelper/Slot/SlotViewHelperServiceTest.php b/Tests/Unit/Service/ViewHelper/Slot/SlotViewHelperServiceTest.php index 3da1a32..9417c02 100644 --- a/Tests/Unit/Service/ViewHelper/Slot/SlotViewHelperServiceTest.php +++ b/Tests/Unit/Service/ViewHelper/Slot/SlotViewHelperServiceTest.php @@ -1,196 +1,34 @@ 'bar']; - $barClosure = function () { - return 'bar'; + + $closure = function () { }; - $barArguments = ['bar' => 'baz']; - $this->assertFalse($slotService->hasSlot('foo')); - $slotService->addSlot('foo', $fooClosure, $fooArguments, new RenderingContext); + $slotService->activate(new RenderingContext); + $slotService->addSlot('foo', $closure, []); $this->assertTrue($slotService->hasSlot('foo')); - $this->assertSame($fooClosure, $slotService->getSlotClosure('foo')); - $this->assertEquals($fooArguments, $slotService->getSlotArguments('foo')); - $this->assertFalse($slotService->hasSlot('bar')); - $slotService->addSlot('bar', $barClosure, $barArguments, new RenderingContext); + $slotService->activate(new RenderingContext); + $this->assertFalse($slotService->hasSlot('foo')); + $slotService->addSlot('bar', $closure, []); $this->assertTrue($slotService->hasSlot('bar')); - $this->assertSame($barClosure, $slotService->getSlotClosure('bar')); - $this->assertEquals($barArguments, $slotService->getSlotArguments('bar')); - } - - /** - * Checks that arguments declared for both the slot view helper and the - * render view helper are merged and added to the template variable - * container. - * - * @test - */ - public function templateVariablesAreAdded() - { - $renderingContext = $this->getMockBuilder(RenderingContext::class) - ->setMethods(['getTemplateVariableContainer']) - ->getMock(); - - $templateVariableContainerMock = $this->getMockBuilder(TemplateVariableContainer::class) - ->setMethods(['add', 'remove']) - ->getMock(); - - $templateVariableContainerMock->expects($this->at(0)) - ->method('add') - ->with('bar', 'baz'); - $templateVariableContainerMock->expects($this->at(1)) - ->method('add') - ->with('foo', 'bar'); - - $renderingContext - ->method('getTemplateVariableContainer') - ->willReturn($templateVariableContainerMock); - - $slotService = new SlotViewHelperService; - $emptyClosure = function () { - }; - $slotService->addSlot('foo', $emptyClosure, ['foo' => 'bar'], $renderingContext); - - $slotService->addTemplateVariables( - 'foo', - ['bar' => 'baz'] - ); - } - - /** - * Checks that the arguments given in the render view helper are overridden - * by the ones given in the slot view helper before being added to the - * template variable container. - * - * @test - */ - public function templateVariablesAreOverriddenThenAdded() - { - $renderingContext = $this->getMockBuilder(RenderingContext::class) - ->setMethods(['getTemplateVariableContainer']) - ->getMock(); - - $templateVariableContainerMock = $this->getMockBuilder(TemplateVariableContainer::class) - ->setMethods(['add']) - ->getMock(); - - $templateVariableContainerMock->expects($this->once()) - ->method('add') - ->with('foo', 'bar'); - - $renderingContext - ->method('getTemplateVariableContainer') - ->willReturn($templateVariableContainerMock); - - $slotService = new SlotViewHelperService; - $emptyClosure = function () { - }; - $slotService->addSlot('foo', $emptyClosure, ['foo' => 'bar'], $renderingContext); - - $slotService->addTemplateVariables( - 'foo', - ['foo' => 'baz'] - ); - } - - /** - * @test - */ - public function templateVariablesAreProperlyRestored() - { - $renderingContext = $this->getMockBuilder(RenderingContext::class) - ->setMethods(['getTemplateVariableContainer']) - ->getMock(); - $templateVariableContainer = new TemplateVariableContainer; - $templateVariableContainer->add('foo', 'foo'); - - $renderingContext - ->method('getTemplateVariableContainer') - ->willReturn($templateVariableContainer); - - $slotService = new SlotViewHelperService; - $emptyClosure = function () { - }; - $slotService->addSlot('foo', $emptyClosure, ['foo' => 'bar'], $renderingContext); - - $this->assertFalse($templateVariableContainer->exists('bar')); - $this->assertEquals( - 'foo', - $templateVariableContainer->get('foo') - ); - - $slotService->addTemplateVariables('foo', ['bar' => 'baz']); - - $this->assertTrue($templateVariableContainer->exists('bar')); - $this->assertEquals( - 'bar', - $templateVariableContainer->get('foo') - ); - - $slotService->restoreTemplateVariables('foo'); - - $this->assertFalse($templateVariableContainer->exists('bar')); - $this->assertEquals( - 'foo', - $templateVariableContainer->get('foo') - ); - } - - /** - * @test - */ - public function resetStateResetsState() - { - $slotService = new SlotViewHelperService; - $fooClosure = function () { - return 'foo'; - }; - - $slotService->addSlot('foo', $fooClosure, [], new RenderingContext); $slotService->resetState(); - - $this->assertFalse($slotService->hasSlot('foo')); - } - - /** - * @test - */ - public function getNotFoundSlotClosureThrowsException() - { - $this->setExpectedException(EntryNotFoundException::class); - - $slotService = new SlotViewHelperService; - $slotService->getSlotClosure('bar'); - } - - /** - * @test - */ - public function getNotFoundSlotArgumentsThrowsException() - { - $this->setExpectedException(EntryNotFoundException::class); - - $slotService = new SlotViewHelperService; - $slotService->getSlotArguments('bar'); + $this->assertFalse($slotService->hasSlot('bar')); + $this->assertTrue($slotService->hasSlot('foo')); } } diff --git a/Tests/Unit/ViewHelpers/FieldViewHelperTest.php b/Tests/Unit/ViewHelpers/FieldViewHelperTest.php index 2d117ed..02f73c1 100644 --- a/Tests/Unit/ViewHelpers/FieldViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/FieldViewHelperTest.php @@ -53,11 +53,7 @@ public function renderViewHelper($fieldName, $layoutName, FormObject $formObject ->method('formContextExists') ->willReturn(true); - $fieldServiceMock = $this->getMockedFieldService(); - $viewHelper->injectFieldService($fieldServiceMock); - $fieldServiceMock->expects($this->once()) - ->method('setCurrentField') - ->with($formObject->getConfiguration()->getField($fieldName)); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); @@ -153,7 +149,7 @@ public function renderNotExistingFieldThrowsException() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); $viewHelper->setArguments(['name' => 'bar']); @@ -181,7 +177,7 @@ public function renderFieldWithInvalidLayoutNameTypeThrowsException() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); @@ -212,7 +208,7 @@ public function renderFieldWithEmptyLayoutNameThrowsException() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); @@ -245,7 +241,7 @@ public function renderFieldWithNotExistingLayoutNameThrowsException() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); @@ -278,7 +274,7 @@ public function renderFieldWithNotExistingLayoutItemNameThrowsException() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $viewHelper->setRenderingContext($this->getMockedRenderingContext()); @@ -314,7 +310,7 @@ public function originalArgumentsAreRestoredAfterViewHelperIsRendered() ->setMethods(['renderChildren']) ->getMock(); $viewHelper->injectFormService($this->getMockedFormService($formObject)); - $viewHelper->injectFieldService($this->getMockedFieldService()); + $viewHelper->injectFieldService(new FieldViewHelperService); $viewHelper->injectSlotService(new SlotViewHelperService); $renderingContextMock = $this->getMockedRenderingContext(); @@ -429,18 +425,6 @@ protected function getMockedFormService(FormObject $formObject) return $formService; } - /** - * @return FieldViewHelperService|\PHPUnit_Framework_MockObject_MockObject - */ - protected function getMockedFieldService() - { - $fieldService = $this->getMockBuilder(FieldViewHelperService::class) - ->setMethods(['setCurrentField']) - ->getMock(); - - return $fieldService; - } - /** * @return RenderingContext|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/Tests/Unit/ViewHelpers/Slot/RenderViewHelperTest.php b/Tests/Unit/ViewHelpers/Slot/RenderViewHelperTest.php index f76b350..e785657 100644 --- a/Tests/Unit/ViewHelpers/Slot/RenderViewHelperTest.php +++ b/Tests/Unit/ViewHelpers/Slot/RenderViewHelperTest.php @@ -17,7 +17,7 @@ class RenderViewHelperTest extends AbstractViewHelperUnitTest */ public function renderViewHelper() { - $slotArgument = 'foo-slot'; + $slotName = 'foo-slot'; /** @var FieldViewHelperService|\PHPUnit_Framework_MockObject_MockObject $fieldService */ $fieldService = $this->getMockBuilder(FieldViewHelperService::class) @@ -29,21 +29,25 @@ public function renderViewHelper() /** @var SlotViewHelperService|\PHPUnit_Framework_MockObject_MockObject $slotService */ $slotService = $this->getMockBuilder(SlotViewHelperService::class) - ->setMethods(['getSlotClosure', 'getSlotArguments', 'hasSlot', 'getTemplateVariableContainer']) + ->setMethods(['getSlotClosure', 'hasSlot', 'addTemplateVariables', 'restoreTemplateVariables']) ->getMock(); $slotService->expects($this->once()) ->method('hasSlot') - ->with($slotArgument) + ->with($slotName) ->willReturn(true); $slotService->expects($this->once()) ->method('getSlotClosure') - ->with($slotArgument) + ->with($slotName) ->willReturn(function () { return 'foo'; }); $slotService->expects($this->once()) - ->method('getSlotArguments') - ->with($slotArgument) + ->method('addTemplateVariables') + ->with($slotName) + ->willReturn([]); + $slotService->expects($this->once()) + ->method('restoreTemplateVariables') + ->with($slotName) ->willReturn([]); UnitTestContainer::get()->registerMockedInstance(SlotViewHelperService::class, $slotService); @@ -52,7 +56,7 @@ public function renderViewHelper() $this->injectDependenciesIntoViewHelper($viewHelper); $viewHelper->injectFieldService($fieldService); $viewHelper->setArguments([ - 'slot' => $slotArgument, + 'slot' => $slotName, 'arguments' => [] ]); $viewHelper->initializeArguments(); @@ -74,7 +78,8 @@ public function argumentsAreAddedThenRemoved() ->getMock(); $emptyClosure = function () { }; - $slotService->addSlot('foo', $emptyClosure, ['foo' => 'bar'], new RenderingContext); + $slotService->activate(new RenderingContext); + $slotService->addSlot('foo', $emptyClosure, ['foo' => 'bar']); $slotService->expects($this->once()) ->method('addTemplateVariables');