‪TYPO3CMS  ‪main
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 
20 use PHPUnit\Framework\Attributes\Test;
33 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
35 use TYPO3Fluid\Fluid\View\TemplateView;
36 
37 final class ‪SelectViewHelperTest extends FunctionalTestCase
38 {
39  #[Test]
40  public function ‪selectCorrectlySetsTagName(): void
41  {
42  $context = $this->get(RenderingContextFactory::class)->create();
43  $context->getTemplatePaths()->setTemplateSource('<f:form.select />');
44  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
45  $context->setRequest(new ‪Request($serverRequest));
46  self::assertSame('<select name=""></select>', (new TemplateView($context))->render());
47  }
48 
49  #[Test]
50  public function ‪selectCreatesExpectedOptions(): void
51  {
52  $context = $this->get(RenderingContextFactory::class)->create();
53  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" value="value2" options="{value1: \"label1\", value2: \"label2\"}" />');
54  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
55  $context->setRequest(new ‪Request($serverRequest));
56  $expected = '<select name="myName"><option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '</select>';
57  self::assertSame($expected, (new TemplateView($context))->render());
58  }
59 
60  #[Test]
62  {
63  $context = $this->get(RenderingContextFactory::class)->create();
64  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" required="true" value="value2" options="{value1: \"label1\", value2: \"label2\"}" />');
65  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
66  $context->setRequest(new ‪Request($serverRequest));
67  $expected = '<select required="required" name="myName"><option value="value1">label1</option>' . chr(10) . '<option value="value2" selected="selected">label2</option>' . chr(10) . '</select>';
68  self::assertSame($expected, (new TemplateView($context))->render());
69  }
70 
71  #[Test]
73  {
74  $options = [
75  [
76  'uid' => 1,
77  'title' => 'Foo',
78  ],
79  [
80  'uid' => -1,
81  'title' => 'Bar',
82  ],
83  [
84  'title' => 'Baz',
85  ],
86  [
87  'uid' => '2',
88  ],
89  ];
90  $context = $this->get(RenderingContextFactory::class)->create();
91  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
92  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
93  $context->setRequest(new ‪Request($serverRequest));
94  $view = new TemplateView($context);
95  $view->assign('options', $options);
96  $expected = <<< EOT
97 <select name="myName"><option value="2"></option>
98 <option value="-1">Bar</option>
99 <option value="">Baz</option>
100 <option value="1">Foo</option>
101 </select>
102 EOT;
103  self::assertSame($expected, $view->render());
104  }
105 
106  #[Test]
108  {
109  $options = [
110  [
111  'uid' => 1,
112  'title' => 'Foo',
113  ],
114  [
115  'uid' => -1,
116  'title' => 'Bar',
117  ],
118  [
119  'title' => 'Baz',
120  ],
121  [
122  'uid' => '2',
123  ],
124  ];
125  $context = $this->get(RenderingContextFactory::class)->create();
126  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
127  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
128  $context->setRequest(new ‪Request($serverRequest));
129  $view = new TemplateView($context);
130  $view->assign('options', $options);
131 
132  $this->expectException(\InvalidArgumentException::class);
133  $this->expectExceptionMessage('Missing parameter "optionValueField" in SelectViewHelper for array value options.');
134  $this->expectExceptionCode(1682693720);
135 
136  $view->render();
137  }
138 
139  #[Test]
141  {
142  $options = [
143  [
144  'uid' => 1,
145  'title' => 'Foo',
146  ],
147  [
148  'uid' => -1,
149  'title' => 'Bar',
150  ],
151  [
152  'title' => 'Baz',
153  ],
154  [
155  'uid' => '2',
156  ],
157  ];
158  $context = $this->get(RenderingContextFactory::class)->create();
159  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionValueField="uid" sortByOptionLabel="true" options="{options}" />');
160  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
161  $context->setRequest(new ‪Request($serverRequest));
162  $view = new TemplateView($context);
163  $view->assign('options', $options);
164 
165  $this->expectException(\InvalidArgumentException::class);
166  $this->expectExceptionMessage('Missing parameter "optionLabelField" in SelectViewHelper for array value options.');
167  $this->expectExceptionCode(1682693721);
168 
169  $view->render();
170  }
171 
172  #[Test]
174  {
175  $obj1 = new \stdClass();
176  $obj1->uid = 1;
177  $obj1->title = 'Foo';
178 
179  $obj2 = new \stdClass();
180  $obj2->uid = -1;
181  $obj2->title = 'Bar';
182 
183  $obj3 = new \stdClass();
184  $obj3->title = 'Baz';
185 
186  $obj4 = new \stdClass();
187  $obj4->uid = 2;
188 
189  $options = [$obj1, $obj2, $obj3, $obj4];
190 
191  $context = $this->get(RenderingContextFactory::class)->create();
192  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
193  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
194  $context->setRequest(new ‪Request($serverRequest));
195  $view = new TemplateView($context);
196  $view->assign('options', $options);
197  $expected = <<< EOT
198 <select name="myName"><option value="2"></option>
199 <option value="-1">Bar</option>
200 <option value="">Baz</option>
201 <option value="1">Foo</option>
202 </select>
203 EOT;
204  self::assertSame($expected, $view->render());
205  }
206 
207  #[Test]
209  {
210  $options = new \ArrayObject([
211  [
212  'uid' => 1,
213  'title' => 'Foo',
214  ],
215  [
216  'uid' => -1,
217  'title' => 'Bar',
218  ],
219  [
220  'title' => 'Baz',
221  ],
222  [
223  'uid' => '2',
224  ],
225  ]);
226  $context = $this->get(RenderingContextFactory::class)->create();
227  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionValueField="uid" optionLabelField="title" sortByOptionLabel="true" options="{options}" />');
228  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
229  $context->setRequest(new ‪Request($serverRequest));
230  $view = new TemplateView($context);
231  $view->assign('options', $options);
232  $expected = <<< EOT
233 <select name="myName"><option value="2"></option>
234 <option value="-1">Bar</option>
235 <option value="">Baz</option>
236 <option value="1">Foo</option>
237 </select>
238 EOT;
239  self::assertSame($expected, $view->render());
240  }
241 
242  #[Test]
244  {
245  $options = [
246  'value3' => 'label3',
247  'value1' => 'label1',
248  'value2' => 'label2',
249  ];
250  $context = $this->get(RenderingContextFactory::class)->create();
251  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" value="value2" options="{options}" />');
252  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
253  $context->setRequest(new ‪Request($serverRequest));
254  $view = new TemplateView($context);
255  $view->assign('options', $options);
256  $expected = <<< EOT
257 <select name="myName"><option value="value3">label3</option>
258 <option value="value1">label1</option>
259 <option value="value2" selected="selected">label2</option>
260 </select>
261 EOT;
262  self::assertSame($expected, $view->render());
263  }
264 
265  #[Test]
267  {
268  $options = [
269  'value3' => 'label3',
270  'value1' => 'label1',
271  'value2' => 'label2',
272  ];
273  $context = $this->get(RenderingContextFactory::class)->create();
274  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" sortByOptionLabel="true" value="value2" options="{options}" />');
275  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
276  $context->setRequest(new ‪Request($serverRequest));
277  $view = new TemplateView($context);
278  $view->assign('options', $options);
279  $expected = <<< EOT
280 <select name="myName"><option value="value1">label1</option>
281 <option value="value2" selected="selected">label2</option>
282 <option value="value3">label3</option>
283 </select>
284 EOT;
285  self::assertSame($expected, $view->render());
286  }
287 
288  #[Test]
290  {
291  $options = [
292  'value1' => 'label1',
293  'value2' => 'label2',
294  'value3' => 'label3',
295  ];
296  $value = ['value3', 'value1'];
297  $context = $this->get(RenderingContextFactory::class)->create();
298  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" name="myName" value="{value}" options="{options}" />');
299  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
300  $context->setRequest(new ‪Request($serverRequest));
301  $view = new TemplateView($context);
302  $view->assign('options', $options);
303  $view->assign('value', $value);
304  $expected = <<< EOT
305 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
306 <option value="value2">label2</option>
307 <option value="value3" selected="selected">label3</option>
308 </select>
309 EOT;
310  self::assertSame($expected, $view->render());
311  }
312 
313  #[Test]
315  {
316  $value = ['value3', 'value1'];
317  $context = $this->get(RenderingContextFactory::class)->create();
318  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" name="myName" value="{value}" options="{}" />');
319  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
320  $context->setRequest(new ‪Request($serverRequest));
321  $view = new TemplateView($context);
322  $view->assign('value', $value);
323  $expected = '<input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"></select>';
324  self::assertSame($expected, $view->render());
325  }
326 
327  #[Test]
329  {
330  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
331  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
332  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
333  $options = [
334  $user_is,
335  $user_sk,
336  $user_rl,
337  ];
338  $context = $this->get(RenderingContextFactory::class)->create();
339  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" optionValueField="id" optionLabelField="firstName" value="{value}" options="{options}" />');
340  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
341  $context->setRequest(new ‪Request($serverRequest));
342  $view = new TemplateView($context);
343  $view->assign('options', $options);
344  $view->assign('value', $user_sk);
345  $expected = <<< EOT
346 <select name="myName"><option value="1">Ingmar</option>
347 <option value="2" selected="selected">Sebastian</option>
348 <option value="3">Robert</option>
349 </select>
350 EOT;
351  self::assertSame($expected, $view->render());
352  }
353 
354  #[Test]
356  {
357  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
358  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
359  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
360  $options = [
361  $user_is,
362  $user_sk,
363  $user_rl,
364  ];
365  $context = $this->get(RenderingContextFactory::class)->create();
366  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" name="myName" optionValueField="id" optionLabelField="firstName" value="{value}" options="{options}" />');
367  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
368  $context->setRequest(new ‪Request($serverRequest));
369  $view = new TemplateView($context);
370  $view->assign('options', $options);
371  $view->assign('value', [$user_rl, $user_is]);
372  $expected = <<< EOT
373 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="1" selected="selected">Ingmar</option>
374 <option value="2">Sebastian</option>
375 <option value="3" selected="selected">Robert</option>
376 </select>
377 EOT;
378  self::assertSame($expected, $view->render());
379  }
380 
381  #[Test]
383  {
384  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
385  $user_sk = new ‪UserDomainClass(2, 'Sebastian', 'Kurfuerst');
386  $user_rl = new ‪UserDomainClass(3, 'Robert', 'Lemke');
387  $options = [
388  $user_is,
389  $user_sk,
390  $user_rl,
391  ];
392 
393  // Mock persistence manager for our domain objects and set into container
394  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
395 
396  $mockPersistenceManager->method('getIdentifierByObject')->willReturnCallback(
397  static function (‪UserDomainClass $object): string {
398  // Note: In reality, getIdentifierByObject only returns strings (or null) as this what the used backend
399  // does. So the cast here makes the test more in line with the real-world types.
400  return (string)$object->‪getId();
401  }
402  );
403  $container = $this->get('service_container');
404  $container->set(PersistenceManager::class, $mockPersistenceManager);
405 
406  $context = $container->get(RenderingContextFactory::class)->create();
407  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" name="myName" optionLabelField="firstName" value="{value}" options="{options}" />');
408  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
409  $context->setRequest(new ‪Request($serverRequest));
410  $view = new TemplateView($context);
411  $view->assign('options', $options);
412  $view->assign('value', [$user_rl, $user_is]);
413  $expected = <<< EOT
414 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="1" selected="selected">Ingmar</option>
415 <option value="2">Sebastian</option>
416 <option value="3" selected="selected">Robert</option>
417 </select>
418 EOT;
419  self::assertSame($expected, $view->render());
420  }
421 
422  #[Test]
424  {
425  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
426  $options = [
427  $user_is,
428  ];
429 
430  // Mock persistence manager for our domain objects and set into container
431  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
432  $mockPersistenceManager->method('getIdentifierByObject')->willReturn('fakeUid');
433  $container = $this->get('service_container');
434  $container->set(PersistenceManager::class, $mockPersistenceManager);
435 
436  $context = $container->get(RenderingContextFactory::class)->create();
437  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" options="{options}" />');
438  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
439  $context->setRequest(new ‪Request($serverRequest));
440  $view = new TemplateView($context);
441  $view->assign('options', $options);
442  $expected = <<< EOT
443 <select name="myName"><option value="fakeUid">fakeUid</option>
444 </select>
445 EOT;
446  self::assertSame($expected, $view->render());
447  }
448 
449  #[Test]
451  {
452  $user_is = new ‪UserDomainClassToString(1, 'Ingmar', 'Schlecht');
453  $options = [
454  $user_is,
455  ];
456 
457  // Mock persistence manager for our domain objects and set into container
458  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
459  $mockPersistenceManager->method('getIdentifierByObject')->willReturn('fakeUid');
460  $container = $this->get('service_container');
461  $container->set(PersistenceManager::class, $mockPersistenceManager);
462 
463  $context = $container->get(RenderingContextFactory::class)->create();
464  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" options="{options}" />');
465  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
466  $context->setRequest(new ‪Request($serverRequest));
467  $view = new TemplateView($context);
468  $view->assign('options', $options);
469  $expected = <<< EOT
470 <select name="myName"><option value="fakeUid">IngmarToString</option>
471 </select>
472 EOT;
473  self::assertSame($expected, $view->render());
474  }
475 
476  #[Test]
478  {
479  $user_is = new ‪UserDomainClass(1, 'Ingmar', 'Schlecht');
480  $options = [
481  $user_is,
482  ];
483 
484  // Mock persistence manager for our domain objects and set into container
485  $mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
486  $mockPersistenceManager->method('getIdentifierByObject')->willReturn(null);
487  $container = $this->get('service_container');
488  $container->set(PersistenceManager::class, $mockPersistenceManager);
489 
490  $context = $container->get(RenderingContextFactory::class)->create();
491  $context->getTemplatePaths()->setTemplateSource('<f:form.select name="myName" options="{options}" />');
492  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
493  $context->setRequest(new ‪Request($serverRequest));
494  $view = new TemplateView($context);
495  $view->assign('options', $options);
496 
497  $this->expectException(Exception::class);
498  $this->expectExceptionCode(1247826696);
499 
500  $view->render();
501  }
502 
503  #[Test]
504  public function ‪renderCallsSetErrorClassAttribute(): void
505  {
506  // Create an extbase request that contains mapping results of the form object property we're working with.
507  $mappingResult = new ‪Result();
508  $objectResult = $mappingResult->forProperty('myObjectName');
509  $propertyResult = $objectResult->forProperty('someProperty');
510  $propertyResult->addError(new ‪Error('invalidProperty', 2));
511  $extbaseRequestParameters = new ‪ExtbaseRequestParameters();
512  $extbaseRequestParameters->setOriginalRequestMappingResults($mappingResult);
513  $psr7Request = (new ‪ServerRequest())->withAttribute('extbase', $extbaseRequestParameters)
514  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
515  ‪$GLOBALS['TYPO3_REQUEST'] = $psr7Request;
516  $extbaseRequest = new ‪Request($psr7Request);
517  GeneralUtility::addInstance(Request::class, $extbaseRequest);
518 
519  $formObject = new \stdClass();
520  $context = $this->get(RenderingContextFactory::class)->create();
521  $context->getTemplatePaths()->setTemplateSource('<f:form object="{formObject}" fieldNamePrefix="myFieldPrefix" objectName="myObjectName"><f:form.select property="someProperty" errorClass="myError" /></f:form>');
522  $context->setRequest($extbaseRequest);
523  $view = new TemplateView($context);
524  $view->assign('formObject', $formObject);
525  // The point is that 'class="myError"' is added since the form had mapping errors for this property.
526  self::assertStringContainsString('<select name="myFieldPrefix[myObjectName][someProperty]" class="myError"></select>', $view->render());
527  }
528 
529  #[Test]
531  {
532  $options = [
533  'value1' => 'label1',
534  'value2' => 'label2',
535  'value3' => 'label3',
536  ];
537  $context = $this->get(RenderingContextFactory::class)->create();
538  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" selectAllByDefault="true" name="myName" options="{options}" />');
539  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
540  $context->setRequest(new ‪Request($serverRequest));
541  $view = new TemplateView($context);
542  $view->assign('options', $options);
543  $expected = <<< EOT
544 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
545 <option value="value2" selected="selected">label2</option>
546 <option value="value3" selected="selected">label3</option>
547 </select>
548 EOT;
549  self::assertSame($expected, $view->render());
550  }
551 
552  #[Test]
553  public function ‪selectAllHasNoEffectIfValueIsSet(): void
554  {
555  $options = [
556  'value1' => 'label1',
557  'value2' => 'label2',
558  'value3' => 'label3',
559  ];
560  $context = $this->get(RenderingContextFactory::class)->create();
561  $context->getTemplatePaths()->setTemplateSource('<f:form.select multiple="true" value="{value}" selectAllByDefault="true" name="myName" options="{options}" />');
562  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
563  $context->setRequest(new ‪Request($serverRequest));
564  $view = new TemplateView($context);
565  $view->assign('options', $options);
566  $view->assign('value', ['value2', 'value1']);
567  $expected = <<< EOT
568 <input type="hidden" name="myName" value="" /><select multiple="multiple" name="myName[]"><option value="value1" selected="selected">label1</option>
569 <option value="value2" selected="selected">label2</option>
570 <option value="value3">label3</option>
571 </select>
572 EOT;
573  self::assertSame($expected, $view->render());
574  }
575 
576  #[Test]
578  {
579  $options = [
580  'value1' => 'label1',
581  'value2' => 'label2',
582  'value3' => 'label3',
583  ];
584  $context = $this->get(RenderingContextFactory::class)->create();
585  $context->getTemplatePaths()->setTemplateSource('<f:form.select prependOptionLabel="please choose" name="myName" options="{options}" />');
586  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
587  $context->setRequest(new ‪Request($serverRequest));
588  $view = new TemplateView($context);
589  $view->assign('options', $options);
590  $view->assign('value', ['value2', 'value1']);
591  $expected = <<< EOT
592 <select name="myName"><option value="">please choose</option>
593 <option value="value1">label1</option>
594 <option value="value2">label2</option>
595 <option value="value3">label3</option>
596 </select>
597 EOT;
598  self::assertSame($expected, $view->render());
599  }
600 
601  #[Test]
603  {
604  $options = [
605  'value1' => 'label1',
606  'value2' => 'label2',
607  'value3' => 'label3',
608  ];
609  $context = $this->get(RenderingContextFactory::class)->create();
610  $context->getTemplatePaths()->setTemplateSource('<f:form.select prependOptionLabel="please choose" prependOptionValue="-1" name="myName" options="{options}" />');
611  $serverRequest = (new ‪ServerRequest())->withAttribute('extbase', new ‪ExtbaseRequestParameters());
612  $context->setRequest(new ‪Request($serverRequest));
613  $view = new TemplateView($context);
614  $view->assign('options', $options);
615  $view->assign('value', ['value2', 'value1']);
616  $expected = <<< EOT
617 <select name="myName"><option value="-1">please choose</option>
618 <option value="value1">label1</option>
619 <option value="value2">label2</option>
620 <option value="value3">label3</option>
621 </select>
622 EOT;
623  self::assertSame($expected, $view->render());
624  }
625 }
‪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:328
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectOnDomainObjectsCreatesExpectedOptionsWithoutOptionValueField
‪multipleSelectOnDomainObjectsCreatesExpectedOptionsWithoutOptionValueField()
Definition: SelectViewHelperTest.php:382
‪TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
Definition: PersistenceManagerInterface.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptions
‪selectCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:50
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsContainPrependedItemWithCorrectValueIfPrependOptionLabelAndPrependOptionValueAreSet
‪optionsContainPrependedItemWithCorrectValueIfPrependOptionLabelAndPrependOptionValueAreSet()
Definition: SelectViewHelperTest.php:602
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest
Definition: SelectViewHelperTest.php:38
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithArrayObjectsAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithArrayObjectsAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:208
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\OrderOfOptionsIsNotAlteredByDefault
‪OrderOfOptionsIsNotAlteredByDefault()
Definition: SelectViewHelperTest.php:243
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsAreSortedByLabelIfSortByOptionLabelIsSet
‪optionsAreSortedByLabelIfSortByOptionLabelIsSet()
Definition: SelectViewHelperTest.php:266
‪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:355
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form
Definition: ButtonViewHelperTest.php:18
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectWithoutFurtherConfigurationOnDomainObjectsUsesUuidForValueAndLabel
‪selectWithoutFurtherConfigurationOnDomainObjectsUsesUuidForValueAndLabel()
Definition: SelectViewHelperTest.php:423
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithArraysAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithArraysAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:72
‪TYPO3\CMS\Extbase\Error\Error
Definition: Error.php:25
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
Definition: PersistenceManager.php:30
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectOnDomainObjectsThrowsExceptionIfNoValueCanBeFound
‪selectOnDomainObjectsThrowsExceptionIfNoValueCanBeFound()
Definition: SelectViewHelperTest.php:477
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectWithoutFurtherConfigurationOnDomainObjectsUsesToStringForLabelIfAvailable
‪selectWithoutFurtherConfigurationOnDomainObjectsUsesToStringForLabelIfAvailable()
Definition: SelectViewHelperTest.php:450
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\allOptionsAreSelectedIfSelectAllIsTrue
‪allOptionsAreSelectedIfSelectAllIsTrue()
Definition: SelectViewHelperTest.php:530
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectCreatesExpectedOptions
‪multipleSelectCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:289
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCreatesExpectedOptionsWithStdClassesAndOptionValueFieldAndOptionLabelFieldSet
‪selectCreatesExpectedOptionsWithStdClassesAndOptionValueFieldAndOptionLabelFieldSet()
Definition: SelectViewHelperTest.php:173
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\optionsContainPrependedItemWithEmptyValueIfPrependOptionLabelIsSet
‪optionsContainPrependedItemWithEmptyValueIfPrependOptionLabelIsSet()
Definition: SelectViewHelperTest.php:577
‪TYPO3\CMS\Fluid\Tests\Functional\Fixtures\ViewHelpers\UserDomainClass\getId
‪getId()
Definition: UserDomainClass.php:36
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\renderCallsSetErrorClassAttribute
‪renderCallsSetErrorClassAttribute()
Definition: SelectViewHelperTest.php:504
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectThrowsExceptionIfEitherOptionValueFieldIsNotSet
‪selectThrowsExceptionIfEitherOptionValueFieldIsNotSet()
Definition: SelectViewHelperTest.php:107
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:35
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectCorrectlySetsTagName
‪selectCorrectlySetsTagName()
Definition: SelectViewHelperTest.php:40
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\multipleSelectWithoutOptionsCreatesExpectedOptions
‪multipleSelectWithoutOptionsCreatesExpectedOptions()
Definition: SelectViewHelperTest.php:314
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:35
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectThrowsExceptionIfEitherOptionLabelFieldIsNotSet
‪selectThrowsExceptionIfEitherOptionLabelFieldIsNotSet()
Definition: SelectViewHelperTest.php:140
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectAllHasNoEffectIfValueIsSet
‪selectAllHasNoEffectIfValueIsSet()
Definition: SelectViewHelperTest.php:553
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Form\SelectViewHelperTest\selectShouldSetTheRequiredAttribute
‪selectShouldSetTheRequiredAttribute()
Definition: SelectViewHelperTest.php:61