‪TYPO3CMS  ‪main
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 
20 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
27 
28 final class ‪AbstractFormElementTest extends UnitTestCase
29 {
30  #[Test]
31  public function ‪newInstanceHasNoProperties(): void
32  {
33  $subject = new ‪TestingFormElement();
34  self::assertNotNull($subject);
35  self::assertCount(0, $subject->getProperties());
36  }
37 
38  #[Test]
39  public function ‪setSimpleProperties(): void
40  {
41  $subject = new ‪TestingFormElement();
42 
43  $subject->setProperty('foo', 'bar');
44  $subject->setProperty('buz', 'qax');
45  $properties = $subject->getProperties();
46 
47  self::assertCount(2, $properties);
48  self::assertArrayHasKey('foo', $properties);
49  self::assertEquals('bar', $properties['foo']);
50  self::assertArrayHasKey('buz', $properties);
51  self::assertEquals('qax', $properties['buz']);
52  }
53 
54  #[Test]
55  public function ‪overrideProperties(): void
56  {
57  $subject = new ‪TestingFormElement();
58 
59  $subject->setProperty('foo', 'bar');
60  $subject->setProperty('foo', 'buz');
61 
62  $properties = $subject->getProperties();
63  self::assertCount(1, $properties);
64  self::assertArrayHasKey('foo', $properties);
65  self::assertEquals('buz', $properties['foo']);
66  }
67 
68  #[Test]
69  public function ‪setArrayProperties(): void
70  {
71  $subject = new ‪TestingFormElement();
72 
73  $subject->setProperty('foo', ['bar' => 'baz', 'bla' => 'blubb']);
74  $properties = $subject->getProperties();
75 
76  self::assertCount(1, $properties);
77  self::assertArrayHasKey('foo', $properties);
78 
79  //check arrays details
80  self::assertIsArray($properties['foo']);
81  self::assertCount(2, $properties['foo']);
82  self::assertArrayHasKey('bar', $properties['foo']);
83  self::assertEquals('baz', $properties['foo']['bar']);
84  }
85 
86  #[Test]
87  public function ‪setPropertyUnsetIfValueIsNull(): void
88  {
89  $subject = new ‪TestingFormElement();
90 
91  $expected = ['foo-1' => ['bar-1' => 'foo-2']];
92  $subject->setProperty('foo-1', ['bar-1' => 'foo-2']);
93  $subject->setProperty('foo-2', ['bar-2' => 'foo-3']);
94  $subject->setProperty('foo-2', null);
95 
96  self::assertSame($expected, $subject->getProperties());
97  }
98 
99  #[Test]
101  {
102  $subject = new ‪TestingFormElement();
103 
104  $expected = [
105  'foo-1' => [
106  'bar-1' => 'foo-2',
107  ],
108  'foo-2' => [
109  'bar-2' => 'foo-3',
110  ],
111  ];
112  $subject->setProperty('foo-1', ['bar-1' => 'foo-2']);
113  $subject->setProperty('foo-2', ['bar-2' => 'foo-3', 'bar-3' => 'foo-4']);
114  $subject->setProperty('foo-2', ['bar-3' => null]);
115 
116  self::assertSame($expected, $subject->getProperties());
117  }
118 
119  #[Test]
121  {
122  $this->expectException(IdentifierNotValidException::class);
123  $this->expectExceptionCode(1477082502);
124 
125  // GenericFormElement inherits from AbstractFormElement and serves as concrete implementation
126  new ‪GenericFormElement('', 'a_type');
127  }
128 
129  #[Test]
131  {
132  $formElement = new ‪TestingFormElement();
133 
134  self::assertInstanceOf(TestingFormElement::class, $formElement);
135  }
136 
137  #[Test]
139  {
140  $formElement = new ‪TestingFormElement();
141  $secondFormElementMock = $this->createMock(TestingFormElement::class);
142 
143  $secondFormElementMock->
144  expects(self::once())
145  ->method('initializeFormElement')
146  ->with($formElement);
147 
148  $secondFormElementMockClassName = \get_class($secondFormElementMock);
149  GeneralUtility::addInstance($secondFormElementMockClassName, $secondFormElementMock);
150 
151  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['initializeFormElement'] = [
152  $secondFormElementMockClassName,
153  ];
154 
155  $formElement->initializeFormElement();
156  }
157 
158  #[Test]
159  public function ‪getUniqueIdentifierExpectedUnique(): void
160  {
161  $formDefinition1 = $this->createMock(FormDefinition::class);
162  $formDefinition1
163  ->method('getIdentifier')
164  ->willReturn('c');
165 
166  $formElement1 = new ‪TestingFormElement();
167  $formElement1->setParentRenderable($formDefinition1);
168 
169  $formDefinition2 = $this->createMock(FormDefinition::class);
170  $formDefinition2
171  ->method('getIdentifier')
172  ->willReturn('d');
173 
174  $formElement2 = new ‪TestingFormElement();
175  $formElement2->setParentRenderable($formDefinition2);
176 
177  self::assertNotSame(
178  $formElement1->getUniqueIdentifier(),
179  $formElement2->getUniqueIdentifier()
180  );
181  }
182 
183  #[Test]
185  {
186  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, null, [], '', false);
187  $formElement = new ‪TestingFormElement();
188  $formElement->setParentRenderable($formDefinitionMock);
189 
190  $input = 'foo';
191  $expected = 'foo';
192 
193  $formElement->setDefaultValue($input);
194 
195  self::assertSame($expected, $formElement->getDefaultValue());
196  }
197 
198  #[Test]
200  {
201  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, null, [], '', false);
202  $formElement = new ‪TestingFormElement();
203  $formElement->setParentRenderable($formDefinitionMock);
204 
205  $input = ['foo' => 'bar'];
206  $expected = ['foo' => 'bar'];
207 
208  $formElement->setDefaultValue($input);
209 
210  self::assertSame($expected, $formElement->getDefaultValue());
211  }
212 
213  #[Test]
215  {
216  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, null, [], '', false);
217  $formElement = new ‪TestingFormElement();
218  $formElement->setParentRenderable($formDefinitionMock);
219 
220  $input1 = [
221  'foo-1' => [
222  'bar-1' => 'foo-2',
223  ],
224  'foo-2' => [
225  'bar-2' => 'foo-3',
226  'bar-3' => 'foo-4',
227  ],
228  ];
229 
230  $input2 = [
231  'foo-2' => [
232  'bar-3' => null,
233  ],
234  ];
235 
236  $expected = [
237  'foo-1' => [
238  'bar-1' => 'foo-2',
239  ],
240  'foo-2' => [
241  'bar-2' => 'foo-3',
242  ],
243  ];
244 
245  $formElement->setDefaultValue($input1);
246  $formElement->setDefaultValue($input2);
247 
248  self::assertSame($expected, $formElement->getDefaultValue());
249  }
250 
251  #[Test]
253  {
254  $formDefinitionMock = $this->getAccessibleMock(FormDefinition::class, null, [], '', false);
255  $formElement = new ‪TestingFormElement();
256  $formElement->setParentRenderable($formDefinitionMock);
257 
258  $input1 = [
259  'foo-1' => [
260  'bar-1' => 'foo-2',
261  ],
262  'foo-2' => [
263  'bar-2' => 'foo-3',
264  ],
265  ];
266 
267  $input2 = [
268  'foo-2' => [
269  'bar-3' => 'foo-4',
270  ],
271  ];
272 
273  $expected = [
274  'foo-1' => [
275  'bar-1' => 'foo-2',
276  ],
277  'foo-2' => [
278  'bar-2' => 'foo-3',
279  'bar-3' => 'foo-4',
280  ],
281  ];
282 
283  $formElement->setDefaultValue($input1);
284  $formElement->setDefaultValue($input2);
285 
286  self::assertSame($expected, $formElement->getDefaultValue());
287  }
288 }
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueSetArrayValueIfKeyDoesNotExists
‪setDefaultValueSetArrayValueIfKeyDoesNotExists()
Definition: AbstractFormElementTest.php:199
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\constructThrowsExceptionWhenIdentifierIsEmpty
‪constructThrowsExceptionWhenIdentifierIsEmpty()
Definition: AbstractFormElementTest.php:120
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueUnsetIfValueIsArrayWithSomeNullVales
‪setDefaultValueUnsetIfValueIsArrayWithSomeNullVales()
Definition: AbstractFormElementTest.php:214
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\newInstanceHasNoProperties
‪newInstanceHasNoProperties()
Definition: AbstractFormElementTest.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\getUniqueIdentifierExpectedUnique
‪getUniqueIdentifierExpectedUnique()
Definition: AbstractFormElementTest.php:159
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\overrideProperties
‪overrideProperties()
Definition: AbstractFormElementTest.php:55
‪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\Fixtures\TestingFormElement
Definition: TestingFormElement.php:26
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueSetStringValueIfKeyDoesNotExists
‪setDefaultValueSetStringValueIfKeyDoesNotExists()
Definition: AbstractFormElementTest.php:184
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setPropertyUnsetIfValueIsArrayWithSomeNullVales
‪setPropertyUnsetIfValueIsArrayWithSomeNullVales()
Definition: AbstractFormElementTest.php:100
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setSimpleProperties
‪setSimpleProperties()
Definition: AbstractFormElementTest.php:39
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\initializeFormElementExpectedCallInitializeFormObjectHooks
‪initializeFormElementExpectedCallInitializeFormObjectHooks()
Definition: AbstractFormElementTest.php:138
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setArrayProperties
‪setArrayProperties()
Definition: AbstractFormElementTest.php:69
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\constructMustNotThrowExceptionWhenIdentifierIsNonEmptyString
‪constructMustNotThrowExceptionWhenIdentifierIsNonEmptyString()
Definition: AbstractFormElementTest.php:130
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest
Definition: AbstractFormElementTest.php:29
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setPropertyUnsetIfValueIsNull
‪setPropertyUnsetIfValueIsNull()
Definition: AbstractFormElementTest.php:87
‪TYPO3\CMS\Form\Domain\Model\FormDefinition
Definition: FormDefinition.php:224
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Form\Tests\Unit\Domain\FormElements\AbstractFormElementTest\setDefaultValueAddValueIfValueIsArray
‪setDefaultValueAddValueIfValueIsArray()
Definition: AbstractFormElementTest.php:252