3 namespace Drupal\Tests\Core\Form;
5 use Drupal\Core\Form\FormInterface;
6 use Drupal\Core\Form\FormStateDecoratorBase;
7 use Drupal\Core\Form\FormStateInterface;
9 use Drupal\Tests\UnitTestCase;
10 use Symfony\Component\HttpFoundation\RedirectResponse;
11 use Symfony\Component\HttpFoundation\Response;
14 * @coversDefaultClass \Drupal\Core\Form\FormStateDecoratorBase
18 class FormStateDecoratorBaseTest extends UnitTestCase {
21 * The decorated form state.
23 * @var \Drupal\Core\Form\FormStateInterface|\Prophecy\Prophecy\ObjectProphecy
25 protected $decoratedFormState;
28 * The form state decorator base under test.
30 * @var \Drupal\Core\Form\FormStateDecoratorBase
32 protected $formStateDecoratorBase;
37 public function setUp() {
40 $this->decoratedFormState = $this->prophesize(FormStateInterface::class);
42 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($this->decoratedFormState->reveal());
46 * Provides data to test methods that take a single boolean argument.
48 public function providerSingleBooleanArgument() {
56 * @covers ::setFormState
58 public function testSetFormState() {
59 $form_state_additions = [
63 $this->decoratedFormState->setFormState($form_state_additions)
66 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setFormState($form_state_additions));
70 * @covers ::setAlwaysProcess
72 * @dataProvider providerSingleBooleanArgument
74 * @param bool $always_process
76 public function testSetAlwaysProcess($always_process) {
77 $this->decoratedFormState->setAlwaysProcess($always_process)
80 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setAlwaysProcess($always_process));
84 * @covers ::getAlwaysProcess
86 * @dataProvider providerSingleBooleanArgument
88 * @param bool $always_process
90 public function testGetAlwaysProcess($always_process) {
91 $this->decoratedFormState->getAlwaysProcess()
92 ->willReturn($always_process)
95 $this->assertSame($always_process, $this->formStateDecoratorBase->getAlwaysProcess());
99 * @covers ::setButtons
101 public function testSetButtons() {
106 $this->decoratedFormState->setButtons($buttons)
109 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setButtons($buttons));
113 * @covers ::getButtons
115 public function testGetButtons() {
120 $this->decoratedFormState->getButtons()
121 ->willReturn($buttons)
124 $this->assertSame($buttons, $this->formStateDecoratorBase->getButtons());
128 * @covers ::setCached
130 * @dataProvider providerSingleBooleanArgument
134 public function testSetCached($cache) {
135 $this->decoratedFormState->setCached($cache)
138 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setCached($cache));
144 * @dataProvider providerSingleBooleanArgument
148 public function testIsCached($cache) {
149 $this->decoratedFormState->isCached()
152 $this->assertSame($cache, $this->formStateDecoratorBase->isCached());
156 * @covers ::setCached
158 * @dataProvider providerSingleBooleanArgument
162 public function testSetCachedWithLogicException($cache) {
163 $this->decoratedFormState->setCached($cache)
164 ->willThrow(\LogicException::class);
165 $this->setExpectedException(\LogicException::class);
166 $this->formStateDecoratorBase->setCached($cache);
170 * @covers ::disableCache
172 public function testDisableCache() {
173 $this->decoratedFormState->disableCache()
176 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->disableCache());
180 * @covers ::setExecuted
182 public function testSetExecuted() {
183 $this->decoratedFormState->setExecuted()
186 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setExecuted());
190 * @covers ::isExecuted
192 * @dataProvider providerSingleBooleanArgument
194 * @param bool $executed
196 public function testIsExecuted($executed) {
197 $this->decoratedFormState->isExecuted()
198 ->willReturn($executed)
201 $this->assertSame($executed, $this->formStateDecoratorBase->isExecuted());
205 * @covers ::setGroups
207 public function testSetGroups() {
212 $this->decoratedFormState->setGroups($groups)
215 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setGroups($groups));
219 * @covers ::getGroups
221 public function testGetGroups() {
226 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
227 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
228 $decorated_form_state = $this->getMock(FormStateInterface::class);
229 $decorated_form_state->expects($this->once())
230 ->method('getGroups')
231 ->willReturn($groups);
233 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
235 $this->assertSame($groups, $this->formStateDecoratorBase->getGroups());
239 * @covers ::setHasFileElement
241 * @dataProvider providerSingleBooleanArgument
243 * @param bool $has_file_element
245 public function testSetHasFileElement($has_file_element) {
246 $this->decoratedFormState->setHasFileElement($has_file_element)
249 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setHasFileElement($has_file_element));
253 * @covers ::hasFileElement
255 * @dataProvider providerSingleBooleanArgument
257 * @param bool $has_file_element
259 public function testHasFileElement($has_file_element) {
260 $this->decoratedFormState->hasFileElement()
261 ->willReturn($has_file_element)
264 $this->assertSame($has_file_element, $this->formStateDecoratorBase->hasFileElement());
268 * @covers ::setLimitValidationErrors
270 * @dataProvider providerLimitValidationErrors
272 * @param array[]|null $limit_validation_errors
273 * Any valid value for
274 * \Drupal\Core\Form\FormStateInterface::setLimitValidationErrors()'s
275 * $limit_validation_errors argument;
277 public function testSetLimitValidationErrors($limit_validation_errors) {
278 $this->decoratedFormState->setLimitValidationErrors($limit_validation_errors)
281 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setLimitValidationErrors($limit_validation_errors));
285 * @covers ::getLimitValidationErrors
287 * @dataProvider providerLimitValidationErrors
289 * @param array[]|null $limit_validation_errors
290 * Any valid vlaue for
291 * \Drupal\Core\Form\FormStateInterface::getLimitValidationErrors()'s
294 public function testGetLimitValidationErrors($limit_validation_errors) {
295 $this->decoratedFormState->getLimitValidationErrors()
296 ->willReturn($limit_validation_errors)
299 $this->assertSame($limit_validation_errors, $this->formStateDecoratorBase->getLimitValidationErrors());
303 * Provides data to self::testGetLimitValidationErrors() and self::testGetLimitValidationErrors().
305 public function providerLimitValidationErrors() {
310 ['foo', 'bar', 'baz'],
317 * @covers ::setMethod
319 * @dataProvider providerSingleBooleanArgument
321 * @param bool $method
323 public function testSetMethod($method) {
324 $this->decoratedFormState->setMethod($method)
327 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setMethod($method));
331 * @covers ::isMethodType
333 * @dataProvider providerIsMethodType
335 * @param bool $expected_return_value
336 * @param string $method_type
337 * Either "GET" or "POST".
339 public function testIsMethodType($expected_return_value, $method_type) {
340 $this->decoratedFormState->isMethodType($method_type)
341 ->willReturn($expected_return_value)
344 $this->assertSame($expected_return_value, $this->formStateDecoratorBase->isMethodType($method_type));
348 * Provides data to self::testIsMethodType().
350 public function providerIsMethodType() {
360 * @covers ::setRequestMethod
362 * @dataProvider providerSetRequestMethod
364 * @param bool $method
366 public function testSetRequestMethod($method) {
367 $this->decoratedFormState->setRequestMethod($method)
370 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setRequestMethod($method));
374 * Provides data to self::testSetMethod().
376 public function providerSetRequestMethod() {
384 * @covers ::setValidationEnforced
386 * @dataProvider providerSingleBooleanArgument
388 * @param bool $must_validate
390 public function testSetValidationEnforced($must_validate) {
391 $this->decoratedFormState->setValidationEnforced($must_validate)
394 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValidationEnforced($must_validate));
398 * @covers ::isValidationEnforced
400 * @dataProvider providerSingleBooleanArgument
402 * @param bool $must_validate
404 public function testIsValidationEnforced($must_validate) {
405 $this->decoratedFormState->isValidationEnforced()
406 ->willReturn($must_validate)
409 $this->assertSame($must_validate, $this->formStateDecoratorBase->isValidationEnforced());
413 * @covers ::disableRedirect
415 * @dataProvider providerSingleBooleanArgument
417 * @param bool $no_redirect
419 public function testDisableRedirect($no_redirect) {
420 $this->decoratedFormState->disableRedirect($no_redirect)
423 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->disableRedirect($no_redirect));
427 * @covers ::isRedirectDisabled
429 * @dataProvider providerSingleBooleanArgument
431 * @param bool $no_redirect
433 public function testIsRedirectDisabled($no_redirect) {
434 $this->decoratedFormState->isRedirectDisabled()
435 ->willReturn($no_redirect)
438 $this->assertSame($no_redirect, $this->formStateDecoratorBase->isRedirectDisabled());
442 * @covers ::setProcessInput
444 * @dataProvider providerSingleBooleanArgument
446 * @param bool $process_input
448 public function testSetProcessInput($process_input) {
449 $this->decoratedFormState->setProcessInput($process_input)
452 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setProcessInput($process_input));
456 * @covers ::isProcessingInput
458 * @dataProvider providerSingleBooleanArgument
460 * @param bool $process_input
462 public function testIsProcessingInput($process_input) {
463 $this->decoratedFormState->isProcessingInput()
464 ->willReturn($process_input)
467 $this->assertSame($process_input, $this->formStateDecoratorBase->isProcessingInput());
471 * @covers ::setProgrammed
473 * @dataProvider providerSingleBooleanArgument
475 * @param bool $programmed
477 public function testSetProgrammed($programmed) {
478 $this->decoratedFormState->setProgrammed($programmed)
481 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setProgrammed($programmed));
485 * @covers ::isProgrammed
487 * @dataProvider providerSingleBooleanArgument
489 * @param bool $programmed
491 public function testIsProgrammed($programmed) {
492 $this->decoratedFormState->isProgrammed()
493 ->willReturn($programmed)
496 $this->assertSame($programmed, $this->formStateDecoratorBase->isProgrammed());
500 * @covers ::setProgrammedBypassAccessCheck
502 * @dataProvider providerSingleBooleanArgument
504 * @param bool $programmed_bypass_access_check
506 public function testSetProgrammedBypassAccessCheck($programmed_bypass_access_check) {
507 $this->decoratedFormState->setProgrammedBypassAccessCheck($programmed_bypass_access_check)
510 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setProgrammedBypassAccessCheck($programmed_bypass_access_check));
514 * @covers ::isBypassingProgrammedAccessChecks
516 * @dataProvider providerSingleBooleanArgument
518 * @param bool $programmed_bypass_access_check
520 public function testIsBypassingProgrammedAccessChecks($programmed_bypass_access_check) {
521 $this->decoratedFormState->isBypassingProgrammedAccessChecks()
522 ->willReturn($programmed_bypass_access_check)
525 $this->assertSame($programmed_bypass_access_check, $this->formStateDecoratorBase->isBypassingProgrammedAccessChecks());
529 * @covers ::setRebuildInfo
531 public function testSetRebuildInfo() {
536 $this->decoratedFormState->setRebuildInfo($rebuild_info)
539 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setRebuildInfo($rebuild_info));
543 * @covers ::getRebuildInfo
545 public function testGetRebuildInfo() {
550 $this->decoratedFormState->getRebuildInfo()
551 ->willReturn($rebuild_info)
554 $this->assertSame($rebuild_info, $this->formStateDecoratorBase->getRebuildInfo());
558 * @covers ::addRebuildInfo
560 public function testAddRebuildInfo() {
564 $this->decoratedFormState->addRebuildInfo($property, $value);
566 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->addRebuildInfo($property, $value));
570 * @covers ::setStorage
572 public function testSetStorage() {
577 $this->decoratedFormState->setStorage($storage)
580 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setStorage($storage));
584 * @covers ::getStorage
586 public function testGetStorage() {
591 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
592 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
593 $decorated_form_state = $this->getMock(FormStateInterface::class);
594 $decorated_form_state->expects($this->once())
595 ->method('getStorage')
596 ->willReturn($storage);
598 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
600 $this->assertSame($storage, $this->formStateDecoratorBase->getStorage());
604 * @covers ::setSubmitHandlers
606 public function testSetSubmitHandlers() {
611 $this->decoratedFormState->setSubmitHandlers($submit_handlers)
614 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setSubmitHandlers($submit_handlers));
618 * @covers ::getSubmitHandlers
620 public function testGetSubmitHandlers() {
625 $this->decoratedFormState->getSubmitHandlers()
626 ->willReturn($submit_handlers)
629 $this->assertSame($submit_handlers, $this->formStateDecoratorBase->getSubmitHandlers());
633 * @covers ::setSubmitted
635 public function testSetSubmitted() {
636 $this->decoratedFormState->setSubmitted()
639 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setSubmitted());
643 * @covers ::isSubmitted
645 * @dataProvider providerSingleBooleanArgument
647 * @param bool $submitted
649 public function testIsSubmitted($submitted) {
650 $this->decoratedFormState->isSubmitted()
651 ->willReturn($submitted);
653 $this->assertSame($submitted, $this->formStateDecoratorBase->isSubmitted());
657 * @covers ::setTemporary
659 public function testSetTemporary() {
664 $this->decoratedFormState->setTemporary($temporary)
667 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setTemporary($temporary));
671 * @covers ::getTemporary
673 public function testGetTemporary() {
678 $this->decoratedFormState->getTemporary()
679 ->willReturn($temporary)
682 $this->assertSame($temporary, $this->formStateDecoratorBase->getTemporary());
686 * @covers ::setTemporaryValue
688 * @dataProvider providerSetTemporaryValue
691 * @param mixed $value
693 public function testSetTemporaryValue($key, $value) {
694 $this->decoratedFormState->setTemporaryValue($key, $value)
697 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setTemporaryValue($key, $value));
701 * Provides data to self::testSetTemporaryValue().
703 public function providerSetTemporaryValue() {
711 * @covers ::getTemporaryValue
713 * @dataProvider providerGetTemporaryValue
716 * @param mixed $value
718 public function testGetTemporaryValue($key, $value = NULL) {
719 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
720 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
721 $decorated_form_state = $this->getMock(FormStateInterface::class);
722 $decorated_form_state->expects($this->once())
723 ->method('getTemporaryValue')
725 ->willReturn($value);
727 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
729 $this->assertSame($value, $this->formStateDecoratorBase->getTemporaryValue($key));
733 * Provides data to self::testGetTemporaryValue().
735 public function providerGetTemporaryValue() {
737 [TRUE, 'FOO', 'BAR'],
743 * @covers ::hasTemporaryValue
745 * @dataProvider providerHasTemporaryValue
747 * @param bool $exists
750 public function testHasTemporaryValue($exists, $key) {
751 $this->decoratedFormState->hasTemporaryValue($key)
752 ->willReturn($exists)
755 $this->assertSame($exists, $this->formStateDecoratorBase->hasTemporaryValue($key));
759 * Provides data to self::testHasTemporaryValue().
761 public function providerHasTemporaryValue() {
769 * @covers ::setTriggeringElement
771 public function testSetTriggeringElement() {
772 $triggering_element = [
776 $this->decoratedFormState->setTriggeringElement($triggering_element)
779 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setTriggeringElement($triggering_element));
783 * @covers ::getTriggeringElement
785 public function testGetTriggeringElement() {
786 $triggering_element = [
790 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
791 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
792 $decorated_form_state = $this->getMock(FormStateInterface::class);
793 $decorated_form_state->expects($this->once())
794 ->method('getTriggeringElement')
795 ->willReturn($triggering_element);
797 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
799 $this->assertSame($triggering_element, $this->formStateDecoratorBase->getTriggeringElement());
803 * @covers ::setValidateHandlers
805 public function testSetValidateHandlers() {
806 $validate_handlers = [
810 $this->decoratedFormState->setValidateHandlers($validate_handlers)
813 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValidateHandlers($validate_handlers));
817 * @covers ::getValidateHandlers
819 public function testGetValidateHandlers() {
820 $validate_handlers = [
824 $this->decoratedFormState->getValidateHandlers()
825 ->willReturn($validate_handlers)
828 $this->assertSame($validate_handlers, $this->formStateDecoratorBase->getValidateHandlers());
832 * @covers ::setValidationComplete
834 * @dataProvider providerSingleBooleanArgument
836 * @param bool $complete
838 public function testSetValidationComplete($complete) {
839 $this->decoratedFormState->setValidationComplete($complete)
842 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValidationComplete($complete));
846 * @covers ::isValidationComplete
848 * @dataProvider providerSingleBooleanArgument
850 * @param bool $complete
852 public function testIsValidationComplete($complete) {
853 $this->decoratedFormState->isValidationComplete()
854 ->willReturn($complete)
857 $this->assertSame($complete, $this->formStateDecoratorBase->isValidationComplete());
861 * @covers ::loadInclude
863 * @dataProvider providerLoadInclude
865 * @param string|false $expected
866 * @param string $module
867 * @param string $type
868 * @param string|null $name
870 public function testLoadInclude($expected, $module, $type, $name) {
871 $this->decoratedFormState->loadInclude($module, $type, $name)
872 ->willReturn($expected)
875 $this->assertSame($expected, $this->formStateDecoratorBase->loadInclude($module, $type, $name));
879 * Provides data to self::testLoadInclude().
881 public function providerLoadInclude() {
884 [__FILE__, 'foo', 'inc', 'foo'],
885 [__FILE__, 'foo', 'inc', 'foo.admin'],
886 [__FILE__, 'bar', 'inc', 'bar'],
887 // Non-existent files.
888 [FALSE, 'foo', 'php', 'foo'],
889 [FALSE, 'bar', 'php', 'foo'],
894 * @covers ::getCacheableArray
896 public function testGetCacheableArray() {
901 $this->decoratedFormState->getCacheableArray()
902 ->willReturn($cacheable_array)
905 $this->assertSame($cacheable_array, $this->formStateDecoratorBase->getCacheableArray());
909 * @covers ::setCompleteForm
911 public function testSetCompleteForm() {
916 $this->decoratedFormState->setCompleteForm($complete_form)
919 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setCompleteForm($complete_form));
923 * @covers ::getCompleteForm
925 public function testGetCompleteForm() {
930 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
931 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
932 $decorated_form_state = $this->getMock(FormStateInterface::class);
933 $decorated_form_state->expects($this->once())
934 ->method('getCompleteForm')
935 ->willReturn($complete_form);
937 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
939 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setCompleteForm($complete_form));
940 $this->assertSame($complete_form, $this->formStateDecoratorBase->getCompleteForm());
946 * @dataProvider providerSet
949 * @param mixed $value
951 public function testSet($key, $value) {
952 $this->decoratedFormState->set($key, $value)
955 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->set($key, $value));
959 * Provides data to self::testSet().
961 public function providerSet() {
971 * @dataProvider providerGet
974 * @param mixed $value
976 public function testGet($key, $value = NULL) {
978 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
979 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
980 $decorated_form_state = $this->getMock(FormStateInterface::class);
981 $decorated_form_state->expects($this->once())
984 ->willReturn($value);
986 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
988 $this->assertSame($value, $this->formStateDecoratorBase->get($key));
992 * Provides data to self::testGet().
994 public function providerGet() {
1004 * @dataProvider providerHas
1006 * @param bool $exists
1007 * @param string $key
1009 public function testHas($exists, $key) {
1010 $this->decoratedFormState->has($key)
1011 ->willReturn($exists)
1014 $this->assertSame($exists, $this->formStateDecoratorBase->has($key));
1018 * Provides data to self::testHas().
1020 public function providerHas() {
1028 * @covers ::setBuildInfo
1030 public function testSetBuildInfo() {
1035 $this->decoratedFormState->setBuildInfo($build_info)
1038 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setBuildInfo($build_info));
1042 * @covers ::getBuildInfo
1044 public function testGetBuildInfo() {
1049 $this->decoratedFormState->getBuildInfo()
1050 ->willReturn($build_info)
1053 $this->assertSame($build_info, $this->formStateDecoratorBase->getBuildInfo());
1057 * @covers ::addBuildInfo
1059 public function testAddBuildInfo() {
1063 $this->decoratedFormState->addBuildInfo($property, $value)
1066 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->addBuildInfo($property, $value));
1070 * @covers ::setUserInput
1072 public function testSetUserInput() {
1077 $this->decoratedFormState->setUserInput($user_input)
1080 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setUserInput($user_input));
1084 * @covers ::getUserInput
1086 public function testGetUserInput() {
1091 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
1092 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
1093 $decorated_form_state = $this->getMock(FormStateInterface::class);
1094 $decorated_form_state->expects($this->once())
1095 ->method('getUserInput')
1096 ->willReturn($user_input);
1098 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
1100 $this->assertSame($user_input, $this->formStateDecoratorBase->getUserInput());
1104 * @covers ::getValues
1106 public function testGetValues() {
1111 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
1112 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
1113 $decorated_form_state = $this->getMock(FormStateInterface::class);
1114 $decorated_form_state->expects($this->once())
1115 ->method('getValues')
1116 ->willReturn($values);
1118 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
1120 $this->assertSame($values, $this->formStateDecoratorBase->getValues());
1123 * @covers ::getValue
1125 public function testGetValue() {
1129 // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
1130 // by reference. See \Prophecy\Doubler\Generator\Node::getCode().
1131 $decorated_form_state = $this->getMock(FormStateInterface::class);
1132 $decorated_form_state->expects($this->once())
1133 ->method('getValue')
1134 ->with($key, $value)
1135 ->willReturn($value);
1137 $this->formStateDecoratorBase = new NonAbstractFormStateDecoratorBase($decorated_form_state);
1139 $this->assertSame($value, $this->formStateDecoratorBase->getValue($key, $value));
1143 * @covers ::setValues
1145 public function testSetValues() {
1151 $this->decoratedFormState->setValues($values)
1154 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValues($values));
1158 * @covers ::setValue
1160 public function testSetValue() {
1164 $this->decoratedFormState->setValue($key, $value)
1167 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValue($key, $value));
1171 * @covers ::unsetValue
1173 public function testUnsetValue() {
1176 $this->decoratedFormState->unsetValue($key)
1179 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->unsetValue($key));
1183 * @covers ::hasValue
1185 public function testHasValue() {
1186 $key = ['foo', 'bar'];
1189 $this->decoratedFormState->hasValue($key)
1193 $this->assertSame($has, $this->formStateDecoratorBase->hasValue($key));
1197 * @covers ::isValueEmpty
1199 public function testIsValueEmpty() {
1200 $key = ['foo', 'bar'];
1203 $this->decoratedFormState->isValueEmpty($key)
1204 ->willReturn($is_empty)
1207 $this->assertSame($is_empty, $this->formStateDecoratorBase->isValueEmpty($key));
1211 * @covers ::setValueForElement
1213 public function testSetValueForElement() {
1219 $this->decoratedFormState->setValueForElement($element, $value)
1222 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setValueForElement($element, $value));
1226 * @covers ::setResponse
1228 public function testSetResponse() {
1229 $response = $this->getMock(Response::class);
1231 $this->decoratedFormState->setResponse($response)
1234 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setResponse($response));
1238 * @covers ::getResponse
1240 public function testGetResponse() {
1241 $response = $this->getMock(Response::class);
1243 $this->decoratedFormState->getResponse()
1244 ->willReturn($response)
1247 $this->assertSame($response, $this->formStateDecoratorBase->getResponse());
1251 * @covers ::setRedirect
1253 public function testSetRedirect() {
1254 $route_name = 'foo';
1255 $route_parameters = [
1262 $this->decoratedFormState->setRedirect($route_name, $route_parameters, $options)
1265 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setRedirect($route_name, $route_parameters, $options));
1269 * @covers ::setRedirectUrl
1271 public function testSetRedirectUrl() {
1272 $url = new Url('foo');
1274 $this->decoratedFormState->setRedirectUrl($url)
1277 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setRedirectUrl($url));
1281 * @covers ::getRedirect
1283 * @dataProvider providerGetRedirect
1285 * @param bool $expected
1287 public function testGetRedirect($expected) {
1288 $this->decoratedFormState->getRedirect()
1289 ->willReturn($expected)
1292 $this->assertSame($expected, $this->formStateDecoratorBase->getRedirect());
1296 * Provides data to self::testGetRedirect().
1298 public function providerGetRedirect() {
1303 [new RedirectResponse('http://example.com')],
1308 * @covers ::setErrorByName
1310 public function testSetErrorByName() {
1314 $this->decoratedFormState->setErrorByName($name, $message)
1317 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setErrorByName($name, $message));
1321 * @covers ::setError
1323 public function testSetError() {
1329 $this->decoratedFormState->setError($element, $message)
1332 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setError($element, $message));
1336 * @covers ::clearErrors
1338 public function testClearErrors() {
1339 $this->decoratedFormState->clearErrors()
1342 $this->formStateDecoratorBase->clearErrors();
1346 * @covers ::getError
1348 public function testGetError() {
1354 $this->decoratedFormState->getError($element)
1355 ->willReturn($message)
1358 $this->assertSame($message, $this->formStateDecoratorBase->getError($element));
1362 * @covers ::getErrors
1364 public function testGetErrors() {
1368 $this->decoratedFormState->getErrors()
1369 ->willReturn($errors)
1372 $this->assertSame($errors, $this->formStateDecoratorBase->getErrors());
1376 * @covers ::setRebuild
1378 * @dataProvider providerSingleBooleanArgument
1380 * @param bool $rebuild
1382 public function testSetRebuild($rebuild) {
1383 $this->decoratedFormState->setRebuild($rebuild)
1386 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setRebuild($rebuild));
1390 * @covers ::isRebuilding
1392 * @dataProvider providerSingleBooleanArgument
1394 * @param bool $rebuild
1396 public function testIsRebuilding($rebuild) {
1397 $this->decoratedFormState->isRebuilding()
1398 ->willReturn($rebuild)
1401 $this->assertSame($rebuild, $this->formStateDecoratorBase->isRebuilding());
1405 * @covers ::setInvalidToken
1407 * @dataProvider providerSingleBooleanArgument
1409 * @param bool $expected
1411 public function testSetInvalidToken($expected) {
1412 $this->decoratedFormState->setInvalidToken($expected)
1415 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setInvalidToken($expected));
1419 * @covers ::hasInvalidToken
1421 * @dataProvider providerSingleBooleanArgument
1423 * @param bool $expected
1425 public function testHasInvalidToken($expected) {
1426 $this->decoratedFormState->hasInvalidToken()
1427 ->willReturn($expected)
1430 $this->assertSame($expected, $this->formStateDecoratorBase->hasInvalidToken());
1434 * @covers ::prepareCallback
1436 * @dataProvider providerPrepareCallback
1438 * @param string|callable $unprepared_callback
1439 * @param callable $prepared_callback
1441 public function testPrepareCallback($unprepared_callback, callable $prepared_callback) {
1442 $this->decoratedFormState->prepareCallback($unprepared_callback)
1443 ->willReturn($prepared_callback)
1446 $this->assertSame($prepared_callback, $this->formStateDecoratorBase->prepareCallback($unprepared_callback));
1450 * Provides data to self::testPrepareCallback().
1452 public function providerPrepareCallback() {
1453 $function = 'sleep';
1454 $shorthand_form_method = '::submit()';
1455 $closure = function() {};
1456 $static_method_string = __METHOD__;
1457 $static_method_array = [__CLASS__, __FUNCTION__];
1458 $object_method_array = [$this, __FUNCTION__];
1461 // A shorthand form method is generally expanded to become a method on an
1463 [$shorthand_form_method, $object_method_array],
1464 // Functions, closures, and static method calls generally remain the same.
1465 [$function, $function],
1466 [$closure, $closure],
1467 [$static_method_string, $static_method_string],
1468 [$static_method_array, $static_method_array],
1473 * @covers ::setFormObject
1475 public function testSetFormObject() {
1476 $form = $this->getMock(FormInterface::class);
1478 $this->decoratedFormState->setFormObject($form)
1479 ->shouldBeCalled();;
1481 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setFormObject($form));
1485 * @covers ::getFormObject
1487 public function testGetFormObject() {
1488 $form = $this->getMock(FormInterface::class);
1490 $this->decoratedFormState->getFormObject()
1494 $this->assertSame($form, $this->formStateDecoratorBase->getFormObject());
1498 * @covers ::setCleanValueKeys
1500 public function testSetCleanValueKeys() {
1503 $this->decoratedFormState->setCleanValueKeys($keys)
1506 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->setCleanValueKeys($keys));
1510 * @covers ::getCleanValueKeys
1512 public function testGetCleanValueKeys() {
1515 $this->decoratedFormState->getCleanValueKeys()
1519 $this->assertSame($keys, $this->formStateDecoratorBase->getCleanValueKeys());
1523 * @covers ::addCleanValueKey
1525 public function testAddCleanValueKey() {
1528 $this->decoratedFormState->addCleanValueKey($key)
1531 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->addCleanValueKey($key));
1535 * @covers ::cleanValues
1537 public function testCleanValues() {
1538 $this->decoratedFormState->cleanValues()
1541 $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->cleanValues());
1547 * Provides a non-abstract version of the class under test.
1549 class NonAbstractFormStateDecoratorBase extends FormStateDecoratorBase {
1552 * Creates a new instance.
1554 * @param \Drupal\Core\Form\FormStateInterface $decorated_form_state
1555 * The decorated form state.
1557 public function __construct(FormStateInterface $decorated_form_state) {
1558 $this->decoratedFormState = $decorated_form_state;