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