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