xref: /plugin/davcal/vendor/sabre/xml/tests/Sabre/Xml/Element/KeyValueTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\Xml\Element;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\Xml\Reader;
6*a1a3b679SAndreas Boehleruse Sabre\Xml\Writer;
7*a1a3b679SAndreas Boehler
8*a1a3b679SAndreas Boehlerclass KeyValueTest extends \PHPUnit_Framework_TestCase {
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehler    function testDeserialize() {
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler        $input = <<<BLA
13*a1a3b679SAndreas Boehler<?xml version="1.0"?>
14*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
15*a1a3b679SAndreas Boehler  <struct>
16*a1a3b679SAndreas Boehler    <elem1 />
17*a1a3b679SAndreas Boehler    <elem2>hi</elem2>
18*a1a3b679SAndreas Boehler    <elem3>
19*a1a3b679SAndreas Boehler       <elem4>foo</elem4>
20*a1a3b679SAndreas Boehler       <elem5>foo &amp; bar</elem5>
21*a1a3b679SAndreas Boehler    </elem3>
22*a1a3b679SAndreas Boehler    <elem6>Hi<!-- ignore me -->there</elem6>
23*a1a3b679SAndreas Boehler  </struct>
24*a1a3b679SAndreas Boehler  <struct />
25*a1a3b679SAndreas Boehler  <otherThing>
26*a1a3b679SAndreas Boehler    <elem1 />
27*a1a3b679SAndreas Boehler  </otherThing>
28*a1a3b679SAndreas Boehler</root>
29*a1a3b679SAndreas BoehlerBLA;
30*a1a3b679SAndreas Boehler
31*a1a3b679SAndreas Boehler        $reader = new Reader();
32*a1a3b679SAndreas Boehler        $reader->elementMap = [
33*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}struct' => 'Sabre\\Xml\\Element\\KeyValue',
34*a1a3b679SAndreas Boehler        ];
35*a1a3b679SAndreas Boehler        $reader->xml($input);
36*a1a3b679SAndreas Boehler
37*a1a3b679SAndreas Boehler        $output = $reader->parse();
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler        $this->assertEquals([
40*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
41*a1a3b679SAndreas Boehler            'value' => [
42*a1a3b679SAndreas Boehler                [
43*a1a3b679SAndreas Boehler                    'name'  => '{http://sabredav.org/ns}struct',
44*a1a3b679SAndreas Boehler                    'value' => [
45*a1a3b679SAndreas Boehler                        '{http://sabredav.org/ns}elem1' => null,
46*a1a3b679SAndreas Boehler                        '{http://sabredav.org/ns}elem2' => 'hi',
47*a1a3b679SAndreas Boehler                        '{http://sabredav.org/ns}elem3' => [
48*a1a3b679SAndreas Boehler                            [
49*a1a3b679SAndreas Boehler                                'name'       => '{http://sabredav.org/ns}elem4',
50*a1a3b679SAndreas Boehler                                'value'      => 'foo',
51*a1a3b679SAndreas Boehler                                'attributes' => [],
52*a1a3b679SAndreas Boehler                            ],
53*a1a3b679SAndreas Boehler                            [
54*a1a3b679SAndreas Boehler                                'name'       => '{http://sabredav.org/ns}elem5',
55*a1a3b679SAndreas Boehler                                'value'      => 'foo & bar',
56*a1a3b679SAndreas Boehler                                'attributes' => [],
57*a1a3b679SAndreas Boehler                            ],
58*a1a3b679SAndreas Boehler                        ],
59*a1a3b679SAndreas Boehler                        '{http://sabredav.org/ns}elem6' => 'Hithere',
60*a1a3b679SAndreas Boehler                    ],
61*a1a3b679SAndreas Boehler                    'attributes' => [],
62*a1a3b679SAndreas Boehler                ],
63*a1a3b679SAndreas Boehler                [
64*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}struct',
65*a1a3b679SAndreas Boehler                    'value'      => [],
66*a1a3b679SAndreas Boehler                    'attributes' => [],
67*a1a3b679SAndreas Boehler                ],
68*a1a3b679SAndreas Boehler                [
69*a1a3b679SAndreas Boehler                    'name'  => '{http://sabredav.org/ns}otherThing',
70*a1a3b679SAndreas Boehler                    'value' => [
71*a1a3b679SAndreas Boehler                        [
72*a1a3b679SAndreas Boehler                            'name'       => '{http://sabredav.org/ns}elem1',
73*a1a3b679SAndreas Boehler                            'value'      => null,
74*a1a3b679SAndreas Boehler                            'attributes' => [],
75*a1a3b679SAndreas Boehler                        ],
76*a1a3b679SAndreas Boehler                    ],
77*a1a3b679SAndreas Boehler                    'attributes' => [],
78*a1a3b679SAndreas Boehler                ],
79*a1a3b679SAndreas Boehler            ],
80*a1a3b679SAndreas Boehler            'attributes' => [],
81*a1a3b679SAndreas Boehler        ], $output);
82*a1a3b679SAndreas Boehler
83*a1a3b679SAndreas Boehler    }
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler    /**
86*a1a3b679SAndreas Boehler     * This test was added to find out why an element gets eaten by the
87*a1a3b679SAndreas Boehler     * SabreDAV MKCOL parser.
88*a1a3b679SAndreas Boehler     */
89*a1a3b679SAndreas Boehler    function testElementEater() {
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler        $input = <<<BLA
92*a1a3b679SAndreas Boehler<?xml version="1.0"?>
93*a1a3b679SAndreas Boehler<mkcol xmlns="DAV:">
94*a1a3b679SAndreas Boehler  <set>
95*a1a3b679SAndreas Boehler    <prop>
96*a1a3b679SAndreas Boehler        <resourcetype><collection /></resourcetype>
97*a1a3b679SAndreas Boehler        <displayname>bla</displayname>
98*a1a3b679SAndreas Boehler    </prop>
99*a1a3b679SAndreas Boehler  </set>
100*a1a3b679SAndreas Boehler</mkcol>
101*a1a3b679SAndreas BoehlerBLA;
102*a1a3b679SAndreas Boehler
103*a1a3b679SAndreas Boehler        $reader = new Reader();
104*a1a3b679SAndreas Boehler        $reader->elementMap = [
105*a1a3b679SAndreas Boehler            '{DAV:}set'          => 'Sabre\\Xml\\Element\\KeyValue',
106*a1a3b679SAndreas Boehler            '{DAV:}prop'         => 'Sabre\\Xml\\Element\\KeyValue',
107*a1a3b679SAndreas Boehler            '{DAV:}resourcetype' => 'Sabre\\Xml\\Element\\Elements',
108*a1a3b679SAndreas Boehler        ];
109*a1a3b679SAndreas Boehler        $reader->xml($input);
110*a1a3b679SAndreas Boehler
111*a1a3b679SAndreas Boehler        $expected = [
112*a1a3b679SAndreas Boehler            'name'  => '{DAV:}mkcol',
113*a1a3b679SAndreas Boehler            'value' => [
114*a1a3b679SAndreas Boehler                [
115*a1a3b679SAndreas Boehler                    'name'  => '{DAV:}set',
116*a1a3b679SAndreas Boehler                    'value' => [
117*a1a3b679SAndreas Boehler                        '{DAV:}prop' => [
118*a1a3b679SAndreas Boehler                            '{DAV:}resourcetype' => [
119*a1a3b679SAndreas Boehler                                '{DAV:}collection',
120*a1a3b679SAndreas Boehler                            ],
121*a1a3b679SAndreas Boehler                            '{DAV:}displayname' => 'bla',
122*a1a3b679SAndreas Boehler                        ],
123*a1a3b679SAndreas Boehler                    ],
124*a1a3b679SAndreas Boehler                    'attributes' => [],
125*a1a3b679SAndreas Boehler                ],
126*a1a3b679SAndreas Boehler            ],
127*a1a3b679SAndreas Boehler            'attributes' => [],
128*a1a3b679SAndreas Boehler        ];
129*a1a3b679SAndreas Boehler
130*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $reader->parse());
131*a1a3b679SAndreas Boehler
132*a1a3b679SAndreas Boehler    }
133*a1a3b679SAndreas Boehler
134*a1a3b679SAndreas Boehler
135*a1a3b679SAndreas Boehler    function testSerialize() {
136*a1a3b679SAndreas Boehler
137*a1a3b679SAndreas Boehler        $value = [
138*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => null,
139*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem2' => 'textValue',
140*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem3' => [
141*a1a3b679SAndreas Boehler                '{http://sabredav.org/ns}elem4' => 'text2',
142*a1a3b679SAndreas Boehler                '{http://sabredav.org/ns}elem5' => null,
143*a1a3b679SAndreas Boehler            ],
144*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem6' => 'text3',
145*a1a3b679SAndreas Boehler        ];
146*a1a3b679SAndreas Boehler
147*a1a3b679SAndreas Boehler        $writer = new Writer();
148*a1a3b679SAndreas Boehler        $writer->namespaceMap = [
149*a1a3b679SAndreas Boehler            'http://sabredav.org/ns' => null
150*a1a3b679SAndreas Boehler        ];
151*a1a3b679SAndreas Boehler        $writer->openMemory();
152*a1a3b679SAndreas Boehler        $writer->startDocument('1.0');
153*a1a3b679SAndreas Boehler        $writer->setIndent(true);
154*a1a3b679SAndreas Boehler        $writer->write([
155*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => new KeyValue($value),
156*a1a3b679SAndreas Boehler        ]);
157*a1a3b679SAndreas Boehler
158*a1a3b679SAndreas Boehler        $output = $writer->outputMemory();
159*a1a3b679SAndreas Boehler
160*a1a3b679SAndreas Boehler        $expected = <<<XML
161*a1a3b679SAndreas Boehler<?xml version="1.0"?>
162*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
163*a1a3b679SAndreas Boehler <elem1/>
164*a1a3b679SAndreas Boehler <elem2>textValue</elem2>
165*a1a3b679SAndreas Boehler <elem3>
166*a1a3b679SAndreas Boehler  <elem4>text2</elem4>
167*a1a3b679SAndreas Boehler  <elem5/>
168*a1a3b679SAndreas Boehler </elem3>
169*a1a3b679SAndreas Boehler <elem6>text3</elem6>
170*a1a3b679SAndreas Boehler</root>
171*a1a3b679SAndreas Boehler
172*a1a3b679SAndreas BoehlerXML;
173*a1a3b679SAndreas Boehler
174*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
175*a1a3b679SAndreas Boehler
176*a1a3b679SAndreas Boehler    }
177*a1a3b679SAndreas Boehler
178*a1a3b679SAndreas Boehler    /**
179*a1a3b679SAndreas Boehler     * I discovered that when there's no whitespace between elements, elements
180*a1a3b679SAndreas Boehler     * can get skipped.
181*a1a3b679SAndreas Boehler     */
182*a1a3b679SAndreas Boehler    function testElementSkipProblem() {
183*a1a3b679SAndreas Boehler
184*a1a3b679SAndreas Boehler        $input = <<<BLA
185*a1a3b679SAndreas Boehler<?xml version="1.0" encoding="utf-8"?>
186*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
187*a1a3b679SAndreas Boehler<elem3>val3</elem3><elem4>val4</elem4><elem5>val5</elem5></root>
188*a1a3b679SAndreas BoehlerBLA;
189*a1a3b679SAndreas Boehler
190*a1a3b679SAndreas Boehler        $reader = new Reader();
191*a1a3b679SAndreas Boehler        $reader->elementMap = [
192*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => 'Sabre\\Xml\\Element\\KeyValue',
193*a1a3b679SAndreas Boehler        ];
194*a1a3b679SAndreas Boehler        $reader->xml($input);
195*a1a3b679SAndreas Boehler
196*a1a3b679SAndreas Boehler        $output = $reader->parse();
197*a1a3b679SAndreas Boehler
198*a1a3b679SAndreas Boehler        $this->assertEquals([
199*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
200*a1a3b679SAndreas Boehler            'value' => [
201*a1a3b679SAndreas Boehler                '{http://sabredav.org/ns}elem3' => 'val3',
202*a1a3b679SAndreas Boehler                '{http://sabredav.org/ns}elem4' => 'val4',
203*a1a3b679SAndreas Boehler                '{http://sabredav.org/ns}elem5' => 'val5',
204*a1a3b679SAndreas Boehler            ],
205*a1a3b679SAndreas Boehler            'attributes' => [],
206*a1a3b679SAndreas Boehler        ], $output);
207*a1a3b679SAndreas Boehler
208*a1a3b679SAndreas Boehler    }
209*a1a3b679SAndreas Boehler
210*a1a3b679SAndreas Boehler}
211