‪TYPO3CMS  ‪main
Typo3XmlSerializerTest.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\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
26 final class ‪Typo3XmlSerializerTest extends UnitTestCase
27 {
28  #[Test]
30  {
31  $xmlEncoder = new ‪Typo3XmlSerializer();
32  $xml = $xmlEncoder->encode([]);
33  self::assertEquals('<phparray>
34 </phparray>', $xml);
35  }
36 
37  #[Test]
38  public function ‪encodeCanPreventWrappingByRootNode(): void
39  {
40  $xmlEncoder = new ‪Typo3XmlSerializer();
41  $xml = $xmlEncoder->encode(
42  ['node' => 'value'],
44  );
45  self::assertEquals('<node>value</node>
46 ', $xml);
47  }
48 
49  #[Test]
50  public function ‪encodeSupportsInlineXml(): void
51  {
52  $xmlEncoder = new ‪Typo3XmlSerializer();
53  $xml = $xmlEncoder->encode(
54  ['node' => 'value'],
56  );
57  self::assertEquals('<phparray><node>value</node></phparray>', $xml);
58  }
59 
60  #[Test]
62  {
63  $xmlEncoder = new ‪Typo3XmlSerializer();
64  $xml = $xmlEncoder->encode(
65  ['node' => 'value'],
67  );
68  self::assertEquals('<phparray>
69  <node>value</node>
70 </phparray>', $xml);
71  }
72 
73  #[Test]
75  {
76  $xmlEncoder = new ‪Typo3XmlSerializer();
77  $xml = $xmlEncoder->encode(
78  ['node' => 'value'],
80  );
81  self::assertEquals('<phparray>
82  <node>value</node>
83 </phparray>', $xml);
84  }
85 
86  #[Test]
88  {
89  $xmlEncoder = new ‪Typo3XmlSerializer();
90  $xml = $xmlEncoder->encode(['node-åæøöäüßąćęłńóśźżàâçèéêëîïôœùûÿ!§$%&/()=?_' => 'value']);
91  self::assertEquals('<phparray>
92  <node-_>value</node-_>
93 </phparray>', $xml);
94  }
95 
96  #[Test]
98  {
99  $xmlEncoder = new ‪Typo3XmlSerializer();
100  $xml = $xmlEncoder->encode(
101  ['node' => 'value'],
103  );
104  self::assertEquals('<phparray>
105  <namespace:node>value</namespace:node>
106 </phparray>', $xml);
107  }
108 
109  #[Test]
111  {
112  $xmlEncoder = new ‪Typo3XmlSerializer();
113  $xml = $xmlEncoder->encode(
114  ['value'],
115  null,
116  ['useNindex' => true]
117  );
118  self::assertEquals('<phparray>
119  <n0>value</n0>
120 </phparray>', $xml);
121  }
122 
123  #[Test]
125  {
126  $xmlEncoder = new ‪Typo3XmlSerializer();
127  $xml = $xmlEncoder->encode(
128  [
129  'value-1',
130  'value-2',
131  ],
132  null,
133  [
134  'useIndexTagForNum' => 'node-of-normal-array',
135  ]
136  );
137  self::assertEquals('<phparray>
138  <node-of-normal-array index="0">value-1</node-of-normal-array>
139  <node-of-normal-array index="1">value-2</node-of-normal-array>
140 </phparray>', $xml);
141  }
142 
143  #[Test]
145  {
146  $xmlEncoder = new ‪Typo3XmlSerializer();
147  $xml = $xmlEncoder->encode(
148  [
149  'node-1' => 'value-1',
150  'node-2' => 'value-2',
151  ],
152  null,
153  [
154  'useIndexTagForAssoc' => 'node-of-associative-array',
155  ]
156  );
157  self::assertEquals('<phparray>
158  <node-of-associative-array index="node-1">value-1</node-of-associative-array>
159  <node-of-associative-array index="node-2">value-2</node-of-associative-array>
160 </phparray>', $xml);
161  }
162 
163  #[Test]
165  {
166  $xmlEncoder = new ‪Typo3XmlSerializer();
167  $xml = $xmlEncoder->encode(
168  [
169  'grandParent' => [
170  'parent' => [
171  'child' => [
172  'grandChild' => 'value',
173  ],
174  ],
175  ],
176  ],
177  null,
178  [
179  'parentTagMap' => [
180  'parent' => 'child-renamed',
181  ],
182  ]
183  );
184  self::assertEquals('<phparray>
185  <grandParent type="array">
186  <parent type="array">
187  <child-renamed index="child" type="array">
188  <grandChild>value</grandChild>
189  </child-renamed>
190  </parent>
191  </grandParent>
192 </phparray>', $xml);
193  }
194 
195  #[Test]
197  {
198  $xmlEncoder = new ‪Typo3XmlSerializer();
199  $xml = $xmlEncoder->encode(
200  [
201  'grandParent' => [
202  'parent' => [
203  'child-1' => [
204  'grandChild' => 'value',
205  ],
206  'child-2' => 'value-2',
207  ],
208  ],
209  ],
210  null,
211  [
212  'parentTagMap' => [
213  'parent:child-1' => 'child-1-renamed',
214  ],
215  ]
216  );
217  self::assertEquals('<phparray>
218  <grandParent type="array">
219  <parent type="array">
220  <child-1-renamed index="child-1" type="array">
221  <grandChild>value</grandChild>
222  </child-1-renamed>
223  <child-2>value-2</child-2>
224  </parent>
225  </grandParent>
226 </phparray>', $xml);
227  }
228 
229  #[Test]
231  {
232  $xmlEncoder = new ‪Typo3XmlSerializer();
233  $xml = $xmlEncoder->encode(
234  [
235  'grandParent' => [
236  'parent' => [
237  [
238  'grandChild' => 'value',
239  ],
240  ],
241  ],
242  ],
243  null,
244  [
245  'parentTagMap' => [
246  'parent:_IS_NUM' => 'child-renamed',
247  ],
248  ]
249  );
250  self::assertEquals('<phparray>
251  <grandParent type="array">
252  <parent type="array">
253  <child-renamed index="0" type="array">
254  <grandChild>value</grandChild>
255  </child-renamed>
256  </parent>
257  </grandParent>
258 </phparray>', $xml);
259  }
260 
261  #[Test]
263  {
264  $xmlEncoder = new ‪Typo3XmlSerializer();
265  $xml = $xmlEncoder->encode(
266  [
267  'grandGrandParent' => [
268  'grandParent' => [
269  'parent' => [
270  'child' => [
271  'grandChild' => 'value',
272  ],
273  ],
274  ],
275  ],
276  ],
277  null,
278  [
279  'grandParentTagMap' => [
280  'grandParent/parent' => 'child-renamed',
281  ],
282  ]
283  );
284  self::assertEquals('<phparray>
285  <grandGrandParent type="array">
286  <grandParent type="array">
287  <parent type="array">
288  <child-renamed index="child" type="array">
289  <grandChild>value</grandChild>
290  </child-renamed>
291  </parent>
292  </grandParent>
293  </grandGrandParent>
294 </phparray>', $xml);
295  }
296 
297  #[Test]
299  {
300  $xmlEncoder = new ‪Typo3XmlSerializer();
301  $xml = $xmlEncoder->encode([
302  'string' => 'value',
303  'integer' => 1,
304  'double' => 0.2,
305  'boolean' => true,
306  'object' => null,
307  'array' => [],
308  ]);
309  self::assertEquals('<phparray>
310  <string>value</string>
311  <integer type="integer">1</integer>
312  <double type="double">0.2</double>
313  <boolean type="boolean">1</boolean>
314  <object type="NULL"></object>
315  <array type="array"></array>
316 </phparray>', $xml);
317  }
318 
320  {
321  return [
322  ['disableTypeAttrib' => true],
323  ['disableTypeAttrib' => 1],
324  ];
325  }
326 
327  #[DataProvider('encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArrayDataProvider')]
328  #[Test]
329  public function ‪encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArray(mixed $disableTypeAttrib): void
330  {
331  $xmlEncoder = new ‪Typo3XmlSerializer();
332  $xml = $xmlEncoder->encode(
333  [
334  'string' => 'value',
335  'integer' => 1,
336  'double' => 0.2,
337  'boolean' => true,
338  'object' => null,
339  'array' => [],
340  ],
341  null,
342  [
343  'disableTypeAttrib' => $disableTypeAttrib,
344  ]
345  );
346  self::assertEquals('<phparray>
347  <string>value</string>
348  <integer>1</integer>
349  <double>0.2</double>
350  <boolean>1</boolean>
351  <object></object>
352  <array type="array"></array>
353 </phparray>', $xml);
354  }
355 
356  #[Test]
358  {
359  $xmlEncoder = new ‪Typo3XmlSerializer();
360  $xml = $xmlEncoder->encode(
361  [
362  'string' => 'value',
363  'integer' => 1,
364  'double' => 0.2,
365  'boolean' => true,
366  'object' => null,
367  'array' => [],
368  ],
369  null,
370  [
371  'disableTypeAttrib' => 2,
372  ]
373  );
374  self::assertEquals('<phparray>
375  <string>value</string>
376  <integer>1</integer>
377  <double>0.2</double>
378  <boolean>1</boolean>
379  <object></object>
380  <array></array>
381 </phparray>', $xml);
382  }
383 
384  #[Test]
386  {
387  $xmlEncoder = new ‪Typo3XmlSerializer();
388  $content = file_get_contents(__DIR__ . '/Fixtures/file.gif');
389  $contentBase64Encoded = chunk_split(base64_encode($content));
390  $xml = $xmlEncoder->encode([
391  'binary' => $content,
392  ]);
393  self::assertEquals("<phparray>
394  <binary base64=\"1\">
395 $contentBase64Encoded</binary>
396 </phparray>", $xml);
397  }
398 
399  #[Test]
401  {
402  $xmlEncoder = new ‪Typo3XmlSerializer();
403  $xml = $xmlEncoder->encode(
404  [
405  'grandParent1' => [
406  'parent1' => [
407  'value1',
408  ],
409  'parent2' => [
410  'value2',
411  ],
412  ],
413  'grandParent2' => [
414  'parent3' => [
415  'child3' => 'value3',
416  ],
417  'parent4' => [
418  'child4' => 'value4',
419  ],
420  ],
421  ],
422  null,
423  [
424  'useNindex' => false,
425  'useIndexTagForNum' => null,
426  'useIndexTagForAssoc' => null,
427  'alt_options' => [
428  '/grandParent1/parent1' => [
429  'useIndexTagForNum' => 'numbered-index',
430  ],
431  '/grandParent1/parent2' => [
432  'useNindex' => true,
433  ],
434  '/grandParent2' => [
435  'clearStackPath' => true,
436  'alt_options' => [
437  '/parent4' => [
438  'useIndexTagForAssoc' => 'named-index',
439  ],
440  ],
441  ],
442  ],
443  ]
444  );
445  self::assertEquals('<phparray>
446  <grandParent1 type="array">
447  <parent1 type="array">
448  <numbered-index index="0">value1</numbered-index>
449  </parent1>
450  <parent2 type="array">
451  <n0>value2</n0>
452  </parent2>
453  </grandParent1>
454  <grandParent2 type="array">
455  <parent3 type="array">
456  <child3>value3</child3>
457  </parent3>
458  <parent4 type="array">
459  <named-index index="child4">value4</named-index>
460  </parent4>
461  </grandParent2>
462 </phparray>', $xml);
463  }
464 }
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNode
‪encodeCanDisableAddingTypeAttributeToNode()
Definition: Typo3XmlSerializerTest.php:357
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest
Definition: Typo3XmlSerializerTest.php:27
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializer
Definition: Typo3XmlSerializer.php:121
‪TYPO3\CMS\Core\Tests\Unit\Serializer
Definition: Typo3XmlParserTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfParentAndNodeMatchNames
‪encodeCanReplaceNodeNameAndAddAsIndexIfParentAndNodeMatchNames()
Definition: Typo3XmlSerializerTest.php:196
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsPrettyPrintWithTabIndentation
‪encodeSupportsPrettyPrintWithTabIndentation()
Definition: Typo3XmlSerializerTest.php:61
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeReturnsRootNodeIfArrayIsEmpty
‪encodeReturnsRootNodeIfArrayIsEmpty()
Definition: Typo3XmlSerializerTest.php:29
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanSetAlternativeOptionsPerNestingLevel
‪encodeCanSetAlternativeOptionsPerNestingLevel()
Definition: Typo3XmlSerializerTest.php:400
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsString
‪encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsString()
Definition: Typo3XmlSerializerTest.php:144
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\ROOT_NODE_NAME
‪const ROOT_NODE_NAME
Definition: Typo3XmlParserOptions.php:29
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\FORMAT_INLINE
‪const FORMAT_INLINE
Definition: Typo3XmlParserOptions.php:26
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeEnsuresAlphaNumericCharactersAndMinusAndUnderscoreInNodeName
‪encodeEnsuresAlphaNumericCharactersAndMinusAndUnderscoreInNodeName()
Definition: Typo3XmlSerializerTest.php:87
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsPrettyPrintWith4SpacesIndentation
‪encodeSupportsPrettyPrintWith4SpacesIndentation()
Definition: Typo3XmlSerializerTest.php:74
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsInlineXml
‪encodeSupportsInlineXml()
Definition: Typo3XmlSerializerTest.php:50
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsNumber
‪encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsNumber()
Definition: Typo3XmlSerializerTest.php:124
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPrependNamespaceToNodeName
‪encodeCanPrependNamespaceToNodeName()
Definition: Typo3XmlSerializerTest.php:97
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArray
‪encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArray(mixed $disableTypeAttrib)
Definition: Typo3XmlSerializerTest.php:329
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArrayDataProvider
‪static encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArrayDataProvider()
Definition: Typo3XmlSerializerTest.php:319
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPrependNToNodeNameIfNodeNameIsNumber
‪encodeCanPrependNToNodeNameIfNodeNameIsNumber()
Definition: Typo3XmlSerializerTest.php:110
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPreventWrappingByRootNode
‪encodeCanPreventWrappingByRootNode()
Definition: Typo3XmlSerializerTest.php:38
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeAddsTypeAttributeToNodeIfValueIsNotString
‪encodeAddsTypeAttributeToNodeIfValueIsNotString()
Definition: Typo3XmlSerializerTest.php:298
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions
Definition: Typo3XmlParserOptions.php:24
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\FORMAT
‪const FORMAT
Definition: Typo3XmlParserOptions.php:25
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfParentMatchesNameAndNodeNameIsNumber
‪encodeCanReplaceNodeNameAndAddAsIndexIfParentMatchesNameAndNodeNameIsNumber()
Definition: Typo3XmlSerializerTest.php:230
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\FORMAT_PRETTY_WITH_TAB
‪const FORMAT_PRETTY_WITH_TAB
Definition: Typo3XmlParserOptions.php:27
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfParentMatchesName
‪encodeCanReplaceNodeNameAndAddAsIndexIfParentMatchesName()
Definition: Typo3XmlSerializerTest.php:164
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\NAMESPACE_PREFIX
‪const NAMESPACE_PREFIX
Definition: Typo3XmlParserOptions.php:28
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfGrandParentAndParentAndNodeMatchNames
‪encodeCanReplaceNodeNameAndAddAsIndexIfGrandParentAndParentAndNodeMatchNames()
Definition: Typo3XmlSerializerTest.php:262
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeAddsBase64AttributeAndEncodesWithBase64IfValueIsBinaryData
‪encodeAddsBase64AttributeAndEncodesWithBase64IfValueIsBinaryData()
Definition: Typo3XmlSerializerTest.php:385