‪TYPO3CMS  ‪main
Typo3XmlParserTest.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;
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
28 
29 final class ‪Typo3XmlParserTest extends UnitTestCase
30 {
31  public static function ‪decodeReturnsStringOrArrayDataProvider(): array
32  {
33  return [
34  'EmptyRootNode' => [
35  '<phparray></phparray>',
36  '',
37  ],
38  'RootNodeContainsText' => [
39  '<phparray>content</phparray>',
40  'content',
41  ],
42  'RootNodeContainsSubNode' => [
43  '<phparray><node>content</node></phparray>',
44  ['node' => 'content'],
45  ],
46  ];
47  }
48 
49  #[DataProvider('decodeReturnsStringOrArrayDataProvider')]
50  #[Test]
51  public function ‪decodeReturnsStringOrArray(string $data, mixed $expected): void
52  {
53  $xmlDecoder = new ‪Typo3XmlParser();
54  $result = $xmlDecoder->decode($data);
55  self::assertEquals($expected, $result);
56  }
57 
58  public static function ‪decodeHandlesCommentsDataProvider(): array
59  {
60  return [
61  'IgnoreComments' => [
62  [],
63  ['node' => 'content'],
64  ],
65  'IgnoreCommentsToo' => [
66  [‪Typo3XmlSerializerOptions::IGNORED_NODE_TYPES => [\XML_COMMENT_NODE]],
67  ['node' => 'content'],
68  ],
69  'DoNotIgnoreComments' => [
71  ['node' => 'content', '#comment' => ' Comment '],
72  ],
73  ];
74  }
75 
76  #[DataProvider('decodeHandlesCommentsDataProvider')]
77  #[Test]
78  public function ‪decodeHandlesComments(array $config, array $expected): void
79  {
80  $xmlDecoder = new ‪Typo3XmlParser();
81  $result = $xmlDecoder->decode('<phparray attribute="ignored">
82  <!-- Comment -->
83  <node>content</node>
84 </phparray>', new ‪Typo3XmlSerializerOptions($config));
85  self::assertEquals($expected, $result);
86  }
87 
88  #[Test]
89  public function ‪decodeIgnoresNodeAttributes(): void
90  {
91  $xmlDecoder = new ‪Typo3XmlParser();
92  $result = $xmlDecoder->decode('<phparray attribute="ignored">
93  <node attribute="ignored">content</node>
94 </phparray>');
95  self::assertEquals(['node' => 'content'], $result);
96  }
97 
101  public static function ‪decodeHandlesWhitespacesDataProvider(): array
102  {
103  $headerVariants = [
104  'utf-8' => '<?xml version="1.0" encoding="utf-8" standalone="yes"?>',
105  'UTF-8' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>',
106  'no-encoding' => '<?xml version="1.0" standalone="yes"?>',
107  'iso-8859-1' => '<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>',
108  'ISO-8859-1' => '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>',
109  ];
110  $data = [];
111  foreach ($headerVariants as ‪$identifier => $headerVariant) {
112  $data += [
113  'inputWithoutWhitespaces-' . ‪$identifier => [
114  $headerVariant . '<T3FlexForms>
115  <data>
116  <field index="settings.persistenceIdentifier">
117  <value index="vDEF">egon</value>
118  </field>
119  </data>
120  </T3FlexForms>',
121  ],
122  'inputWithPrecedingWhitespaces-' . ‪$identifier => [
123  CR . ' ' . $headerVariant . '<T3FlexForms>
124  <data>
125  <field index="settings.persistenceIdentifier">
126  <value index="vDEF">egon</value>
127  </field>
128  </data>
129  </T3FlexForms>',
130  ],
131  'inputWithTrailingWhitespaces-' . ‪$identifier => [
132  $headerVariant . '<T3FlexForms>
133  <data>
134  <field index="settings.persistenceIdentifier">
135  <value index="vDEF">egon</value>
136  </field>
137  </data>
138  </T3FlexForms>' . CR . ' ',
139  ],
140  'inputWithPrecedingAndTrailingWhitespaces-' . ‪$identifier => [
141  CR . ' ' . $headerVariant . '<T3FlexForms>
142  <data>
143  <field index="settings.persistenceIdentifier">
144  <value index="vDEF">egon</value>
145  </field>
146  </data>
147  </T3FlexForms>' . CR . ' ',
148  ],
149  ];
150  }
151  return $data;
152  }
153 
157  #[DataProvider('decodeHandlesWhitespacesDataProvider')]
158  #[Test]
159  public function ‪decodeHandlesWhitespaces(string $input): void
160  {
161  $xmlDecoder = new ‪Typo3XmlParser();
162  $expected = [
163  'data' => [
164  'settings.persistenceIdentifier' => [
165  'vDEF' => 'egon',
166  ],
167  ],
168  ];
169  self::assertSame($expected, $xmlDecoder->decode($input));
170  }
171 
175  public static function decodeHandlesTagNamespacesDataProvider(): array
176  {
177  return [
178  'inputWithNameSpaceOnRootLevel' => [
179  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
180  <T3:T3FlexForms xmlns:T3="https://typo3.org/ns/T3">
181  <data>
182  <field>
183  <value index="vDEF1">egon</value>
184  <value index="vDEF2"><![CDATA[egon<CDATA:tag>olsen]]></value>
185  </field>
186  </data>
187  </T3:T3FlexForms>',
188  [
189  'data' => [
190  'field' => [
191  'vDEF1' => 'egon',
192  'vDEF2' => 'egon<CDATA:tag>olsen',
193  ],
194  ],
195  ],
196  ],
197  'inputWithNameSpaceOnNonRootLevel' => [
198  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
199  <T3FlexForms xmlns:T3="https://typo3.org/ns/T3">
200  <data>
201  <T3:field>
202  <value index="vDEF1">egon</value>
203  <value index="vDEF2"><![CDATA[egon<CDATA:tag>olsen]]></value>
204  </T3:field>
205  </data>
206  </T3FlexForms>',
207  [
208  'data' => [
209  'field' => [
210  'vDEF1' => 'egon',
211  'vDEF2' => 'egon<CDATA:tag>olsen',
212  ],
213  ],
214  ],
215  ],
216  'inputWithNameSpaceOnRootAndNonRootLevel' => [
217  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
218  <T3:T3FlexForms xmlns:T3="https://typo3.org/ns/T3">
219  <data>
220  <T3:field>
221  <value index="vDEF1">egon</value>
222  <value index="vDEF2"><![CDATA[egon<CDATA:tag>olsen]]></value>
223  </T3:field>
224  </data>
225  </T3:T3FlexForms>',
226  [
227  'data' => [
228  'field' => [
229  'vDEF1' => 'egon',
230  'vDEF2' => 'egon<CDATA:tag>olsen',
231  ],
232  ],
233  ],
234  ],
235  'inputWithUndefinedNamespace' => [
236  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
237  <T3:T3FlexForms>
238  <data>
239  <T3:field>
240  <value index="vDEF1">egon</value>
241  <value index="vDEF2"><![CDATA[egon<CDATA:tag>olsen]]></value>
242  </T3:field>
243  </data>
244  </T3:T3FlexForms>',
245  [
246  'data' => [
247  'field' => [
248  'vDEF1' => 'egon',
249  'vDEF2' => 'egon<CDATA:tag>olsen',
250  ],
251  ],
252  ],
254  ],
255  ];
256  }
257 
258  #[DataProvider('decodeHandlesTagNamespacesDataProvider')]
259  #[Test]
260  public function ‪decodeHandlesTagNamespaces(string $input, array $expected, array $options = []): void
261  {
262  $xmlDecoder = new ‪Typo3XmlParser();
263  self::assertSame(
264  $expected,
265  $xmlDecoder->decode($input, new ‪Typo3XmlSerializerOptions($options + [‪Typo3XmlSerializerOptions::NAMESPACE_PREFIX => 'T3:']))
266  );
267  }
268 
272  public static function ‪decodeReturnsRootNodeNameDataProvider(): array
273  {
274  return [
275  'input' => [
276  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
277  <T3FlexForms>
278  <data>
279  <field index="settings.persistenceIdentifier">
280  <value index="vDEF">egon</value>
281  </field>
282  </data>
283  </T3FlexForms>',
284  'T3FlexForms',
285  ],
286  'input-with-root-namespace' => [
287  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
288  <T3:T3FlexForms xmlns:T3="https://typo3.org/ns/T3">
289  <data>
290  <field index="settings.persistenceIdentifier">
291  <value index="vDEF">egon</value>
292  </field>
293  </data>
294  </T3:T3FlexForms>',
295  'T3:T3FlexForms',
296  ],
297  'input-with-namespace' => [
298  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
299  <T3FlexForms xmlns:T3="https://typo3.org/ns/T3">
300  <data>
301  <T3:field index="settings.persistenceIdentifier">
302  <value index="vDEF">egon</value>
303  </T3:field>
304  </data>
305  </T3FlexForms>',
306  'T3FlexForms',
307  ],
308  ];
309  }
310 
311  #[DataProvider('decodeReturnsRootNodeNameDataProvider')]
312  #[Test]
313  public function ‪decodeReturnsRootNodeName(string $input, string $rootNodeName): void
314  {
315  $xmlDecoder = new ‪Typo3XmlParser();
316  $expected = [
317  'data' => [
318  'settings.persistenceIdentifier' => [
319  'vDEF' => 'egon',
320  ],
321  ],
322  '_DOCUMENT_TAG' => $rootNodeName,
323  ];
324  self::assertSame(
325  $expected,
327  );
328  }
329 
330  #[DataProvider('decodeReturnsRootNodeNameDataProvider')]
331  #[Test]
332  public function ‪decodeCanIncludeRootNode(string $input, string $rootNodeName, array $options = []): void
333  {
334  $xmlDecoder = new ‪Typo3XmlParser();
335  $expected = [
336  $rootNodeName => [
337  'data' => [
338  'settings.persistenceIdentifier' => [
339  'vDEF' => 'egon',
340  ],
341  ],
342  ],
343  ];
344  self::assertSame(
345  $expected,
346  $xmlDecoder->decode($input, new ‪Typo3XmlSerializerOptions($options + [‪Typo3XmlSerializerOptions::INCLUDE_ROOT_NODE => true]))
347  );
348  }
349 
353  public static function ‪decodeHandlesBigXmlContentDataProvider(): array
354  {
355  return [
356  '1mb' => [
357  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
358  <T3FlexForms>
359  <data>
360  <field index="settings.persistenceIdentifier">
361  <value index="vDEF">' . str_repeat('1', 1024 * 1024) . '</value>
362  </field>
363  </data>
364  </T3FlexForms>',
365  str_repeat('1', 1024 * 1024),
366  ],
367  '5mb' => [
368  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
369  <T3FlexForms>
370  <data>
371  <field index="settings.persistenceIdentifier">
372  <value index="vDEF">' . str_repeat('1', 5 * 1024 * 1024) . '</value>
373  </field>
374  </data>
375  </T3FlexForms>',
376  str_repeat('1', 5 * 1024 * 1024),
377  ],
378  '10mb' => [
379  '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
380  <T3FlexForms>
381  <data>
382  <field index="settings.persistenceIdentifier">
383  <value index="vDEF">' . str_repeat('1', 10 * 1024 * 1024) . '</value>
384  </field>
385  </data>
386  </T3FlexForms>',
387  str_repeat('1', 10 * 1024 * 1024),
388  ],
389  ];
390  }
391 
392  #[DataProvider('decodeHandlesBigXmlContentDataProvider')]
393  #[Test]
394  public function ‪decodeHandlesBigXmlContent(string $input, string $testValue): void
395  {
396  $xmlDecoder = new ‪Typo3XmlParser();
397  $expected = [
398  'data' => [
399  'settings.persistenceIdentifier' => [
400  'vDEF' => $testValue,
401  ],
402  ],
403  ];
404  self::assertSame($expected, $xmlDecoder->decode($input));
405  }
406 
410  public static function ‪decodeHandlesAttributeTypesDataProvider(): array
411  {
412  $prefix = '<?xml version="1.0" encoding="utf-8" standalone="yes"?><T3FlexForms><field index="index">';
413  $suffix = '</field></T3FlexForms>';
414  return [
415  'no-type string' => [
416  $prefix . '<value index="vDEF">foo bar</value>' . $suffix,
417  'foo bar',
418  ],
419  'no-type string with blank line' => [
420  $prefix . '<value index="vDEF">foo bar' . PHP_EOL . '</value>' . $suffix,
421  'foo bar' . PHP_EOL,
422  ],
423  'no-type integer' => [
424  $prefix . '<value index="vDEF">123</value>' . $suffix,
425  '123',
426  ],
427  'no-type double' => [
428  $prefix . '<value index="vDEF">1.23</value>' . $suffix,
429  '1.23',
430  ],
431  'integer integer' => [
432  $prefix . '<value index="vDEF" type="integer">123</value>' . $suffix,
433  123,
434  ],
435  'integer double' => [
436  $prefix . '<value index="vDEF" type="integer">1.23</value>' . $suffix,
437  1,
438  ],
439  'double integer' => [
440  $prefix . '<value index="vDEF" type="double">123</value>' . $suffix,
441  123.0,
442  ],
443  'double double' => [
444  $prefix . '<value index="vDEF" type="double">1.23</value>' . $suffix,
445  1.23,
446  ],
447  'boolean 0' => [
448  $prefix . '<value index="vDEF" type="boolean">0</value>' . $suffix,
449  false,
450  ],
451  'boolean 1' => [
452  $prefix . '<value index="vDEF" type="boolean">1</value>' . $suffix,
453  true,
454  ],
455  'boolean true' => [
456  $prefix . '<value index="vDEF" type="boolean">true</value>' . $suffix,
457  true,
458  ],
459  'boolean false' => [
460  $prefix . '<value index="vDEF" type="boolean">false</value>' . $suffix,
461  true, // sic(!)
462  ],
463  'NULL' => [
464  $prefix . '<value index="vDEF" type="NULL"></value>' . $suffix,
465  null,
466  ],
467  'NULL string' => [
468  $prefix . '<value index="vDEF" type="NULL">foo bar</value>' . $suffix,
469  null,
470  ],
471  'NULL integer' => [
472  $prefix . '<value index="vDEF" type="NULL">123</value>' . $suffix,
473  null,
474  ],
475  'NULL double' => [
476  $prefix . '<value index="vDEF" type="NULL">1.23</value>' . $suffix,
477  null,
478  ],
479  'array' => [
480  $prefix . '<value index="vDEF" type="array"></value>' . $suffix,
481  [],
482  ],
483  'array with blank line' => [
484  $prefix . '<value index="vDEF" type="array">' . PHP_EOL . '</value>' . $suffix,
485  [],
486  ],
487  ];
488  }
489 
490  #[DataProvider('decodeHandlesAttributeTypesDataProvider')]
491  #[Test]
492  public function ‪decodeHandlesAttributeTypes(string $input, mixed $expected): void
493  {
494  $xmlDecoder = new ‪Typo3XmlParser();
495  $result = $xmlDecoder->decode($input);
496  self::assertSame($expected, $result['index']['vDEF']);
497  }
498 
499  #[Test]
500  public function ‪decodeHandlesBase64Attribute(): void
501  {
502  $xmlDecoder = new ‪Typo3XmlParser();
503  $content = file_get_contents(__DIR__ . '/Fixtures/file.gif');
504  $contentBase64Encoded = chunk_split(base64_encode($content));
505  $input = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
506 <T3FlexForms>
507  <field index="index">
508  <value index="image" base64="1">
509 ' . $contentBase64Encoded . '</value>
510  </field>
511 </T3FlexForms>
512  ';
513  $result = $xmlDecoder->decode($input);
514  self::assertSame($content, $result['index']['image']);
515  }
516 
518  {
519  return [
520  'emptyXml' => [
521  '',
522  [],
523  1630773210,
524  ],
525  'invalidXml' => [
526  '<node>content',
527  [],
528  1630773230,
529  ],
530  'invalidNodeDocumentType' => [
531  '<!DOCTYPE dummy SYSTEM "dummy.dtd"><dummy/>',
532  [],
533  1630773261,
534  ],
535  'noValidRootNode' => [
536  '<phparray></phparray>',
537  [‪Typo3XmlSerializerOptions::IGNORED_NODE_TYPES => [\XML_ELEMENT_NODE]],
538  1630773276,
539  ],
540  ];
541  }
542 
543  #[DataProvider('decodeThrowsExceptionOnXmlParsingErrorDataProvider')]
544  #[Test]
546  string $data,
547  array $config,
548  int $expected
549  ): void {
550  $this->expectException(Exception::class);
551  $this->expectExceptionCode($expected);
552  $xmlDecoder = new ‪Typo3XmlParser();
553  $xmlDecoder->decode($data, new ‪Typo3XmlSerializerOptions($config));
554  }
555 
556  #[Test]
557  public function ‪encodeDecodePingPongSucceeds(): void
558  {
559  $input = [
560  'types' => [
561  'string' => 'text',
562  'string-with-special-character' => 'text & image',
563  'int' => 3,
564  'bool' => false,
565  'double' => 4.2,
566  'null' => null,
567  ],
568  'binary' => file_get_contents(__DIR__ . '/Fixtures/file.gif'),
569  'empty' => [],
570  'associative' => [
571  'node1' => 'value1',
572  'node2' => 'value2',
573  ],
574  'numeric' => [
575  'value1',
576  'value2',
577  ],
578  'numeric-n-index' => [
579  'value1',
580  'value2',
581  ],
582  'nested' => [
583  'node1' => 'value1',
584  'node2' => [
585  'node' => 'value',
586  ],
587  ],
588  ];
589  $additionalOptions = [
590  'useIndexTagForNum' => 'numbered-index',
591  'alt_options' => [
592  '/numeric-n-index' => [
593  'useNindex' => true,
594  ],
595  '/nested' => [
596  'useIndexTagForAssoc' => 'nested-outer',
597  'clearStackPath' => true,
598  'alt_options' => [
599  '/nested-outer' => [
600  'useIndexTagForAssoc' => 'nested-inner',
601  ],
602  ],
603  ],
604  ],
605  ];
606  $encodingOptions = [
608  ];
609  $decodingOptions = [
612  ];
613  $xmlEncoder = new ‪Typo3XmlSerializer();
614  $xmlDecoder = new ‪Typo3XmlParser();
615  $arrayEncoded = $xmlEncoder->encode($input, new ‪Typo3XmlParserOptions($encodingOptions), $additionalOptions);
616  $arrayEncodedDecoded = $xmlDecoder->decode($arrayEncoded, new ‪Typo3XmlSerializerOptions($decodingOptions));
617  self::assertEquals($input, $arrayEncodedDecoded);
618  }
619 
620  #[Test]
622  {
623  self::markTestSkipped(
624  'Currently an empty array results in a string "\n" if encoded and decoded. ' .
625  'This is probably not intended and not required for backward compatibility.'
626  );
627  $result = [];
628  $xmlEncoder = new ‪Typo3XmlSerializer();
629  $xmlDecoder = new ‪Typo3XmlParser();
630  $arrayEncoded = $xmlEncoder->encode($result);
631  $arrayEncodedDecoded = $xmlDecoder->decode($arrayEncoded);
632  self::assertEquals($result, $arrayEncodedDecoded);
633  }
634 }
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesAttributeTypesDataProvider
‪static array[] decodeHandlesAttributeTypesDataProvider()
Definition: Typo3XmlParserTest.php:410
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesBigXmlContent
‪decodeHandlesBigXmlContent(string $input, string $testValue)
Definition: Typo3XmlParserTest.php:394
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesComments
‪decodeHandlesComments(array $config, array $expected)
Definition: Typo3XmlParserTest.php:78
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesAttributeTypes
‪decodeHandlesAttributeTypes(string $input, mixed $expected)
Definition: Typo3XmlParserTest.php:492
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeReturnsStringOrArrayDataProvider
‪static decodeReturnsStringOrArrayDataProvider()
Definition: Typo3XmlParserTest.php:31
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest
Definition: Typo3XmlParserTest.php:30
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializer
Definition: Typo3XmlSerializer.php:121
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesWhitespacesDataProvider
‪static string[][] decodeHandlesWhitespacesDataProvider()
Definition: Typo3XmlParserTest.php:101
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeThrowsExceptionOnXmlParsingErrorDataProvider
‪static decodeThrowsExceptionOnXmlParsingErrorDataProvider()
Definition: Typo3XmlParserTest.php:517
‪TYPO3\CMS\Core\Tests\Unit\Serializer
Definition: Typo3XmlParserTest.php:18
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions
Definition: Typo3XmlSerializerOptions.php:24
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\encodeDecodePingPongFailsForEmptyArray
‪encodeDecodePingPongFailsForEmptyArray()
Definition: Typo3XmlParserTest.php:621
‪TYPO3\CMS\Core\Exception
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeReturnsStringOrArray
‪decodeReturnsStringOrArray(string $data, mixed $expected)
Definition: Typo3XmlParserTest.php:51
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions\RETURN_ROOT_NODE_NAME
‪const RETURN_ROOT_NODE_NAME
Definition: Typo3XmlSerializerOptions.php:30
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\encodeDecodePingPongSucceeds
‪encodeDecodePingPongSucceeds()
Definition: Typo3XmlParserTest.php:557
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeReturnsRootNodeNameDataProvider
‪static array[] decodeReturnsRootNodeNameDataProvider()
Definition: Typo3XmlParserTest.php:272
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions\IGNORED_NODE_TYPES
‪const IGNORED_NODE_TYPES
Definition: Typo3XmlSerializerOptions.php:26
‪TYPO3\CMS\Core\Serializer\Typo3XmlParser
Definition: Typo3XmlParser.php:38
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesWhitespaces
‪decodeHandlesWhitespaces(string $input)
Definition: Typo3XmlParserTest.php:159
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesTagNamespaces
‪static decodeHandlesTagNamespaces(string $input, array $expected, array $options=[])
Definition: Typo3XmlParserTest.php:260
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions\ALLOW_UNDEFINED_NAMESPACES
‪const ALLOW_UNDEFINED_NAMESPACES
Definition: Typo3XmlSerializerOptions.php:29
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeThrowsExceptionOnXmlParsingError
‪decodeThrowsExceptionOnXmlParsingError(string $data, array $config, int $expected)
Definition: Typo3XmlParserTest.php:545
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions\INCLUDE_ROOT_NODE
‪const INCLUDE_ROOT_NODE
Definition: Typo3XmlSerializerOptions.php:25
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesCommentsDataProvider
‪static decodeHandlesCommentsDataProvider()
Definition: Typo3XmlParserTest.php:58
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeCanIncludeRootNode
‪decodeCanIncludeRootNode(string $input, string $rootNodeName, array $options=[])
Definition: Typo3XmlParserTest.php:332
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeReturnsRootNodeName
‪decodeReturnsRootNodeName(string $input, string $rootNodeName)
Definition: Typo3XmlParserTest.php:313
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesBigXmlContentDataProvider
‪static array[] decodeHandlesBigXmlContentDataProvider()
Definition: Typo3XmlParserTest.php:353
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions
Definition: Typo3XmlParserOptions.php:24
‪TYPO3\CMS\Core\Serializer\Typo3XmlParserOptions\NAMESPACE_PREFIX
‪const NAMESPACE_PREFIX
Definition: Typo3XmlParserOptions.php:28
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeIgnoresNodeAttributes
‪decodeIgnoresNodeAttributes()
Definition: Typo3XmlParserTest.php:89
‪TYPO3\CMS\Core\Serializer\Typo3XmlSerializerOptions\NAMESPACE_PREFIX
‪const NAMESPACE_PREFIX
Definition: Typo3XmlSerializerOptions.php:28
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37
‪TYPO3\CMS\Core\Tests\Unit\Serializer\Typo3XmlParserTest\decodeHandlesBase64Attribute
‪decodeHandlesBase64Attribute()
Definition: Typo3XmlParserTest.php:500