xref: /plugin/davcal/vendor/sabre/xml/tests/Sabre/Xml/ReaderTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\Xml;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehlerclass ReaderTest extends \PHPUnit_Framework_TestCase {
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehler    function testGetClark() {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler        $input = <<<BLA
10*a1a3b679SAndreas Boehler<?xml version="1.0"?>
11*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns" />
12*a1a3b679SAndreas BoehlerBLA;
13*a1a3b679SAndreas Boehler        $reader = new Reader();
14*a1a3b679SAndreas Boehler        $reader->xml($input);
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler        $reader->next();
17*a1a3b679SAndreas Boehler
18*a1a3b679SAndreas Boehler        $this->assertEquals('{http://sabredav.org/ns}root', $reader->getClark());
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler    }
21*a1a3b679SAndreas Boehler
22*a1a3b679SAndreas Boehler    function testGetClarkNoNS() {
23*a1a3b679SAndreas Boehler
24*a1a3b679SAndreas Boehler        $input = <<<BLA
25*a1a3b679SAndreas Boehler<?xml version="1.0"?>
26*a1a3b679SAndreas Boehler<root />
27*a1a3b679SAndreas BoehlerBLA;
28*a1a3b679SAndreas Boehler        $reader = new Reader();
29*a1a3b679SAndreas Boehler        $reader->xml($input);
30*a1a3b679SAndreas Boehler
31*a1a3b679SAndreas Boehler        $reader->next();
32*a1a3b679SAndreas Boehler
33*a1a3b679SAndreas Boehler        $this->assertEquals('{}root', $reader->getClark());
34*a1a3b679SAndreas Boehler
35*a1a3b679SAndreas Boehler    }
36*a1a3b679SAndreas Boehler
37*a1a3b679SAndreas Boehler    function testGetClarkNotOnAnElement() {
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler        $input = <<<BLA
40*a1a3b679SAndreas Boehler<?xml version="1.0"?>
41*a1a3b679SAndreas Boehler<root />
42*a1a3b679SAndreas BoehlerBLA;
43*a1a3b679SAndreas Boehler        $reader = new Reader();
44*a1a3b679SAndreas Boehler        $reader->xml($input);
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler        $this->assertNull($reader->getClark());
47*a1a3b679SAndreas Boehler    }
48*a1a3b679SAndreas Boehler
49*a1a3b679SAndreas Boehler    function testSimple() {
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler        $input = <<<BLA
52*a1a3b679SAndreas Boehler<?xml version="1.0"?>
53*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
54*a1a3b679SAndreas Boehler  <elem1 attr="val" />
55*a1a3b679SAndreas Boehler  <elem2>
56*a1a3b679SAndreas Boehler    <elem3>Hi!</elem3>
57*a1a3b679SAndreas Boehler  </elem2>
58*a1a3b679SAndreas Boehler</root>
59*a1a3b679SAndreas BoehlerBLA;
60*a1a3b679SAndreas Boehler
61*a1a3b679SAndreas Boehler        $reader = new Reader();
62*a1a3b679SAndreas Boehler        $reader->xml($input);
63*a1a3b679SAndreas Boehler
64*a1a3b679SAndreas Boehler        $output = $reader->parse();
65*a1a3b679SAndreas Boehler
66*a1a3b679SAndreas Boehler        $expected = [
67*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
68*a1a3b679SAndreas Boehler            'value' => [
69*a1a3b679SAndreas Boehler                [
70*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
71*a1a3b679SAndreas Boehler                    'value'      => null,
72*a1a3b679SAndreas Boehler                    'attributes' => [
73*a1a3b679SAndreas Boehler                        'attr' => 'val',
74*a1a3b679SAndreas Boehler                    ],
75*a1a3b679SAndreas Boehler                ],
76*a1a3b679SAndreas Boehler                [
77*a1a3b679SAndreas Boehler                    'name'  => '{http://sabredav.org/ns}elem2',
78*a1a3b679SAndreas Boehler                    'value' => [
79*a1a3b679SAndreas Boehler                        [
80*a1a3b679SAndreas Boehler                            'name'       => '{http://sabredav.org/ns}elem3',
81*a1a3b679SAndreas Boehler                            'value'      => 'Hi!',
82*a1a3b679SAndreas Boehler                            'attributes' => [],
83*a1a3b679SAndreas Boehler                        ],
84*a1a3b679SAndreas Boehler                    ],
85*a1a3b679SAndreas Boehler                    'attributes' => [],
86*a1a3b679SAndreas Boehler                ],
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehler            ],
89*a1a3b679SAndreas Boehler            'attributes' => [],
90*a1a3b679SAndreas Boehler
91*a1a3b679SAndreas Boehler        ];
92*a1a3b679SAndreas Boehler
93*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
94*a1a3b679SAndreas Boehler
95*a1a3b679SAndreas Boehler    }
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler    function testCDATA() {
98*a1a3b679SAndreas Boehler
99*a1a3b679SAndreas Boehler        $input = <<<BLA
100*a1a3b679SAndreas Boehler<?xml version="1.0"?>
101*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
102*a1a3b679SAndreas Boehler  <foo><![CDATA[bar]]></foo>
103*a1a3b679SAndreas Boehler</root>
104*a1a3b679SAndreas BoehlerBLA;
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler        $reader = new Reader();
107*a1a3b679SAndreas Boehler        $reader->xml($input);
108*a1a3b679SAndreas Boehler
109*a1a3b679SAndreas Boehler        $output = $reader->parse();
110*a1a3b679SAndreas Boehler
111*a1a3b679SAndreas Boehler        $expected = [
112*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
113*a1a3b679SAndreas Boehler            'value' => [
114*a1a3b679SAndreas Boehler                [
115*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}foo',
116*a1a3b679SAndreas Boehler                    'value'      => 'bar',
117*a1a3b679SAndreas Boehler                    'attributes' => [],
118*a1a3b679SAndreas Boehler                ],
119*a1a3b679SAndreas Boehler
120*a1a3b679SAndreas Boehler            ],
121*a1a3b679SAndreas Boehler            'attributes' => [],
122*a1a3b679SAndreas Boehler
123*a1a3b679SAndreas Boehler        ];
124*a1a3b679SAndreas Boehler
125*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
126*a1a3b679SAndreas Boehler
127*a1a3b679SAndreas Boehler    }
128*a1a3b679SAndreas Boehler
129*a1a3b679SAndreas Boehler    function testSimpleNamespacedAttribute() {
130*a1a3b679SAndreas Boehler
131*a1a3b679SAndreas Boehler        $input = <<<BLA
132*a1a3b679SAndreas Boehler<?xml version="1.0"?>
133*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns" xmlns:foo="urn:foo">
134*a1a3b679SAndreas Boehler  <elem1 foo:attr="val" />
135*a1a3b679SAndreas Boehler</root>
136*a1a3b679SAndreas BoehlerBLA;
137*a1a3b679SAndreas Boehler
138*a1a3b679SAndreas Boehler        $reader = new Reader();
139*a1a3b679SAndreas Boehler        $reader->xml($input);
140*a1a3b679SAndreas Boehler
141*a1a3b679SAndreas Boehler        $output = $reader->parse();
142*a1a3b679SAndreas Boehler
143*a1a3b679SAndreas Boehler        $expected = [
144*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
145*a1a3b679SAndreas Boehler            'value' => [
146*a1a3b679SAndreas Boehler                [
147*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
148*a1a3b679SAndreas Boehler                    'value'      => null,
149*a1a3b679SAndreas Boehler                    'attributes' => [
150*a1a3b679SAndreas Boehler                        '{urn:foo}attr' => 'val',
151*a1a3b679SAndreas Boehler                    ],
152*a1a3b679SAndreas Boehler                ],
153*a1a3b679SAndreas Boehler            ],
154*a1a3b679SAndreas Boehler            'attributes' => [],
155*a1a3b679SAndreas Boehler        ];
156*a1a3b679SAndreas Boehler
157*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
158*a1a3b679SAndreas Boehler
159*a1a3b679SAndreas Boehler    }
160*a1a3b679SAndreas Boehler
161*a1a3b679SAndreas Boehler    function testMappedElement() {
162*a1a3b679SAndreas Boehler
163*a1a3b679SAndreas Boehler        $input = <<<BLA
164*a1a3b679SAndreas Boehler<?xml version="1.0"?>
165*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
166*a1a3b679SAndreas Boehler  <elem1 />
167*a1a3b679SAndreas Boehler</root>
168*a1a3b679SAndreas BoehlerBLA;
169*a1a3b679SAndreas Boehler
170*a1a3b679SAndreas Boehler        $reader = new Reader();
171*a1a3b679SAndreas Boehler        $reader->elementMap = [
172*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Mock'
173*a1a3b679SAndreas Boehler        ];
174*a1a3b679SAndreas Boehler        $reader->xml($input);
175*a1a3b679SAndreas Boehler
176*a1a3b679SAndreas Boehler        $output = $reader->parse();
177*a1a3b679SAndreas Boehler
178*a1a3b679SAndreas Boehler        $expected = [
179*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
180*a1a3b679SAndreas Boehler            'value' => [
181*a1a3b679SAndreas Boehler                [
182*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
183*a1a3b679SAndreas Boehler                    'value'      => 'foobar',
184*a1a3b679SAndreas Boehler                    'attributes' => [],
185*a1a3b679SAndreas Boehler                ],
186*a1a3b679SAndreas Boehler            ],
187*a1a3b679SAndreas Boehler            'attributes' => [],
188*a1a3b679SAndreas Boehler
189*a1a3b679SAndreas Boehler        ];
190*a1a3b679SAndreas Boehler
191*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
192*a1a3b679SAndreas Boehler
193*a1a3b679SAndreas Boehler    }
194*a1a3b679SAndreas Boehler
195*a1a3b679SAndreas Boehler    /**
196*a1a3b679SAndreas Boehler     * @depends testMappedElement
197*a1a3b679SAndreas Boehler     */
198*a1a3b679SAndreas Boehler    function testMappedElementCallBack() {
199*a1a3b679SAndreas Boehler
200*a1a3b679SAndreas Boehler        $input = <<<BLA
201*a1a3b679SAndreas Boehler<?xml version="1.0"?>
202*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
203*a1a3b679SAndreas Boehler  <elem1 />
204*a1a3b679SAndreas Boehler</root>
205*a1a3b679SAndreas BoehlerBLA;
206*a1a3b679SAndreas Boehler
207*a1a3b679SAndreas Boehler        $reader = new Reader();
208*a1a3b679SAndreas Boehler        $reader->elementMap = [
209*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => function(Reader $reader) {
210*a1a3b679SAndreas Boehler                $reader->next();
211*a1a3b679SAndreas Boehler                return 'foobar';
212*a1a3b679SAndreas Boehler            }
213*a1a3b679SAndreas Boehler        ];
214*a1a3b679SAndreas Boehler        $reader->xml($input);
215*a1a3b679SAndreas Boehler
216*a1a3b679SAndreas Boehler        $output = $reader->parse();
217*a1a3b679SAndreas Boehler
218*a1a3b679SAndreas Boehler        $expected = [
219*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
220*a1a3b679SAndreas Boehler            'value' => [
221*a1a3b679SAndreas Boehler                [
222*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
223*a1a3b679SAndreas Boehler                    'value'      => 'foobar',
224*a1a3b679SAndreas Boehler                    'attributes' => [],
225*a1a3b679SAndreas Boehler                ],
226*a1a3b679SAndreas Boehler            ],
227*a1a3b679SAndreas Boehler            'attributes' => [],
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler        ];
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
232*a1a3b679SAndreas Boehler
233*a1a3b679SAndreas Boehler    }
234*a1a3b679SAndreas Boehler
235*a1a3b679SAndreas Boehler    /**
236*a1a3b679SAndreas Boehler     * @depends testMappedElementCallBack
237*a1a3b679SAndreas Boehler     */
238*a1a3b679SAndreas Boehler    function testReadText() {
239*a1a3b679SAndreas Boehler
240*a1a3b679SAndreas Boehler        $input = <<<BLA
241*a1a3b679SAndreas Boehler<?xml version="1.0"?>
242*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
243*a1a3b679SAndreas Boehler  <elem1>
244*a1a3b679SAndreas Boehler    <elem2>hello </elem2>
245*a1a3b679SAndreas Boehler    <elem2>world</elem2>
246*a1a3b679SAndreas Boehler  </elem1>
247*a1a3b679SAndreas Boehler</root>
248*a1a3b679SAndreas BoehlerBLA;
249*a1a3b679SAndreas Boehler
250*a1a3b679SAndreas Boehler        $reader = new Reader();
251*a1a3b679SAndreas Boehler        $reader->elementMap = [
252*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => function(Reader $reader) {
253*a1a3b679SAndreas Boehler                return $reader->readText();
254*a1a3b679SAndreas Boehler            }
255*a1a3b679SAndreas Boehler        ];
256*a1a3b679SAndreas Boehler        $reader->xml($input);
257*a1a3b679SAndreas Boehler
258*a1a3b679SAndreas Boehler        $output = $reader->parse();
259*a1a3b679SAndreas Boehler
260*a1a3b679SAndreas Boehler        $expected = [
261*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
262*a1a3b679SAndreas Boehler            'value' => [
263*a1a3b679SAndreas Boehler                [
264*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
265*a1a3b679SAndreas Boehler                    'value'      => 'hello world',
266*a1a3b679SAndreas Boehler                    'attributes' => [],
267*a1a3b679SAndreas Boehler                ],
268*a1a3b679SAndreas Boehler            ],
269*a1a3b679SAndreas Boehler            'attributes' => [],
270*a1a3b679SAndreas Boehler
271*a1a3b679SAndreas Boehler        ];
272*a1a3b679SAndreas Boehler
273*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
274*a1a3b679SAndreas Boehler
275*a1a3b679SAndreas Boehler    }
276*a1a3b679SAndreas Boehler
277*a1a3b679SAndreas Boehler    function testParseProblem() {
278*a1a3b679SAndreas Boehler
279*a1a3b679SAndreas Boehler        $input = <<<BLA
280*a1a3b679SAndreas Boehler<?xml version="1.0"?>
281*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
282*a1a3b679SAndreas BoehlerBLA;
283*a1a3b679SAndreas Boehler
284*a1a3b679SAndreas Boehler        $reader = new Reader();
285*a1a3b679SAndreas Boehler        $reader->elementMap = [
286*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Mock'
287*a1a3b679SAndreas Boehler        ];
288*a1a3b679SAndreas Boehler        $reader->xml($input);
289*a1a3b679SAndreas Boehler
290*a1a3b679SAndreas Boehler        try {
291*a1a3b679SAndreas Boehler            $output = $reader->parse();
292*a1a3b679SAndreas Boehler            $this->fail('We expected a ParseException to be thrown');
293*a1a3b679SAndreas Boehler        } catch (LibXMLException $e) {
294*a1a3b679SAndreas Boehler
295*a1a3b679SAndreas Boehler            $this->assertInternalType('array', $e->getErrors());
296*a1a3b679SAndreas Boehler
297*a1a3b679SAndreas Boehler        }
298*a1a3b679SAndreas Boehler
299*a1a3b679SAndreas Boehler    }
300*a1a3b679SAndreas Boehler
301*a1a3b679SAndreas Boehler    /**
302*a1a3b679SAndreas Boehler     * @expectedException \Sabre\Xml\ParseException
303*a1a3b679SAndreas Boehler     */
304*a1a3b679SAndreas Boehler    function testBrokenParserClass() {
305*a1a3b679SAndreas Boehler
306*a1a3b679SAndreas Boehler        $input = <<<BLA
307*a1a3b679SAndreas Boehler<?xml version="1.0"?>
308*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
309*a1a3b679SAndreas Boehler<elem1 />
310*a1a3b679SAndreas Boehler</root>
311*a1a3b679SAndreas BoehlerBLA;
312*a1a3b679SAndreas Boehler
313*a1a3b679SAndreas Boehler        $reader = new Reader();
314*a1a3b679SAndreas Boehler        $reader->elementMap = [
315*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Eater'
316*a1a3b679SAndreas Boehler        ];
317*a1a3b679SAndreas Boehler        $reader->xml($input);
318*a1a3b679SAndreas Boehler        $reader->parse();
319*a1a3b679SAndreas Boehler
320*a1a3b679SAndreas Boehler
321*a1a3b679SAndreas Boehler    }
322*a1a3b679SAndreas Boehler
323*a1a3b679SAndreas Boehler    /**
324*a1a3b679SAndreas Boehler     * Test was added for Issue #10.
325*a1a3b679SAndreas Boehler     *
326*a1a3b679SAndreas Boehler     * @expectedException Sabre\Xml\LibXMLException
327*a1a3b679SAndreas Boehler     */
328*a1a3b679SAndreas Boehler    function testBrokenXml() {
329*a1a3b679SAndreas Boehler
330*a1a3b679SAndreas Boehler        $input = <<<BLA
331*a1a3b679SAndreas Boehler<test>
332*a1a3b679SAndreas Boehler<hello>
333*a1a3b679SAndreas Boehler</hello>
334*a1a3b679SAndreas Boehler</sffsdf>
335*a1a3b679SAndreas BoehlerBLA;
336*a1a3b679SAndreas Boehler
337*a1a3b679SAndreas Boehler        $reader = new Reader();
338*a1a3b679SAndreas Boehler        $reader->xml($input);
339*a1a3b679SAndreas Boehler        $reader->parse();
340*a1a3b679SAndreas Boehler
341*a1a3b679SAndreas Boehler    }
342*a1a3b679SAndreas Boehler
343*a1a3b679SAndreas Boehler    /**
344*a1a3b679SAndreas Boehler     * Test was added for Issue #45.
345*a1a3b679SAndreas Boehler     *
346*a1a3b679SAndreas Boehler     * @expectedException Sabre\Xml\LibXMLException
347*a1a3b679SAndreas Boehler     */
348*a1a3b679SAndreas Boehler    function testBrokenXml2() {
349*a1a3b679SAndreas Boehler
350*a1a3b679SAndreas Boehler        $input = <<<XML
351*a1a3b679SAndreas Boehler<?xml version="1.0" encoding="UTF-8"?>
352*a1a3b679SAndreas Boehler<definitions>
353*a1a3b679SAndreas Boehler    <collaboration>
354*a1a3b679SAndreas Boehler        <participant id="sid-A33D08EB-A2DE-448F-86FE-A2B62E98818" name="Company" processRef="sid-A0A6A196-3C9A-4C69-88F6-7ED7DDFDD264">
355*a1a3b679SAndreas Boehler            <extensionElements>
356*a1a3b679SAndreas Boehler                <signavio:signavioMetaData metaKey="bgcolor" />
357*a1a3b679SAndreas Boehler                ""Administrative w">
358*a1a3b679SAndreas Boehler                <extensionElements>
359*a1a3b679SAndreas Boehler                    <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
360*a1a3b679SAndreas Boehler                </extensionElements>
361*a1a3b679SAndreas Boehler                </lan
362*a1a3b679SAndreas BoehlerXML;
363*a1a3b679SAndreas Boehler        $reader = new Reader();
364*a1a3b679SAndreas Boehler        $reader->xml($input);
365*a1a3b679SAndreas Boehler        $reader->parse();
366*a1a3b679SAndreas Boehler
367*a1a3b679SAndreas Boehler    }
368*a1a3b679SAndreas Boehler
369*a1a3b679SAndreas Boehler
370*a1a3b679SAndreas Boehler    /**
371*a1a3b679SAndreas Boehler     * @depends testMappedElement
372*a1a3b679SAndreas Boehler     */
373*a1a3b679SAndreas Boehler    function testParseInnerTree() {
374*a1a3b679SAndreas Boehler
375*a1a3b679SAndreas Boehler        $input = <<<BLA
376*a1a3b679SAndreas Boehler<?xml version="1.0"?>
377*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
378*a1a3b679SAndreas Boehler  <elem1>
379*a1a3b679SAndreas Boehler     <elem1 />
380*a1a3b679SAndreas Boehler  </elem1>
381*a1a3b679SAndreas Boehler</root>
382*a1a3b679SAndreas BoehlerBLA;
383*a1a3b679SAndreas Boehler
384*a1a3b679SAndreas Boehler        $reader = new Reader();
385*a1a3b679SAndreas Boehler        $reader->elementMap = [
386*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => function(Reader $reader) {
387*a1a3b679SAndreas Boehler
388*a1a3b679SAndreas Boehler                $innerTree = $reader->parseInnerTree(['{http://sabredav.org/ns}elem1' => function(Reader $reader) {
389*a1a3b679SAndreas Boehler                    $reader->next();
390*a1a3b679SAndreas Boehler                    return "foobar";
391*a1a3b679SAndreas Boehler                }]);
392*a1a3b679SAndreas Boehler
393*a1a3b679SAndreas Boehler                return $innerTree;
394*a1a3b679SAndreas Boehler            }
395*a1a3b679SAndreas Boehler        ];
396*a1a3b679SAndreas Boehler        $reader->xml($input);
397*a1a3b679SAndreas Boehler
398*a1a3b679SAndreas Boehler        $output = $reader->parse();
399*a1a3b679SAndreas Boehler
400*a1a3b679SAndreas Boehler        $expected = [
401*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
402*a1a3b679SAndreas Boehler            'value' => [
403*a1a3b679SAndreas Boehler                [
404*a1a3b679SAndreas Boehler                    'name'  => '{http://sabredav.org/ns}elem1',
405*a1a3b679SAndreas Boehler                    'value' => [
406*a1a3b679SAndreas Boehler                        [
407*a1a3b679SAndreas Boehler                            'name'       => '{http://sabredav.org/ns}elem1',
408*a1a3b679SAndreas Boehler                            'value'      => 'foobar',
409*a1a3b679SAndreas Boehler                            'attributes' => [],
410*a1a3b679SAndreas Boehler                        ]
411*a1a3b679SAndreas Boehler                    ],
412*a1a3b679SAndreas Boehler                    'attributes' => [],
413*a1a3b679SAndreas Boehler                ],
414*a1a3b679SAndreas Boehler            ],
415*a1a3b679SAndreas Boehler            'attributes' => [],
416*a1a3b679SAndreas Boehler
417*a1a3b679SAndreas Boehler        ];
418*a1a3b679SAndreas Boehler
419*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
420*a1a3b679SAndreas Boehler
421*a1a3b679SAndreas Boehler    }
422*a1a3b679SAndreas Boehler
423*a1a3b679SAndreas Boehler    /**
424*a1a3b679SAndreas Boehler     * @depends testParseInnerTree
425*a1a3b679SAndreas Boehler     */
426*a1a3b679SAndreas Boehler    function testParseGetElements() {
427*a1a3b679SAndreas Boehler
428*a1a3b679SAndreas Boehler        $input = <<<BLA
429*a1a3b679SAndreas Boehler<?xml version="1.0"?>
430*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
431*a1a3b679SAndreas Boehler  <elem1>
432*a1a3b679SAndreas Boehler     <elem1 />
433*a1a3b679SAndreas Boehler  </elem1>
434*a1a3b679SAndreas Boehler</root>
435*a1a3b679SAndreas BoehlerBLA;
436*a1a3b679SAndreas Boehler
437*a1a3b679SAndreas Boehler        $reader = new Reader();
438*a1a3b679SAndreas Boehler        $reader->elementMap = [
439*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => function(Reader $reader) {
440*a1a3b679SAndreas Boehler
441*a1a3b679SAndreas Boehler                $innerTree = $reader->parseGetElements(['{http://sabredav.org/ns}elem1' => function(Reader $reader) {
442*a1a3b679SAndreas Boehler                    $reader->next();
443*a1a3b679SAndreas Boehler                    return "foobar";
444*a1a3b679SAndreas Boehler                }]);
445*a1a3b679SAndreas Boehler
446*a1a3b679SAndreas Boehler                return $innerTree;
447*a1a3b679SAndreas Boehler            }
448*a1a3b679SAndreas Boehler        ];
449*a1a3b679SAndreas Boehler        $reader->xml($input);
450*a1a3b679SAndreas Boehler
451*a1a3b679SAndreas Boehler        $output = $reader->parse();
452*a1a3b679SAndreas Boehler
453*a1a3b679SAndreas Boehler        $expected = [
454*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
455*a1a3b679SAndreas Boehler            'value' => [
456*a1a3b679SAndreas Boehler                [
457*a1a3b679SAndreas Boehler                    'name'  => '{http://sabredav.org/ns}elem1',
458*a1a3b679SAndreas Boehler                    'value' => [
459*a1a3b679SAndreas Boehler                        [
460*a1a3b679SAndreas Boehler                            'name'       => '{http://sabredav.org/ns}elem1',
461*a1a3b679SAndreas Boehler                            'value'      => 'foobar',
462*a1a3b679SAndreas Boehler                            'attributes' => [],
463*a1a3b679SAndreas Boehler                        ]
464*a1a3b679SAndreas Boehler                    ],
465*a1a3b679SAndreas Boehler                    'attributes' => [],
466*a1a3b679SAndreas Boehler                ],
467*a1a3b679SAndreas Boehler            ],
468*a1a3b679SAndreas Boehler            'attributes' => [],
469*a1a3b679SAndreas Boehler
470*a1a3b679SAndreas Boehler        ];
471*a1a3b679SAndreas Boehler
472*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
473*a1a3b679SAndreas Boehler
474*a1a3b679SAndreas Boehler    }
475*a1a3b679SAndreas Boehler
476*a1a3b679SAndreas Boehler    /**
477*a1a3b679SAndreas Boehler     * @depends testParseInnerTree
478*a1a3b679SAndreas Boehler     */
479*a1a3b679SAndreas Boehler    function testParseGetElementsNoElements() {
480*a1a3b679SAndreas Boehler
481*a1a3b679SAndreas Boehler        $input = <<<BLA
482*a1a3b679SAndreas Boehler<?xml version="1.0"?>
483*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
484*a1a3b679SAndreas Boehler  <elem1>
485*a1a3b679SAndreas Boehler    hi
486*a1a3b679SAndreas Boehler  </elem1>
487*a1a3b679SAndreas Boehler</root>
488*a1a3b679SAndreas BoehlerBLA;
489*a1a3b679SAndreas Boehler
490*a1a3b679SAndreas Boehler        $reader = new Reader();
491*a1a3b679SAndreas Boehler        $reader->elementMap = [
492*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}elem1' => function(Reader $reader) {
493*a1a3b679SAndreas Boehler
494*a1a3b679SAndreas Boehler                $innerTree = $reader->parseGetElements(['{http://sabredav.org/ns}elem1' => function(Reader $reader) {
495*a1a3b679SAndreas Boehler                    $reader->next();
496*a1a3b679SAndreas Boehler                    return "foobar";
497*a1a3b679SAndreas Boehler                }]);
498*a1a3b679SAndreas Boehler
499*a1a3b679SAndreas Boehler                return $innerTree;
500*a1a3b679SAndreas Boehler            }
501*a1a3b679SAndreas Boehler        ];
502*a1a3b679SAndreas Boehler        $reader->xml($input);
503*a1a3b679SAndreas Boehler
504*a1a3b679SAndreas Boehler        $output = $reader->parse();
505*a1a3b679SAndreas Boehler
506*a1a3b679SAndreas Boehler        $expected = [
507*a1a3b679SAndreas Boehler            'name'  => '{http://sabredav.org/ns}root',
508*a1a3b679SAndreas Boehler            'value' => [
509*a1a3b679SAndreas Boehler                [
510*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
511*a1a3b679SAndreas Boehler                    'value'      => [],
512*a1a3b679SAndreas Boehler                    'attributes' => [],
513*a1a3b679SAndreas Boehler                ],
514*a1a3b679SAndreas Boehler            ],
515*a1a3b679SAndreas Boehler            'attributes' => [],
516*a1a3b679SAndreas Boehler
517*a1a3b679SAndreas Boehler        ];
518*a1a3b679SAndreas Boehler
519*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $output);
520*a1a3b679SAndreas Boehler
521*a1a3b679SAndreas Boehler    }
522*a1a3b679SAndreas Boehler
523*a1a3b679SAndreas Boehler
524*a1a3b679SAndreas Boehler}
525