‪TYPO3CMS  11.5
SelectViewHelperTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
31 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
32 use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
33 
34 class ‪SelectViewHelperTest extends FunctionalTestCase
35 {
39  public function ‪selectCorrectlySetsTagName(): void
40  {
41  $view = new ‪StandaloneView();
42  $view->setTemplateSource('<f:form.select />');
43  self::assertSame('<select name=""></select>', $view->render());
44  }
45 
49  public function ‪selectCreatesExpectedOptions(): void
50  {
51  $view = new ‪StandaloneView();
52  $view->setTemplateSource('<f:form.select name="myName" value="value2" options="{value1: \"label1\", value2: \"label2\"}" />');
53  $expected = '<select name="myName"><option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '</select>';
54  self::assertSame($expected, $view->render());
55  }
56 
61  {
62  $view = new ‪StandaloneView();
63  $view->setTemplateSource('<f:form.select name="myName" required="true" value="value2" options="{value1: \"label1\", value2: \"label2\"}" />');
64  $expected = '<select required="required" name="myName"><option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '</select>';
65  self::assertSame($expected, $view->render());
66  }
67 
72  {
73  $options = [
74  [
75  'uid' => 1,
76  'title' => 'Foo',
77  ],
78  [
79  'uid' => -1,
80  'title' => 'Bar',
81  ],
82  [
83  'title' => 'Baz',
84  ],
85  [
86  'uid' => '2',
87  ],
88  ];
89  $view = new ‪StandaloneView();
90  $view->assign('options', $options);
91  $view->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
92  $expected = <<< EOT
93 <select name="myName"><option value="2"></option>
94 <option value="-1">Bar</option>
95 <option value="">Baz</option>
96 <option value="1">Foo</option>
97 </select>
98 EOT;
99  self::assertSame($expected, $view->render());
100  }
101 
106  {
107  $obj1 = new \stdClass();
108  $obj1->uid = 1;
109  $obj1->title = 'Foo';
110 
111  $obj2 = new \stdClass();
112  $obj2->uid = -1;
113  $obj2->title = 'Bar';
114 
115  $obj3 = new \stdClass();
116  $obj3->title = 'Baz';
117 
118  $obj4 = new \stdClass();
119  $obj4->uid = 2;
120 
121  $options = [$obj1, $obj2, $obj3, $obj4];
122 
123  $view = new ‪StandaloneView();
124  $view->assign('options', $options);
125  $view->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
126  $expected = <<< EOT
127 <select name="myName"><option value="2"></option>
128 <option value="-1">Bar</option>
129 <option value="">Baz</option>
130 <option value="1">Foo</option>
131 </select>
132 EOT;
133  self::assertSame($expected, $view->render());
134  }
135 
140  {
141  $options = new \ArrayObject([
142  [
143  'uid' => 1,
144  'title' => 'Foo',
145  ],
146  [
147  'uid' => -1,
148  'title' => 'Bar',
149  ],
150  [
151  'title' => 'Baz',
152  ],
153  [
154  'uid' => '2',
155  ],
156  ]);
157  $view = new ‪StandaloneView();
158  $view->assign('options', $options);
159  $view->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
160  $expected = <<< EOT
161 <select name="myName"><option value="2"></option>
162 <option value="-1">Bar</option>
163 <option value="">Baz</option>
164 <option value="1">Foo</option>
165 </select>
166 EOT;
167  self::assertSame($expected, $view->render());
168  }
169 
174  {
175  $options = [
176  'value3' => 'label3',
177  'value1' => 'label1',
178  'value2' => 'label2',
179  ];
180  $view = new ‪StandaloneView();
181  $view->assign('options', $options);
182  $view->setTemplateSource('<f:form.select name="myName" value="value2" options="{options}" />');
183  $expected = <<< EOT
184 <select name="myName"><option value="value3">label3</option>
185 <option value="value1">label1</option>
186 <option value="value2" selected="selected">label2</option>
187 </select>
188 EOT;
189  self::assertSame($expected, $view->render());
190  }
191 
196  {
197  $options = [
198  'value3' => 'label3',
199  'value1' => 'label1',
200  'value2' => 'label2',
201  ];
202  $view = new ‪StandaloneView();
203  $view->assign('options', $options);
204  $view->setTemplateSource('<f:form.select name="myName" sortByOptionLabel="true" value="value2" options="{options}" />');
205  $expected = <<< EOT
206 <select name="myName"><option value="value1">label1</option>
207 <option value="value2" selected="selected">label2</option>
208 <option value="value3">label3</option>
209 </select>
210 EOT;
211  self::assertSame($expected, $view->render());
212  }
213 
218  {
219  $options = [
220  'value1' => 'label1',
221  'value2' => 'label2',
222  'value3' => 'label3',
223  ];
224  $value = ['value3', 'value1'];
225  $view = new ‪StandaloneView();
226  $view->assign('options', $options);
227  $view->assign('value', $value);
228  $view->setTemplateSource('<f:form.select multiple="true" name="myName" value="{value}" options="{options}" />');
229  $expected = <<< EOT
230 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
231 <option value="value2">label2</option>
232 <option value="value3" selected="selected">label3</option>
233 </select>
234 EOT;
235  self::assertSame($expected, $view->render());
236  }
237 
242  {
243  $value = ['value3', 'value1'];
244  $view = new ‪StandaloneView();
245  $view->assign('value', $value);
246  $view->setTemplateSource('<f:form.select multiple="true" name="myName" value="{value}" options="{}" />');
247  $expected = '<input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"></select>';
248  self::assertSame($expected, $view->render());
249  }
250 
255  {
256  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
257  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
258  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
259  $options = [
260  $user_is,
261  $user_sk,
262  $user_rl,
263  ];
264  $view = new ‪StandaloneView();
265  $view->assign('options', $options);
266  $view->assign('value', $user_sk);
267  $view->setTemplateSource('<f:form.select name="myName" optionValueField="id" optionLabelField="firstName" value="{value}" options="{options}" />');
268  $expected = <<< EOT
269 <select name="myName"><option value="1">Ingmar</option>
270 <option value="2" selected="selected">Sebastian</option>
271 <option value="3">Robert</option>
272 </select>
273 EOT;
274  self::assertSame($expected, $view->render());
275  }
276 
281  {
282  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
283  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
284  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
285  $options = [
286  $user_is,
287  $user_sk,
288  $user_rl,
289  ];
290  $view = new ‪StandaloneView();
291  $view->assign('options', $options);
292  $view->assign('value', [$user_rl, $user_is]);
293  $view->setTemplateSource('<f:form.select multiple="true" name="myName" optionValueField="id" optionLabelField="firstName" value="{value}" options="{options}" />');
294  $expected = <<< EOT
295 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="1" selected="selected">Ingmar</option>
296 <option value="2">Sebastian</option>
297 <option value="3" selected="selected">Robert</option>
298 </select>
299 EOT;
300  self::assertSame($expected, $view->render());
301  }
302 
307  {
308  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
309  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
310  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
311  $options = [
312  $user_is,
313  $user_sk,
314  $user_rl,
315  ];
316 
317  // Mock persistence manager for our domain objects and set into container
318  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
319 
320  $mockPersistenceManager->method('getIdentifierByObject')->willReturnCallback(
321  static function ($object) {
322  return $object->getId();
323  }
324  );
325  $container = $this->getContainer();
326  $container->set(PersistenceManager::class, $mockPersistenceManager);
327 
328  $view = new ‪StandaloneView();
329  $view->assign('options', $options);
330  $view->assign('value', [$user_rl, $user_is]);
331  $view->setTemplateSource('<f:form.select multiple="true" name="myName" optionLabelField="firstName" value="{value}" options="{options}" />');
332  $expected = <<< EOT
333 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="1" selected="selected">Ingmar</option>
334 <option value="2">Sebastian</option>
335 <option value="3" selected="selected">Robert</option>
336 </select>
337 EOT;
338  self::assertSame($expected, $view->render());
339  }
340 
345  {
346  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
347  $options = [
348  $user_is,
349  ];
350 
351  // Mock persistence manager for our domain objects and set into container
352  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
353  $mockPersistenceManager->method('getIdentifierByObject')->willReturn('fakeUid');
354  $container = $this->getContainer();
355  $container->set(PersistenceManager::class, $mockPersistenceManager);
356 
357  $view = new ‪StandaloneView();
358  $view->assign('options', $options);
359  $view->setTemplateSource('<f:form.select name="myName" options="{options}" />');
360  $expected = <<< EOT
361 <select name="myName"><option value="fakeUid">fakeUid</option>
362 </select>
363 EOT;
364  self::assertSame($expected, $view->render());
365  }
366 
371  {
372  $user_is = new ‪UserDomainClassToString(1, 'Ingmar', 'Schlecht');
373  $options = [
374  $user_is,
375  ];
376 
377  // Mock persistence manager for our domain objects and set into container
378  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
379  $mockPersistenceManager->method('getIdentifierByObject')->willReturn('fakeUid');
380  $container = $this->getContainer();
381  $container->set(PersistenceManager::class, $mockPersistenceManager);
382 
383  $view = new ‪StandaloneView();
384  $view->assign('options', $options);
385  $view->setTemplateSource('<f:form.select name="myName" options="{options}" />');
386  $expected = <<< EOT
387 <select name="myName"><option value="fakeUid">IngmarToString</option>
388 </select>
389 EOT;
390  self::assertSame($expected, $view->render());
391  }
392 
397  {
398  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
399  $options = [
400  $user_is,
401  ];
402 
403  // Mock persistence manager for our domain objects and set into container
404  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
405  $mockPersistenceManager->method('getIdentifierByObject')->willReturn(null);
406  $container = $this->getContainer();
407  $container->set(PersistenceManager::class, $mockPersistenceManager);
408 
409  $view = new ‪StandaloneView();
410  $view->assign('options', $options);
411  $view->setTemplateSource('<f:form.select name="myName" options="{options}" />');
412 
413  $this->expectException(Exception::class);
414  $this->expectExceptionCode(1247826696);
415 
416  $view->render();
417  }
418 
422  public function ‪renderCallsSetErrorClassAttribute(): void
423  {
424  // Create an extbase request that contains mapping results of the form object property we're working with.
425  $mappingResult = new ‪Result();
426  $objectResult = $mappingResult->forProperty('myObjectName');
427  $propertyResult = $objectResult->forProperty('someProperty');
428  $propertyResult->addError(new ‪Error('invalidProperty', 2));
429  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
430  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
431  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters);
432  $extbaseRequest = new ‪Request($psr7Request);
433  GeneralUtility::addInstance(Request::class, $extbaseRequest);
434 
435  $formObject = new \stdClass();
436  $view = new ‪StandaloneView();
437  $view->assign('formObject', $formObject);
438  $view->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.select property="someProperty" errorClass="myError" /></f:form>');
439  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
440  self::assertStringContainsString('<select name="myFieldPrefix[myObjectName][someProperty]" class="myError"></select>', $view->render());
441  }
442 
447  {
448  $options = [
449  'value1' => 'label1',
450  'value2' => 'label2',
451  'value3' => 'label3',
452  ];
453  $view = new ‪StandaloneView();
454  $view->assign('options', $options);
455  $view->setTemplateSource('<f:form.select multiple="true" selectAllByDefault="true" name="myName" options="{options}" />');
456  $expected = <<< EOT
457 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
458 <option value="value2" selected="selected">label2</option>
459 <option value="value3" selected="selected">label3</option>
460 </select>
461 EOT;
462  self::assertSame($expected, $view->render());
463  }
464 
468  public function ‪selectAllHasNoEffectIfValueIsSet(): void
469  {
470  $options = [
471  'value1' => 'label1',
472  'value2' => 'label2',
473  'value3' => 'label3',
474  ];
475  $view = new ‪StandaloneView();
476  $view->assign('options', $options);
477  $view->assign('value', ['value2', 'value1']);
478  $view->setTemplateSource('<f:form.select multiple="true" value="{value}" selectAllByDefault="true" name="myName" options="{options}" />');
479  $expected = <<< EOT
480 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
481 <option value="value2" selected="selected">label2</option>
482 <option value="value3">label3</option>
483 </select>
484 EOT;
485  self::assertSame($expected, $view->render());
486  }
487 
492  {
493  $options = [
494  'value1' => 'label1',
495  'value2' => 'label2',
496  'value3' => 'label3',
497  ];
498  $view = new ‪StandaloneView();
499  $view->assign('options', $options);
500  $view->assign('value', ['value2', 'value1']);
501  $view->setTemplateSource('<f:form.select prependOptionLabel="please choose" name="myName" options="{options}" />');
502  $expected = <<< EOT
503 <select name="myName"><option value="">please choose</option>
504 <option value="value1">label1</option>
505 <option value="value2">label2</option>
506 <option value="value3">label3</option>
507 </select>
508 EOT;
509  self::assertSame($expected, $view->render());
510  }
511 
516  {
517  $options = [
518  'value1' => 'label1',
519  'value2' => 'label2',
520  'value3' => 'label3',
521  ];
522  $view = new ‪StandaloneView();
523  $view->assign('options', $options);
524  $view->assign('value', ['value2', 'value1']);
525  $view->setTemplateSource('<f:form.select prependOptionLabel="please choose" prependOptionValue="-1" name="myName" options="{options}" />');
526  $expected = <<< EOT
527 <select name="myName"><option value="-1">please choose</option>
528 <option value="value1">label1</option>
529 <option value="value2">label2</option>
530 <option value="value3">label3</option>
531 </select>
532 EOT;
533  self::assertSame($expected, $view->render());
534  }
535 }
‪TYPO3\CMS\Fluid\Tests\Functional\Fixtures\ViewHelpers\UserDomainClass
Definition: UserDomainClass.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectOnDomainObjectsCreatesExpectedOptions
‪selectOnDomainObjectsCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:254
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectOnDomainObjectsCreatesExpectedOptionsWithoutOptionValueField
‪multipleSelectOnDomainObjectsCreatesExpectedOptionsWithoutOptionValueField()
Definition: SelectViewHelperTest.php:306
‪TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
Definition: PersistenceManagerInterface.php:22
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptions
‪selectCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:49
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsContainPrependedItemWithCorrectValueIfPrependOptionLabelAndPrependOptionValueAreSet
‪optionsContainPrependedItemWithCorrectValueIfPrependOptionLabelAndPrependOptionValueAreSet()
Definition: SelectViewHelperTest.php:515
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest
Definition: SelectViewHelperTest.php:35
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithArrayObjectsAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithArrayObjectsAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:139
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\OrderOfOptionsIsNotAlteredByDefault
‪OrderOfOptionsIsNotAlteredByDefault()
Definition: SelectViewHelperTest.php:173
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsAreSortedByLabelIfSortByOptionLabelIsSet
‪optionsAreSortedByLabelIfSortByOptionLabelIsSet()
Definition: SelectViewHelperTest.php:195
‪TYPO3\CMS\Extbase\Error\Result
Definition: Result.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\Fixtures\ViewHelpers\UserDomainClassToString
Definition: UserDomainClassToString.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectOnDomainObjectsCreatesExpectedOptions
‪multipleSelectOnDomainObjectsCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:280
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form
Definition: ButtonViewHelperTest.php:18
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectWithoutFurtherConfigurationOnDomainObjectsUsesUuidForValueAndLabel
‪selectWithoutFurtherConfigurationOnDomainObjectsUsesUuidForValueAndLabel()
Definition: SelectViewHelperTest.php:344
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithArraysAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithArraysAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:71
‪TYPO3\CMS\Extbase\Error\Error
Definition: Error.php:25
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
Definition: PersistenceManager.php:28
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectOnDomainObjectsThrowsExceptionIfNoValueCanBeFound
‪selectOnDomainObjectsThrowsExceptionIfNoValueCanBeFound()
Definition: SelectViewHelperTest.php:396
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectWithoutFurtherConfigurationOnDomainObjectsUsesToStringForLabelIfAvailable
‪selectWithoutFurtherConfigurationOnDomainObjectsUsesToStringForLabelIfAvailable()
Definition: SelectViewHelperTest.php:370
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:37
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\allOptionsAreSelectedIfSelectAllIsTrue
‪allOptionsAreSelectedIfSelectAllIsTrue()
Definition: SelectViewHelperTest.php:446
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectCreatesExpectedOptions
‪multipleSelectCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:217
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithStdClassesAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithStdClassesAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:105
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsContainPrependedItemWithEmptyValueIfPrependOptionLabelIsSet
‪optionsContainPrependedItemWithEmptyValueIfPrependOptionLabelIsSet()
Definition: SelectViewHelperTest.php:491
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\renderCallsSetErrorClassAttribute
‪renderCallsSetErrorClassAttribute()
Definition: SelectViewHelperTest.php:422
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:33
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCorrectlySetsTagName
‪selectCorrectlySetsTagName()
Definition: SelectViewHelperTest.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectWithoutOptionsCreatesExpectedOptions
‪multipleSelectWithoutOptionsCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:241
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectAllHasNoEffectIfValueIsSet
‪selectAllHasNoEffectIfValueIsSet()
Definition: SelectViewHelperTest.php:468
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectShouldSetTheRequiredAttribute
‪selectShouldSetTheRequiredAttribute()
Definition: SelectViewHelperTest.php:60