xref: /plugin/davcal/vendor/sabre/xml/tests/Sabre/Xml/WriterTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\Xml;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehlerclass WriterTest extends \PHPUnit_Framework_TestCase {
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehler    protected $writer;
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    function setUp() {
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler        $this->writer = new Writer();
12*a1a3b679SAndreas Boehler        $this->writer->namespaceMap = [
13*a1a3b679SAndreas Boehler            'http://sabredav.org/ns' => 's',
14*a1a3b679SAndreas Boehler        ];
15*a1a3b679SAndreas Boehler        $this->writer->openMemory();
16*a1a3b679SAndreas Boehler        $this->writer->setIndent(true);
17*a1a3b679SAndreas Boehler        $this->writer->startDocument();
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas Boehler    }
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler    function compare($input, $output) {
22*a1a3b679SAndreas Boehler
23*a1a3b679SAndreas Boehler        $this->writer->write($input);
24*a1a3b679SAndreas Boehler        $this->assertEquals($output, $this->writer->outputMemory());
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehler    }
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler
29*a1a3b679SAndreas Boehler    function testSimple() {
30*a1a3b679SAndreas Boehler
31*a1a3b679SAndreas Boehler        $this->compare([
32*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => 'text',
33*a1a3b679SAndreas Boehler        ], <<<HI
34*a1a3b679SAndreas Boehler<?xml version="1.0"?>
35*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">text</s:root>
36*a1a3b679SAndreas Boehler
37*a1a3b679SAndreas BoehlerHI
38*a1a3b679SAndreas Boehler        );
39*a1a3b679SAndreas Boehler
40*a1a3b679SAndreas Boehler    }
41*a1a3b679SAndreas Boehler
42*a1a3b679SAndreas Boehler    /**
43*a1a3b679SAndreas Boehler     * @depends testSimple
44*a1a3b679SAndreas Boehler     */
45*a1a3b679SAndreas Boehler    function testSimpleQuotes() {
46*a1a3b679SAndreas Boehler
47*a1a3b679SAndreas Boehler        $this->compare([
48*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => '"text"',
49*a1a3b679SAndreas Boehler        ], <<<HI
50*a1a3b679SAndreas Boehler<?xml version="1.0"?>
51*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">&quot;text&quot;</s:root>
52*a1a3b679SAndreas Boehler
53*a1a3b679SAndreas BoehlerHI
54*a1a3b679SAndreas Boehler        );
55*a1a3b679SAndreas Boehler
56*a1a3b679SAndreas Boehler    }
57*a1a3b679SAndreas Boehler
58*a1a3b679SAndreas Boehler    function testSimpleAttributes() {
59*a1a3b679SAndreas Boehler
60*a1a3b679SAndreas Boehler        $this->compare([
61*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
62*a1a3b679SAndreas Boehler                'value'      => 'text',
63*a1a3b679SAndreas Boehler                'attributes' => [
64*a1a3b679SAndreas Boehler                    'attr1' => 'attribute value',
65*a1a3b679SAndreas Boehler                ],
66*a1a3b679SAndreas Boehler            ],
67*a1a3b679SAndreas Boehler        ], <<<HI
68*a1a3b679SAndreas Boehler<?xml version="1.0"?>
69*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns" attr1="attribute value">text</s:root>
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas BoehlerHI
72*a1a3b679SAndreas Boehler        );
73*a1a3b679SAndreas Boehler
74*a1a3b679SAndreas Boehler    }
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler    function testMixedSyntax() {
77*a1a3b679SAndreas Boehler        $this->compare([
78*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
79*a1a3b679SAndreas Boehler                'single'   => 'value',
80*a1a3b679SAndreas Boehler                'multiple' => [
81*a1a3b679SAndreas Boehler                    [
82*a1a3b679SAndreas Boehler                        'name'  => 'foo',
83*a1a3b679SAndreas Boehler                        'value' => 'bar',
84*a1a3b679SAndreas Boehler                    ],
85*a1a3b679SAndreas Boehler                    [
86*a1a3b679SAndreas Boehler                        'name'  => 'foo',
87*a1a3b679SAndreas Boehler                        'value' => 'foobar',
88*a1a3b679SAndreas Boehler                    ],
89*a1a3b679SAndreas Boehler                ],
90*a1a3b679SAndreas Boehler                'attributes' => [
91*a1a3b679SAndreas Boehler                    'value'      => null,
92*a1a3b679SAndreas Boehler                    'attributes' => [
93*a1a3b679SAndreas Boehler                        'foo' => 'bar',
94*a1a3b679SAndreas Boehler                    ],
95*a1a3b679SAndreas Boehler                ],
96*a1a3b679SAndreas Boehler                [
97*a1a3b679SAndreas Boehler                    'name'       => 'verbose',
98*a1a3b679SAndreas Boehler                    'value'      => 'syntax',
99*a1a3b679SAndreas Boehler                    'attributes' => [
100*a1a3b679SAndreas Boehler                        'foo' => 'bar',
101*a1a3b679SAndreas Boehler                    ],
102*a1a3b679SAndreas Boehler                ],
103*a1a3b679SAndreas Boehler            ],
104*a1a3b679SAndreas Boehler        ], <<<HI
105*a1a3b679SAndreas Boehler<?xml version="1.0"?>
106*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
107*a1a3b679SAndreas Boehler <single>value</single>
108*a1a3b679SAndreas Boehler <multiple>
109*a1a3b679SAndreas Boehler  <foo>bar</foo>
110*a1a3b679SAndreas Boehler  <foo>foobar</foo>
111*a1a3b679SAndreas Boehler </multiple>
112*a1a3b679SAndreas Boehler <attributes foo="bar"/>
113*a1a3b679SAndreas Boehler <verbose foo="bar">syntax</verbose>
114*a1a3b679SAndreas Boehler</s:root>
115*a1a3b679SAndreas Boehler
116*a1a3b679SAndreas BoehlerHI
117*a1a3b679SAndreas Boehler        );
118*a1a3b679SAndreas Boehler    }
119*a1a3b679SAndreas Boehler
120*a1a3b679SAndreas Boehler    function testNull() {
121*a1a3b679SAndreas Boehler
122*a1a3b679SAndreas Boehler        $this->compare([
123*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => null,
124*a1a3b679SAndreas Boehler        ], <<<HI
125*a1a3b679SAndreas Boehler<?xml version="1.0"?>
126*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns"/>
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas BoehlerHI
129*a1a3b679SAndreas Boehler        );
130*a1a3b679SAndreas Boehler
131*a1a3b679SAndreas Boehler    }
132*a1a3b679SAndreas Boehler
133*a1a3b679SAndreas Boehler    function testArrayFormat2() {
134*a1a3b679SAndreas Boehler
135*a1a3b679SAndreas Boehler        $this->compare([
136*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
137*a1a3b679SAndreas Boehler                [
138*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
139*a1a3b679SAndreas Boehler                    'value'      => 'text',
140*a1a3b679SAndreas Boehler                    'attributes' => [
141*a1a3b679SAndreas Boehler                        'attr1' => 'attribute value',
142*a1a3b679SAndreas Boehler                    ],
143*a1a3b679SAndreas Boehler                ],
144*a1a3b679SAndreas Boehler            ],
145*a1a3b679SAndreas Boehler        ], <<<HI
146*a1a3b679SAndreas Boehler<?xml version="1.0"?>
147*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
148*a1a3b679SAndreas Boehler <s:elem1 attr1="attribute value">text</s:elem1>
149*a1a3b679SAndreas Boehler</s:root>
150*a1a3b679SAndreas Boehler
151*a1a3b679SAndreas BoehlerHI
152*a1a3b679SAndreas Boehler        );
153*a1a3b679SAndreas Boehler
154*a1a3b679SAndreas Boehler    }
155*a1a3b679SAndreas Boehler
156*a1a3b679SAndreas Boehler    function testCustomNamespace() {
157*a1a3b679SAndreas Boehler
158*a1a3b679SAndreas Boehler        $this->compare([
159*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
160*a1a3b679SAndreas Boehler                '{urn:foo}elem1' => 'bar',
161*a1a3b679SAndreas Boehler            ],
162*a1a3b679SAndreas Boehler        ], <<<HI
163*a1a3b679SAndreas Boehler<?xml version="1.0"?>
164*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
165*a1a3b679SAndreas Boehler <x1:elem1 xmlns:x1="urn:foo">bar</x1:elem1>
166*a1a3b679SAndreas Boehler</s:root>
167*a1a3b679SAndreas Boehler
168*a1a3b679SAndreas BoehlerHI
169*a1a3b679SAndreas Boehler        );
170*a1a3b679SAndreas Boehler
171*a1a3b679SAndreas Boehler    }
172*a1a3b679SAndreas Boehler
173*a1a3b679SAndreas Boehler    function testEmptyNamespace() {
174*a1a3b679SAndreas Boehler
175*a1a3b679SAndreas Boehler        // Empty namespaces are allowed, so we should support this.
176*a1a3b679SAndreas Boehler        $this->compare([
177*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
178*a1a3b679SAndreas Boehler                '{}elem1' => 'bar',
179*a1a3b679SAndreas Boehler            ],
180*a1a3b679SAndreas Boehler        ], <<<HI
181*a1a3b679SAndreas Boehler<?xml version="1.0"?>
182*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
183*a1a3b679SAndreas Boehler <elem1 xmlns="">bar</elem1>
184*a1a3b679SAndreas Boehler</s:root>
185*a1a3b679SAndreas Boehler
186*a1a3b679SAndreas BoehlerHI
187*a1a3b679SAndreas Boehler        );
188*a1a3b679SAndreas Boehler
189*a1a3b679SAndreas Boehler    }
190*a1a3b679SAndreas Boehler
191*a1a3b679SAndreas Boehler    function testAttributes() {
192*a1a3b679SAndreas Boehler
193*a1a3b679SAndreas Boehler        $this->compare([
194*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
195*a1a3b679SAndreas Boehler                [
196*a1a3b679SAndreas Boehler                    'name'       => '{http://sabredav.org/ns}elem1',
197*a1a3b679SAndreas Boehler                    'value'      => 'text',
198*a1a3b679SAndreas Boehler                    'attributes' => [
199*a1a3b679SAndreas Boehler                        'attr1'                         => 'val1',
200*a1a3b679SAndreas Boehler                        '{http://sabredav.org/ns}attr2' => 'val2',
201*a1a3b679SAndreas Boehler                        '{urn:foo}attr3'                => 'val3',
202*a1a3b679SAndreas Boehler                    ],
203*a1a3b679SAndreas Boehler                ],
204*a1a3b679SAndreas Boehler            ],
205*a1a3b679SAndreas Boehler        ], <<<HI
206*a1a3b679SAndreas Boehler<?xml version="1.0"?>
207*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
208*a1a3b679SAndreas Boehler <s:elem1 attr1="val1" s:attr2="val2" x1:attr3="val3" xmlns:x1="urn:foo">text</s:elem1>
209*a1a3b679SAndreas Boehler</s:root>
210*a1a3b679SAndreas Boehler
211*a1a3b679SAndreas BoehlerHI
212*a1a3b679SAndreas Boehler        );
213*a1a3b679SAndreas Boehler
214*a1a3b679SAndreas Boehler    }
215*a1a3b679SAndreas Boehler
216*a1a3b679SAndreas Boehler    /**
217*a1a3b679SAndreas Boehler     * @expectedException \InvalidArgumentException
218*a1a3b679SAndreas Boehler     */
219*a1a3b679SAndreas Boehler    function testInvalidFormat() {
220*a1a3b679SAndreas Boehler
221*a1a3b679SAndreas Boehler        $this->compare([
222*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => [
223*a1a3b679SAndreas Boehler                ['incorrect' => '0', 'keynames' => 1]
224*a1a3b679SAndreas Boehler            ],
225*a1a3b679SAndreas Boehler        ], "");
226*a1a3b679SAndreas Boehler
227*a1a3b679SAndreas Boehler    }
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler    function testBaseElement() {
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler        $this->compare([
232*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => new Element\Base('hello')
233*a1a3b679SAndreas Boehler        ], <<<HI
234*a1a3b679SAndreas Boehler<?xml version="1.0"?>
235*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">hello</s:root>
236*a1a3b679SAndreas Boehler
237*a1a3b679SAndreas BoehlerHI
238*a1a3b679SAndreas Boehler        );
239*a1a3b679SAndreas Boehler
240*a1a3b679SAndreas Boehler    }
241*a1a3b679SAndreas Boehler
242*a1a3b679SAndreas Boehler    function testElementObj() {
243*a1a3b679SAndreas Boehler
244*a1a3b679SAndreas Boehler        $this->compare([
245*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => new Element\Mock()
246*a1a3b679SAndreas Boehler        ], <<<HI
247*a1a3b679SAndreas Boehler<?xml version="1.0"?>
248*a1a3b679SAndreas Boehler<s:root xmlns:s="http://sabredav.org/ns">
249*a1a3b679SAndreas Boehler <s:elem1>hiiii!</s:elem1>
250*a1a3b679SAndreas Boehler</s:root>
251*a1a3b679SAndreas Boehler
252*a1a3b679SAndreas BoehlerHI
253*a1a3b679SAndreas Boehler        );
254*a1a3b679SAndreas Boehler
255*a1a3b679SAndreas Boehler    }
256*a1a3b679SAndreas Boehler
257*a1a3b679SAndreas Boehler    function testEmptyNamespacePrefix() {
258*a1a3b679SAndreas Boehler
259*a1a3b679SAndreas Boehler        $this->writer->namespaceMap['http://sabredav.org/ns'] = null;
260*a1a3b679SAndreas Boehler        $this->compare([
261*a1a3b679SAndreas Boehler            '{http://sabredav.org/ns}root' => new Element\Mock()
262*a1a3b679SAndreas Boehler        ], <<<HI
263*a1a3b679SAndreas Boehler<?xml version="1.0"?>
264*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns">
265*a1a3b679SAndreas Boehler <elem1>hiiii!</elem1>
266*a1a3b679SAndreas Boehler</root>
267*a1a3b679SAndreas Boehler
268*a1a3b679SAndreas BoehlerHI
269*a1a3b679SAndreas Boehler        );
270*a1a3b679SAndreas Boehler
271*a1a3b679SAndreas Boehler    }
272*a1a3b679SAndreas Boehler
273*a1a3b679SAndreas Boehler    function testWriteElement() {
274*a1a3b679SAndreas Boehler
275*a1a3b679SAndreas Boehler        $this->writer->writeElement("{http://sabredav.org/ns}foo", 'content');
276*a1a3b679SAndreas Boehler
277*a1a3b679SAndreas Boehler        $output = <<<HI
278*a1a3b679SAndreas Boehler<?xml version="1.0"?>
279*a1a3b679SAndreas Boehler<s:foo xmlns:s="http://sabredav.org/ns">content</s:foo>
280*a1a3b679SAndreas Boehler
281*a1a3b679SAndreas BoehlerHI;
282*a1a3b679SAndreas Boehler
283*a1a3b679SAndreas Boehler        $this->assertEquals($output, $this->writer->outputMemory());
284*a1a3b679SAndreas Boehler
285*a1a3b679SAndreas Boehler
286*a1a3b679SAndreas Boehler    }
287*a1a3b679SAndreas Boehler
288*a1a3b679SAndreas Boehler    function testWriteElementComplex() {
289*a1a3b679SAndreas Boehler
290*a1a3b679SAndreas Boehler        $this->writer->writeElement("{http://sabredav.org/ns}foo", new Element\KeyValue(['{http://sabredav.org/ns}bar' => 'test']));
291*a1a3b679SAndreas Boehler
292*a1a3b679SAndreas Boehler        $output = <<<HI
293*a1a3b679SAndreas Boehler<?xml version="1.0"?>
294*a1a3b679SAndreas Boehler<s:foo xmlns:s="http://sabredav.org/ns">
295*a1a3b679SAndreas Boehler <s:bar>test</s:bar>
296*a1a3b679SAndreas Boehler</s:foo>
297*a1a3b679SAndreas Boehler
298*a1a3b679SAndreas BoehlerHI;
299*a1a3b679SAndreas Boehler
300*a1a3b679SAndreas Boehler        $this->assertEquals($output, $this->writer->outputMemory());
301*a1a3b679SAndreas Boehler
302*a1a3b679SAndreas Boehler    }
303*a1a3b679SAndreas Boehler
304*a1a3b679SAndreas Boehler    /**
305*a1a3b679SAndreas Boehler     * @expectedException \InvalidArgumentException
306*a1a3b679SAndreas Boehler     */
307*a1a3b679SAndreas Boehler    function testWriteBadObject() {
308*a1a3b679SAndreas Boehler
309*a1a3b679SAndreas Boehler        $this->writer->write(new \StdClass());
310*a1a3b679SAndreas Boehler
311*a1a3b679SAndreas Boehler    }
312*a1a3b679SAndreas Boehler
313*a1a3b679SAndreas Boehler    function testStartElementSimple() {
314*a1a3b679SAndreas Boehler
315*a1a3b679SAndreas Boehler        $this->writer->startElement("foo");
316*a1a3b679SAndreas Boehler        $this->writer->endElement();
317*a1a3b679SAndreas Boehler
318*a1a3b679SAndreas Boehler        $output = <<<HI
319*a1a3b679SAndreas Boehler<?xml version="1.0"?>
320*a1a3b679SAndreas Boehler<foo xmlns:s="http://sabredav.org/ns"/>
321*a1a3b679SAndreas Boehler
322*a1a3b679SAndreas BoehlerHI;
323*a1a3b679SAndreas Boehler
324*a1a3b679SAndreas Boehler        $this->assertEquals($output, $this->writer->outputMemory());
325*a1a3b679SAndreas Boehler
326*a1a3b679SAndreas Boehler
327*a1a3b679SAndreas Boehler    }
328*a1a3b679SAndreas Boehler}
329