‪TYPO3CMS  10.4
AbstractFormElementTest.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 
25 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
26 
30 class ‪AbstractFormElementTest extends UnitTestCase
31 {
35  public function ‪newInstanceHasNoProperties(): void
36  {
38  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
39  self::assertNotNull($subject);
40  self::assertCount(0, $subject->getProperties());
41  }
42 
46  public function ‪setSimpleProperties(): void
47  {
49  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
50 
51  $subject->setProperty('foo', 'bar');
52  $subject->setProperty('buz', 'qax');
53  $properties = $subject->getProperties();
54 
55  self::assertCount(2, $properties);
56  self::assertTrue(array_key_exists('foo', $properties));
57  self::assertEquals('bar', $properties['foo']);
58  self::assertTrue(array_key_exists('buz', $properties));
59  self::assertEquals('qax', $properties['buz']);
60  }
61 
65  public function ‪overrideProperties(): void
66  {
68  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
69 
70  $subject->setProperty('foo', 'bar');
71  $subject->setProperty('foo', 'buz');
72 
73  $properties = $subject->getProperties();
74  self::assertEquals(1, \count($properties));
75  self::assertTrue(array_key_exists('foo', $properties));
76  self::assertEquals('buz', $properties['foo']);
77  }
78 
82  public function ‪setArrayProperties(): void
83  {
85  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
86 
87  $subject->setProperty('foo', ['bar' => 'baz', 'bla' => 'blubb']);
88  $properties = $subject->getProperties();
89 
90  self::assertCount(1, $properties);
91  self::assertTrue(array_key_exists('foo', $properties));
92 
93  //check arrays details
94  self::assertTrue(\is_array($properties['foo']));
95  self::assertCount(2, $properties['foo']);
96  self::assertTrue(array_key_exists('bar', $properties['foo']));
97  self::assertEquals('baz', $properties['foo']['bar']);
98  }
99 
103  public function ‪setPropertyUnsetIfValueIsNull(): void
104  {
105  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
106 
107  $expected = ['foo-1' => ['bar-1' => 'foo-2']];
108  $subject->setProperty('foo-1', ['bar-1' => 'foo-2']);
109  $subject->setProperty('foo-2', ['bar-2' => 'foo-3']);
110  $subject->setProperty('foo-2', null);
111 
112  self::assertSame($expected, $subject->getProperties());
113  }
114 
119  {
120  $subject = $this->getMockForAbstractClass(AbstractFormElement::class, ['an_id', 'a_type']);
121 
122  $expected = [
123  'foo-1' => [
124  'bar-1' => 'foo-2'
125  ],
126  'foo-2' => [
127  'bar-2' => 'foo-3'
128  ]
129  ];
130  $subject->setProperty('foo-1', ['bar-1' => 'foo-2']);
131  $subject->setProperty('foo-2', ['bar-2' => 'foo-3', 'bar-3' => 'foo-4']);
132  $subject->setProperty('foo-2', ['bar-3' => null]);
133 
134  self::assertSame($expected, $subject->getProperties());
135  }
136 
141  {
142  $this->expectException(IdentifierNotValidException::class);
143  $this->expectExceptionCode(1477082502);
144 
145  // GenericFormElement inherits from AbstractFormElement and serves as concrete implementation
146  new ‪GenericFormElement('', 'a_type');
147  }
148 
153  {
154  $mock = $this->getMockForAbstractClass(
155  AbstractFormElement::class,
156  ['is_in', 'a_type'],
157  '',
158  true,
159  true,
160  true,
161  []
162  );
163  self::assertInstanceOf(AbstractFormElement::class, $mock);
164  }
165 
170  {
172  $abstractFormElementMock = $this->getMockForAbstractClass(
173  AbstractFormElement::class,
174  [],
175  '',
176  false,
177  false,
178  true,
179  []
180  );
182  $secondMock = $this->getMockForAbstractClass(
183  AbstractFormElement::class,
184  [],
185  '',
186  false,
187  false,
188  true,
189  [
190  'initializeFormElement'
191  ]
192  );
193 
194  $secondMock->
195  expects(self::once())
196  ->method('initializeFormElement')
197  ->with($abstractFormElementMock);
198 
199  GeneralUtility::addInstance(\get_class($secondMock), $secondMock);
200 
201  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['initializeFormElement'] = [
202  \get_class($secondMock)
203  ];
204 
205  $abstractFormElementMock->initializeFormElement();
206  }
207 
211  public function ‪getUniqueIdentifierExpectedUnique(): void
212  {
214  $abstractFormElementMock1 = $this->getMockForAbstractClass(
215  AbstractFormElement::class,
216  [],
217  '',
218  false,
219  false,
220  true,
221  [
222  'getRootForm'
223  ]
224  );
225 
227  $abstractFormElementMock2 = $this->getMockForAbstractClass(
228  AbstractFormElement::class,
229  [],
230  '',
231  false,
232  false,
233  true,
234  [
235  'getRootForm'
236  ]
237  );
238 
239  $formDefinition1 = $this->createMock(FormDefinition::class);
240  $formDefinition1
241  ->method('getIdentifier')
242  ->willReturn('c');
243 
244  $abstractFormElementMock1
245  ->method('getRootForm')
246  ->willReturn($formDefinition1);
247 
248  $formDefinition2 = $this->createMock(FormDefinition::class);
249  $formDefinition2
250  ->method('getIdentifier')
251  ->willReturn('d');
252 
253  $abstractFormElementMock2
254  ->method('getRootForm')
255  ->willReturn($formDefinition2);
256 
257  self::assertNotSame(
258  $abstractFormElementMock1->getUniqueIdentifier(),
259  $abstractFormElementMock2->getUniqueIdentifier()
260  );
261  }
262 
267  {
268  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, [
269  'dummy'
270  ], [], '', false);
271 
272  $abstractFormElementMock = $this->getMockForAbstractClass(
273  AbstractFormElement::class,
274  ['is_in', 'a_type'],
275  '',
276  true,
277  true,
278  true,
279  ['getRootForm']
280  );
281 
282  $abstractFormElementMock
283  ->method('getRootForm')
284  ->willReturn($formDefinitionMock);
285 
286  $input = 'foo';
287  $expected = 'foo';
288 
289  $abstractFormElementMock->setDefaultValue($input);
290 
291  self::assertSame($expected, $abstractFormElementMock->getDefaultValue());
292  }
293 
298  {
299  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, [
300  'dummy'
301  ], [], '', false);
302 
303  $abstractFormElementMock = $this->getMockForAbstractClass(
304  AbstractFormElement::class,
305  ['is_in', 'a_type'],
306  '',
307  true,
308  true,
309  true,
310  ['getRootForm']
311  );
312 
313  $abstractFormElementMock
314  ->method('getRootForm')
315  ->willReturn($formDefinitionMock);
316 
317  $input = ['foo' => 'bar'];
318  $expected = ['foo' => 'bar'];
319 
320  $abstractFormElementMock->setDefaultValue($input);
321 
322  self::assertSame($expected, $abstractFormElementMock->getDefaultValue());
323  }
324 
329  {
330  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, [
331  'dummy'
332  ], [], '', false);
333 
334  $abstractFormElementMock = $this->getMockForAbstractClass(
335  AbstractFormElement::class,
336  ['is_in', 'a_type'],
337  '',
338  true,
339  true,
340  true,
341  ['getRootForm']
342  );
343 
344  $abstractFormElementMock
345  ->method('getRootForm')
346  ->willReturn($formDefinitionMock);
347 
348  $input1 = [
349  'foo-1' => [
350  'bar-1' => 'foo-2'
351  ],
352  'foo-2' => [
353  'bar-2' => 'foo-3',
354  'bar-3' => 'foo-4'
355  ]
356  ];
357 
358  $input2 = [
359  'foo-2' => [
360  'bar-3' => null
361  ]
362  ];
363 
364  $expected = [
365  'foo-1' => [
366  'bar-1' => 'foo-2'
367  ],
368  'foo-2' => [
369  'bar-2' => 'foo-3'
370  ]
371  ];
372 
373  $abstractFormElementMock->setDefaultValue($input1);
374  $abstractFormElementMock->setDefaultValue($input2);
375 
376  self::assertSame($expected, $abstractFormElementMock->getDefaultValue());
377  }
378 
383  {
384  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, [
385  'dummy'
386  ], [], '', false);
387 
388  $abstractFormElementMock = $this->getMockForAbstractClass(
389  AbstractFormElement::class,
390  ['is_in', 'a_type'],
391  '',
392  true,
393  true,
394  true,
395  ['getRootForm']
396  );
397 
398  $abstractFormElementMock
399  ->method('getRootForm')
400  ->willReturn($formDefinitionMock);
401 
402  $input1 = [
403  'foo-1' => [
404  'bar-1' => 'foo-2'
405  ],
406  'foo-2' => [
407  'bar-2' => 'foo-3',
408  ]
409  ];
410 
411  $input2 = [
412  'foo-2' => [
413  'bar-3' => 'foo-4'
414  ]
415  ];
416 
417  $expected = [
418  'foo-1' => [
419  'bar-1' => 'foo-2'
420  ],
421  'foo-2' => [
422  'bar-2' => 'foo-3',
423  'bar-3' => 'foo-4'
424  ]
425  ];
426 
427  $abstractFormElementMock->setDefaultValue($input1);
428  $abstractFormElementMock->setDefaultValue($input2);
429 
430  self::assertSame($expected, $abstractFormElementMock->getDefaultValue());
431  }
432 }
‪TYPO3\CMS\Form\Domain\Model\FormElements\AbstractFormElement
Definition: AbstractFormElement.php:50
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueSetArrayValueIfKeyDoesNotExists
‪setDefaultValueSetArrayValueIfKeyDoesNotExists()
Definition: AbstractFormElementTest.php:297
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\constructThrowsExceptionWhenIdentifierIsEmpty
‪constructThrowsExceptionWhenIdentifierIsEmpty()
Definition: AbstractFormElementTest.php:140
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueUnsetIfValueIsArrayWithSomeNullVales
‪setDefaultValueUnsetIfValueIsArrayWithSomeNullVales()
Definition: AbstractFormElementTest.php:328
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\newInstanceHasNoProperties
‪newInstanceHasNoProperties()
Definition: AbstractFormElementTest.php:35
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\getUniqueIdentifierExpectedUnique
‪getUniqueIdentifierExpectedUnique()
Definition: AbstractFormElementTest.php:211
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\overrideProperties
‪overrideProperties()
Definition: AbstractFormElementTest.php:65
‪TYPO3\CMS\Form\Domain\Exception\IdentifierNotValidException
Definition: IdentifierNotValidException.php:31
‪TYPO3\CMS\Form\Domain\Model\FormElements\GenericFormElement
Definition: GenericFormElement.php:30
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements
Definition: AbstractFormElementTest.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueSetStringValueIfKeyDoesNotExists
‪setDefaultValueSetStringValueIfKeyDoesNotExists()
Definition: AbstractFormElementTest.php:266
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setPropertyUnsetIfValueIsArrayWithSomeNullVales
‪setPropertyUnsetIfValueIsArrayWithSomeNullVales()
Definition: AbstractFormElementTest.php:118
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setSimpleProperties
‪setSimpleProperties()
Definition: AbstractFormElementTest.php:46
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\initializeFormElementExpectedCallInitializeFormObjectHooks
‪initializeFormElementExpectedCallInitializeFormObjectHooks()
Definition: AbstractFormElementTest.php:169
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setArrayProperties
‪setArrayProperties()
Definition: AbstractFormElementTest.php:82
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\constructMustNotThrowExceptionWhenIdentifierIsNonEmptyString
‪constructMustNotThrowExceptionWhenIdentifierIsNonEmptyString()
Definition: AbstractFormElementTest.php:152
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest
Definition: AbstractFormElementTest.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setPropertyUnsetIfValueIsNull
‪setPropertyUnsetIfValueIsNull()
Definition: AbstractFormElementTest.php:103
‪TYPO3\CMS\Form\Domain\Model\FormDefinition
Definition: FormDefinition.php:223
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueAddValueIfValueIsArray
‪setDefaultValueAddValueIfValueIsArray()
Definition: AbstractFormElementTest.php:382