1<?php
2
3declare(strict_types=1);
4
5namespace Sabre\Xml\Deserializer;
6
7use Sabre\Xml\Service;
8
9class EnumTest extends \PHPUnit\Framework\TestCase
10{
11    public function testDeserialize()
12    {
13        $service = new Service();
14        $service->elementMap['{urn:test}root'] = 'Sabre\Xml\Deserializer\enum';
15
16        $xml = <<<XML
17<?xml version="1.0"?>
18<root xmlns="urn:test">
19   <foo1/>
20   <foo2/>
21</root>
22XML;
23
24        $result = $service->parse($xml);
25
26        $expected = [
27            '{urn:test}foo1',
28            '{urn:test}foo2',
29        ];
30
31        $this->assertEquals($expected, $result);
32    }
33
34    public function testDeserializeDefaultNamespace()
35    {
36        $service = new Service();
37        $service->elementMap['{urn:test}root'] = function ($reader) {
38            return enum($reader, 'urn:test');
39        };
40
41        $xml = <<<XML
42<?xml version="1.0"?>
43<root xmlns="urn:test">
44   <foo1/>
45   <foo2/>
46</root>
47XML;
48
49        $result = $service->parse($xml);
50
51        $expected = [
52            'foo1',
53            'foo2',
54        ];
55
56        $this->assertEquals($expected, $result);
57    }
58
59    public function testEmptyEnum()
60    {
61        $service = new Service();
62        $service->elementMap['{urn:test}enum'] = 'Sabre\Xml\Deserializer\enum';
63
64        $xml = <<<XML
65<?xml version="1.0"?>
66<root xmlns="urn:test">
67<inner>
68  <enum></enum>
69</inner>
70</root>
71XML;
72
73        $result = $service->parse($xml);
74
75        $this->assertEquals([[
76            'name' => '{urn:test}inner',
77            'value' => [[
78                'name' => '{urn:test}enum',
79                'value' => [],
80                'attributes' => [],
81            ]],
82            'attributes' => [],
83        ]], $result);
84    }
85}
86