‪TYPO3CMS  11.5
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 
22 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
23 
24 class ‪Typo3XmlSerializerTest extends UnitTestCase
25 {
30  {
31  $xmlEncoder = new ‪Typo3XmlSerializer();
32  $xml = $xmlEncoder->encode([]);
33  self::assertEquals('<phparray>
34 </phparray>', $xml);
35  }
36 
40  public function ‪encodeCanPreventWrappingByRootNode(): void
41  {
42  $xmlEncoder = new ‪Typo3XmlSerializer();
43  $xml = $xmlEncoder->encode(
44  ['node' => 'value'],
46  );
47  self::assertEquals('<node>value</node>
48 ', $xml);
49  }
50 
54  public function ‪encodeSupportsInlineXml(): void
55  {
56  $xmlEncoder = new ‪Typo3XmlSerializer();
57  $xml = $xmlEncoder->encode(
58  ['node' => 'value'],
60  );
61  self::assertEquals('<phparray><node>value</node></phparray>', $xml);
62  }
63 
68  {
69  $xmlEncoder = new ‪Typo3XmlSerializer();
70  $xml = $xmlEncoder->encode(
71  ['node' => 'value'],
73  );
74  self::assertEquals('<phparray>
75  <node>value</node>
76 </phparray>', $xml);
77  }
78 
83  {
84  $xmlEncoder = new ‪Typo3XmlSerializer();
85  $xml = $xmlEncoder->encode(
86  ['node' => 'value'],
88  );
89  self::assertEquals('<phparray>
90  <node>value</node>
91 </phparray>', $xml);
92  }
93 
98  {
99  $xmlEncoder = new ‪Typo3XmlSerializer();
100  $xml = $xmlEncoder->encode(['node-åæøöäüßąćęłńóśźżàâçèéêëîïôœùûÿ!§$%&/()=?_' => 'value']);
101  self::assertEquals('<phparray>
102  <node-_>value</node-_>
103 </phparray>', $xml);
104  }
105 
110  {
111  $xmlEncoder = new ‪Typo3XmlSerializer();
112  $xml = $xmlEncoder->encode(
113  ['node' => 'value'],
115  );
116  self::assertEquals('<phparray>
117  <namespace:node>value</namespace:node>
118 </phparray>', $xml);
119  }
120 
125  {
126  $xmlEncoder = new ‪Typo3XmlSerializer();
127  $xml = $xmlEncoder->encode(
128  ['value'],
129  null,
130  ['useNindex' => true]
131  );
132  self::assertEquals('<phparray>
133  <n0>value</n0>
134 </phparray>', $xml);
135  }
136 
141  {
142  $xmlEncoder = new ‪Typo3XmlSerializer();
143  $xml = $xmlEncoder->encode(
144  [
145  'value-1',
146  'value-2',
147  ],
148  null,
149  [
150  'useIndexTagForNum' => 'node-of-normal-array',
151  ]
152  );
153  self::assertEquals('<phparray>
154  <node-of-normal-array index="0">value-1</node-of-normal-array>
155  <node-of-normal-array index="1">value-2</node-of-normal-array>
156 </phparray>', $xml);
157  }
158 
163  {
164  $xmlEncoder = new ‪Typo3XmlSerializer();
165  $xml = $xmlEncoder->encode(
166  [
167  'node-1' => 'value-1',
168  'node-2' => 'value-2',
169  ],
170  null,
171  [
172  'useIndexTagForAssoc' => 'node-of-associative-array',
173  ]
174  );
175  self::assertEquals('<phparray>
176  <node-of-associative-array index="node-1">value-1</node-of-associative-array>
177  <node-of-associative-array index="node-2">value-2</node-of-associative-array>
178 </phparray>', $xml);
179  }
180 
185  {
186  $xmlEncoder = new ‪Typo3XmlSerializer();
187  $xml = $xmlEncoder->encode(
188  [
189  'grandParent' => [
190  'parent' => [
191  'child' => [
192  'grandChild' => 'value',
193  ],
194  ],
195  ],
196  ],
197  null,
198  [
199  'parentTagMap' => [
200  'parent' => 'child-renamed',
201  ],
202  ]
203  );
204  self::assertEquals('<phparray>
205  <grandParent type="array">
206  <parent type="array">
207  <child-renamed index="child" type="array">
208  <grandChild>value</grandChild>
209  </child-renamed>
210  </parent>
211  </grandParent>
212 </phparray>', $xml);
213  }
214 
219  {
220  $xmlEncoder = new ‪Typo3XmlSerializer();
221  $xml = $xmlEncoder->encode(
222  [
223  'grandParent' => [
224  'parent' => [
225  'child-1' => [
226  'grandChild' => 'value',
227  ],
228  'child-2' => 'value-2',
229  ],
230  ],
231  ],
232  null,
233  [
234  'parentTagMap' => [
235  'parent:child-1' => 'child-1-renamed',
236  ],
237  ]
238  );
239  self::assertEquals('<phparray>
240  <grandParent type="array">
241  <parent type="array">
242  <child-1-renamed index="child-1" type="array">
243  <grandChild>value</grandChild>
244  </child-1-renamed>
245  <child-2>value-2</child-2>
246  </parent>
247  </grandParent>
248 </phparray>', $xml);
249  }
250 
255  {
256  $xmlEncoder = new ‪Typo3XmlSerializer();
257  $xml = $xmlEncoder->encode(
258  [
259  'grandParent' => [
260  'parent' => [
261  [
262  'grandChild' => 'value',
263  ],
264  ],
265  ],
266  ],
267  null,
268  [
269  'parentTagMap' => [
270  'parent:_IS_NUM' => 'child-renamed',
271  ],
272  ]
273  );
274  self::assertEquals('<phparray>
275  <grandParent type="array">
276  <parent type="array">
277  <child-renamed index="0" type="array">
278  <grandChild>value</grandChild>
279  </child-renamed>
280  </parent>
281  </grandParent>
282 </phparray>', $xml);
283  }
284 
289  {
290  $xmlEncoder = new ‪Typo3XmlSerializer();
291  $xml = $xmlEncoder->encode(
292  [
293  'grandGrandParent' => [
294  'grandParent' => [
295  'parent' => [
296  'child' => [
297  'grandChild' => 'value',
298  ],
299  ],
300  ],
301  ],
302  ],
303  null,
304  [
305  'grandParentTagMap' => [
306  'grandParent/parent' => 'child-renamed',
307  ],
308  ]
309  );
310  self::assertEquals('<phparray>
311  <grandGrandParent type="array">
312  <grandParent type="array">
313  <parent type="array">
314  <child-renamed index="child" type="array">
315  <grandChild>value</grandChild>
316  </child-renamed>
317  </parent>
318  </grandParent>
319  </grandGrandParent>
320 </phparray>', $xml);
321  }
322 
327  {
328  $xmlEncoder = new ‪Typo3XmlSerializer();
329  $xml = $xmlEncoder->encode(
330  [
331  'node-1' => 'value without special character',
332  'node-2' => 'value with special character &',
333  ],
334  null,
335  [
336  'useCDATA' => true,
337  ]
338  );
339  self::assertEquals('<phparray>
340  <node-1>value without special character</node-1>
341  <node-2><![CDATA[value with special character &]]></node-2>
342 </phparray>', $xml);
343  }
344 
349  {
350  $xmlEncoder = new ‪Typo3XmlSerializer();
351  $xml = $xmlEncoder->encode([
352  'string' => 'value',
353  'integer' => 1,
354  'double' => 0.2,
355  'boolean' => true,
356  'object' => null,
357  'array' => [],
358  ]);
359  self::assertEquals('<phparray>
360  <string>value</string>
361  <integer type="integer">1</integer>
362  <double type="double">0.2</double>
363  <boolean type="boolean">1</boolean>
364  <object type="NULL"></object>
365  <array type="array"></array>
366 </phparray>', $xml);
367  }
368 
370  {
371  return [
372  ['disableTypeAttrib' => true],
373  ['disableTypeAttrib' => 1],
374  ];
375  }
376 
382  {
383  $xmlEncoder = new ‪Typo3XmlSerializer();
384  $xml = $xmlEncoder->encode(
385  [
386  'string' => 'value',
387  'integer' => 1,
388  'double' => 0.2,
389  'boolean' => true,
390  'object' => null,
391  'array' => [],
392  ],
393  null,
394  [
395  'disableTypeAttrib' => $disableTypeAttrib,
396  ]
397  );
398  self::assertEquals('<phparray>
399  <string>value</string>
400  <integer>1</integer>
401  <double>0.2</double>
402  <boolean>1</boolean>
403  <object></object>
404  <array type="array"></array>
405 </phparray>', $xml);
406  }
407 
412  {
413  $xmlEncoder = new ‪Typo3XmlSerializer();
414  $xml = $xmlEncoder->encode(
415  [
416  'string' => 'value',
417  'integer' => 1,
418  'double' => 0.2,
419  'boolean' => true,
420  'object' => null,
421  'array' => [],
422  ],
423  null,
424  [
425  'disableTypeAttrib' => 2,
426  ]
427  );
428  self::assertEquals('<phparray>
429  <string>value</string>
430  <integer>1</integer>
431  <double>0.2</double>
432  <boolean>1</boolean>
433  <object></object>
434  <array></array>
435 </phparray>', $xml);
436  }
437 
442  {
443  $xmlEncoder = new ‪Typo3XmlSerializer();
444  $content = file_get_contents(__DIR__ . '/Fixtures/file.gif');
445  $contentBase64Encoded = chunk_split(base64_encode($content));
446  $xml = $xmlEncoder->encode([
447  'binary' => $content,
448  ]);
449  self::assertEquals("<phparray>
450  <binary base64=\"1\">
451 $contentBase64Encoded</binary>
452 </phparray>", $xml);
453  }
454 
459  {
460  $xmlEncoder = new ‪Typo3XmlSerializer();
461  $xml = $xmlEncoder->encode(
462  [
463  'grandParent1' => [
464  'parent1' => [
465  'value1',
466  ],
467  'parent2' => [
468  'value2',
469  ],
470  ],
471  'grandParent2' => [
472  'parent3' => [
473  'child3' => 'value3',
474  ],
475  'parent4' => [
476  'child4' => 'value4',
477  ],
478  ],
479  ],
480  null,
481  [
482  'useNindex' => false,
483  'useIndexTagForNum' => null,
484  'useIndexTagForAssoc' => null,
485  'alt_options' => [
486  '/grandParent1/parent1' => [
487  'useIndexTagForNum' => 'numbered-index',
488  ],
489  '/grandParent1/parent2' => [
490  'useNindex' => true,
491  ],
492  '/grandParent2' => [
493  'clearStackPath' => true,
494  'alt_options' => [
495  '/parent4' => [
496  'useIndexTagForAssoc' => 'named-index',
497  ],
498  ],
499  ],
500  ],
501  ]
502  );
503  self::assertEquals('<phparray>
504  <grandParent1 type="array">
505  <parent1 type="array">
506  <numbered-index index="0">value1</numbered-index>
507  </parent1>
508  <parent2 type="array">
509  <n0>value2</n0>
510  </parent2>
511  </grandParent1>
512  <grandParent2 type="array">
513  <parent3 type="array">
514  <child3>value3</child3>
515  </parent3>
516  <parent4 type="array">
517  <named-index index="child4">value4</named-index>
518  </parent4>
519  </grandParent2>
520 </phparray>', $xml);
521  }
522 }
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNode
‪encodeCanDisableAddingTypeAttributeToNode()
Definition: Typo3XmlSerializerTest.php:411
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest
Definition: Typo3XmlSerializerTest.php:25
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializer
Definition: Typo3XmlSerializer.php:123
‪TYPO3\CMS\Core\Tests\Unit\Serializer
Definition: Typo3XmlParserTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArray
‪encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArray($disableTypeAttrib)
Definition: Typo3XmlSerializerTest.php:381
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfParentAndNodeMatchNames
‪encodeCanReplaceNodeNameAndAddAsIndexIfParentAndNodeMatchNames()
Definition: Typo3XmlSerializerTest.php:218
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsPrettyPrintWithTabIndentation
‪encodeSupportsPrettyPrintWithTabIndentation()
Definition: Typo3XmlSerializerTest.php:67
‪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:458
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsString
‪encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsString()
Definition: Typo3XmlSerializerTest.php:162
‪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:97
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsPrettyPrintWith4SpacesIndentation
‪encodeSupportsPrettyPrintWith4SpacesIndentation()
Definition: Typo3XmlSerializerTest.php:82
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeSupportsInlineXml
‪encodeSupportsInlineXml()
Definition: Typo3XmlSerializerTest.php:54
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsNumber
‪encodeCanReplaceNodeNameAndAddAsIndexIfNodeNameIsNumber()
Definition: Typo3XmlSerializerTest.php:140
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPrependNamespaceToNodeName
‪encodeCanPrependNamespaceToNodeName()
Definition: Typo3XmlSerializerTest.php:109
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArrayDataProvider
‪static encodeCanDisableAddingTypeAttributeToNodeExceptIfValueIsArrayDataProvider()
Definition: Typo3XmlSerializerTest.php:369
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPrependNToNodeNameIfNodeNameIsNumber
‪encodeCanPrependNToNodeNameIfNodeNameIsNumber()
Definition: Typo3XmlSerializerTest.php:124
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanPreventWrappingByRootNode
‪encodeCanPreventWrappingByRootNode()
Definition: Typo3XmlSerializerTest.php:40
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeAddsTypeAttributeToNodeIfValueIsNotString
‪encodeAddsTypeAttributeToNodeIfValueIsNotString()
Definition: Typo3XmlSerializerTest.php:348
‪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:254
‪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:184
‪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:288
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeCanWrapStringWithCDATAIfStringContainsSpecialCharacters
‪encodeCanWrapStringWithCDATAIfStringContainsSpecialCharacters()
Definition: Typo3XmlSerializerTest.php:326
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlSerializerTest\encodeAddsBase64AttributeAndEncodesWithBase64IfValueIsBinaryData
‪encodeAddsBase64AttributeAndEncodesWithBase64IfValueIsBinaryData()
Definition: Typo3XmlSerializerTest.php:441