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