ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
PropertyTest.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Sabre\VObject;
4 
8 
9 class PropertyTest extends TestCase {
10 
11  function testToString() {
12 
13  $cal = new VCalendar();
14 
15  $property = $cal->createProperty('propname', 'propvalue');
16  $this->assertEquals('PROPNAME', $property->name);
17  $this->assertEquals('propvalue', $property->__toString());
18  $this->assertEquals('propvalue', (string)$property);
19  $this->assertEquals('propvalue', $property->getValue());
20 
21  }
22 
23  function testCreate() {
24 
25  $cal = new VCalendar();
26 
27  $params = [
28  'param1' => 'value1',
29  'param2' => 'value2',
30  ];
31 
32  $property = $cal->createProperty('propname', 'propvalue', $params);
33 
34  $this->assertEquals('value1', $property['param1']->getValue());
35  $this->assertEquals('value2', $property['param2']->getValue());
36 
37  }
38 
39  function testSetValue() {
40 
41  $cal = new VCalendar();
42 
43  $property = $cal->createProperty('propname', 'propvalue');
44  $property->setValue('value2');
45 
46  $this->assertEquals('PROPNAME', $property->name);
47  $this->assertEquals('value2', $property->__toString());
48 
49  }
50 
51  function testParameterExists() {
52 
53  $cal = new VCalendar();
54  $property = $cal->createProperty('propname', 'propvalue');
55  $property['paramname'] = 'paramvalue';
56 
57  $this->assertTrue(isset($property['PARAMNAME']));
58  $this->assertTrue(isset($property['paramname']));
59  $this->assertFalse(isset($property['foo']));
60 
61  }
62 
63  function testParameterGet() {
64 
65  $cal = new VCalendar();
66  $property = $cal->createProperty('propname', 'propvalue');
67  $property['paramname'] = 'paramvalue';
68 
69  $this->assertInstanceOf('Sabre\\VObject\\Parameter', $property['paramname']);
70 
71  }
72 
74 
75  $cal = new VCalendar();
76  $property = $cal->createProperty('propname', 'propvalue');
77  $property['paramname'] = 'paramvalue';
78 
79  $this->assertInternalType('null', $property['foo']);
80 
81  }
82 
83  function testParameterMultiple() {
84 
85  $cal = new VCalendar();
86  $property = $cal->createProperty('propname', 'propvalue');
87  $property['paramname'] = 'paramvalue';
88  $property->add('paramname', 'paramvalue');
89 
90  $this->assertInstanceOf('Sabre\\VObject\\Parameter', $property['paramname']);
91  $this->assertEquals(2, count($property['paramname']->getParts()));
92 
93  }
94 
96 
97  $cal = new VCalendar();
98  $property = $cal->createProperty('propname', 'propvalue');
99  $property['paramname'] = 'paramvalue';
100 
101  $this->assertEquals(1, count($property->parameters()));
102  $this->assertInstanceOf('Sabre\\VObject\\Parameter', $property->parameters['PARAMNAME']);
103  $this->assertEquals('PARAMNAME', $property->parameters['PARAMNAME']->name);
104  $this->assertEquals('paramvalue', $property->parameters['PARAMNAME']->getValue());
105 
106  }
107 
108  function testUnsetParameter() {
109 
110  $cal = new VCalendar();
111  $property = $cal->createProperty('propname', 'propvalue');
112  $property['paramname'] = 'paramvalue';
113 
114  unset($property['PARAMNAME']);
115  $this->assertEquals(0, count($property->parameters()));
116 
117  }
118 
119  function testSerialize() {
120 
121  $cal = new VCalendar();
122  $property = $cal->createProperty('propname', 'propvalue');
123 
124  $this->assertEquals("PROPNAME:propvalue\r\n", $property->serialize());
125 
126  }
127 
128  function testSerializeParam() {
129 
130  $cal = new VCalendar();
131  $property = $cal->createProperty('propname', 'propvalue', [
132  'paramname' => 'paramvalue',
133  'paramname2' => 'paramvalue2',
134  ]);
135 
136  $this->assertEquals("PROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propvalue\r\n", $property->serialize());
137 
138  }
139 
140  function testSerializeNewLine() {
141 
142  $cal = new VCalendar();
143  $property = $cal->createProperty('SUMMARY', "line1\nline2");
144 
145  $this->assertEquals("SUMMARY:line1\\nline2\r\n", $property->serialize());
146 
147  }
148 
150 
151  $cal = new VCalendar();
152  $value = str_repeat('!', 200);
153  $property = $cal->createProperty('propname', $value);
154 
155  $expected = "PROPNAME:" . str_repeat('!', 66) . "\r\n " . str_repeat('!', 74) . "\r\n " . str_repeat('!', 60) . "\r\n";
156 
157  $this->assertEquals($expected, $property->serialize());
158 
159  }
160 
162 
163  $cal = new VCalendar();
164  $value = str_repeat('!', 65) . "\xc3\xa4bla" . str_repeat('!', 142) . "\xc3\xa4foo"; // inserted umlaut-a
165  $property = $cal->createProperty('propname', $value);
166 
167  // PROPNAME:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ("PROPNAME:" + 65x"!" = 74 bytes)
168  // äbla!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" äbla" + 69x"!" = 75 bytes)
169  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (" " + 73x"!" = 74 bytes)
170  // äfoo
171  $expected = "PROPNAME:" . str_repeat('!', 65) . "\r\n \xc3\xa4bla" . str_repeat('!', 69) . "\r\n " . str_repeat('!', 73) . "\r\n \xc3\xa4foo\r\n";
172  $this->assertEquals($expected, $property->serialize());
173 
174  }
175 
176  function testGetIterator() {
177 
178  $cal = new VCalendar();
179  $it = new ElementList([]);
180  $property = $cal->createProperty('propname', 'propvalue');
181  $property->setIterator($it);
182  $this->assertEquals($it, $property->getIterator());
183 
184  }
185 
186 
188 
189  $cal = new VCalendar();
190  $property = $cal->createProperty('propname', 'propvalue');
191  $it = $property->getIterator();
192  $this->assertTrue($it instanceof ElementList);
193  $this->assertEquals(1, count($it));
194 
195  }
196 
197  function testAddScalar() {
198 
199  $cal = new VCalendar();
200  $property = $cal->createProperty('EMAIL');
201 
202  $property->add('myparam', 'value');
203 
204  $this->assertEquals(1, count($property->parameters()));
205 
206  $this->assertTrue($property->parameters['MYPARAM'] instanceof Parameter);
207  $this->assertEquals('MYPARAM', $property->parameters['MYPARAM']->name);
208  $this->assertEquals('value', $property->parameters['MYPARAM']->getValue());
209 
210  }
211 
212  function testAddParameter() {
213 
214  $cal = new VCalendar();
215  $prop = $cal->createProperty('EMAIL');
216 
217  $prop->add('MYPARAM', 'value');
218 
219  $this->assertEquals(1, count($prop->parameters()));
220  $this->assertEquals('MYPARAM', $prop['myparam']->name);
221 
222  }
223 
225 
226  $cal = new VCalendar();
227  $prop = $cal->createProperty('EMAIL');
228 
229  $prop->add('MYPARAM', 'value1');
230  $prop->add('MYPARAM', 'value2');
231 
232  $this->assertEquals(1, count($prop->parameters));
233  $this->assertEquals(2, count($prop->parameters['MYPARAM']->getParts()));
234 
235  $this->assertEquals('MYPARAM', $prop['MYPARAM']->name);
236 
237  }
238 
239 
240  function testClone() {
241 
242  $cal = new VCalendar();
243  $property = $cal->createProperty('EMAIL', 'value');
244  $property['FOO'] = 'BAR';
245 
246  $property2 = clone $property;
247 
248  $property['FOO'] = 'BAZ';
249  $this->assertEquals('BAR', (string)$property2['FOO']);
250 
251  }
252 
253  function testCreateParams() {
254 
255  $cal = new VCalendar();
256  $property = $cal->createProperty('X-PROP', 'value', [
257  'param1' => 'value1',
258  'param2' => ['value2', 'value3']
259  ]);
260 
261  $this->assertEquals(1, count($property['PARAM1']->getParts()));
262  $this->assertEquals(2, count($property['PARAM2']->getParts()));
263 
264  }
265 
266  function testValidateNonUTF8() {
267 
268  $calendar = new VCalendar();
269  $property = $calendar->createProperty('X-PROP', "Bla\x00");
270  $result = $property->validate(Property::REPAIR);
271 
272  $this->assertEquals('Property contained a control character (0x00)', $result[0]['message']);
273  $this->assertEquals('Bla', $property->getValue());
274 
275  }
276 
278 
279  $s = "chars[";
280  foreach ([
281  0x7F, 0x5E, 0x5C, 0x3B, 0x3A, 0x2C, 0x22, 0x20,
282  0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18,
283  0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
284  0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08,
285  0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
286  ] as $c) {
287  $s .= sprintf('%02X(%c)', $c, $c);
288  }
289  $s .= "]end";
290 
291  $calendar = new VCalendar();
292  $property = $calendar->createProperty('X-PROP', $s);
293  $result = $property->validate(Property::REPAIR);
294 
295  $this->assertEquals('Property contained a control character (0x7f)', $result[0]['message']);
296  $this->assertEquals("chars[7F()5E(^)5C(\\\\)3B(\\;)3A(:)2C(\\,)22(\")20( )1F()1E()1D()1C()1B()1A()19()18()17()16()15()14()13()12()11()10()0F()0E()0D()0C()0B()0A(\\n)09(\t)08()07()06()05()04()03()02()01()00()]end", $property->getRawMimeDirValue());
297 
298  }
299 
301 
302  $calendar = new VCalendar();
303  $property = $calendar->createProperty("X_*&PROP*", "Bla");
304  $result = $property->validate(Property::REPAIR);
305 
306  $this->assertEquals($result[0]['message'], 'The propertyname: X_*&PROP* contains invalid characters. Only A-Z, 0-9 and - are allowed');
307  $this->assertEquals('X-PROP', $property->name);
308 
309  }
310 
311  function testGetValue() {
312 
313  $calendar = new VCalendar();
314  $property = $calendar->createProperty("SUMMARY", null);
315  $this->assertEquals([], $property->getParts());
316  $this->assertNull($property->getValue());
317 
318  $property->setValue([]);
319  $this->assertEquals([], $property->getParts());
320  $this->assertNull($property->getValue());
321 
322  $property->setValue([1]);
323  $this->assertEquals([1], $property->getParts());
324  $this->assertEquals(1, $property->getValue());
325 
326  $property->setValue([1, 2]);
327  $this->assertEquals([1, 2], $property->getParts());
328  $this->assertEquals('1,2', $property->getValue());
329 
330  $property->setValue('str');
331  $this->assertEquals(['str'], $property->getParts());
332  $this->assertEquals('str', $property->getValue());
333  }
334 
341 
342  $calendar = new VCalendar();
343  $property = $calendar->createProperty("X-PROP", null);
344 
345  $calendar->add($property);
346  $calendar->{'X-PROP'}[0] = 'Something!';
347 
348  }
349 
356 
357  $calendar = new VCalendar();
358  $property = $calendar->createProperty("X-PROP", null);
359 
360  $calendar->add($property);
361  unset($calendar->{'X-PROP'}[0]);
362 
363  }
364 
366 
367  $document = new VCalendar();
368  $property = $document->add('X-FOO', 'value');
369  $property['ENCODING'] = 'invalid';
370 
371  $result = $property->validate();
372 
373  $this->assertEquals('ENCODING=INVALID is not valid for this document type.', $result[0]['message']);
374  $this->assertEquals(3, $result[0]['level']);
375 
376  }
377 
379 
380  $document = new VCard(['VERSION' => '4.0']);
381  $property = $document->add('X-FOO', 'value');
382  $property['ENCODING'] = 'BASE64';
383 
384  $result = $property->validate();
385 
386  $this->assertEquals('ENCODING parameter is not valid in vCard 4.', $result[0]['message']);
387  $this->assertEquals(3, $result[0]['level']);
388 
389  }
390 
392 
393  $document = new VCard(['VERSION' => '3.0']);
394  $property = $document->add('X-FOO', 'value');
395  $property['ENCODING'] = 'BASE64';
396 
397  $result = $property->validate();
398 
399  $this->assertEquals('ENCODING=BASE64 is not valid for this document type.', $result[0]['message']);
400  $this->assertEquals(3, $result[0]['level']);
401 
402  }
403 
405 
406  $document = new VCard(['VERSION' => '2.1']);
407  $property = $document->add('X-FOO', 'value');
408  $property['ENCODING'] = 'B';
409 
410  $result = $property->validate();
411 
412  $this->assertEquals('ENCODING=B is not valid for this document type.', $result[0]['message']);
413  $this->assertEquals(3, $result[0]['level']);
414 
415  }
416 }
$result
testArrayAccessUnsetInt()
ElementList should reject this.
$s
Definition: pwgen.php:45
VObject Parameter.
Definition: Parameter.php:20
The VCalendar component.
Definition: VCalendar.php:23
const REPAIR
The following constants are used by the validate() method.
Definition: Node.php:27
VObject ElementList.
Definition: ElementList.php:18
testArrayAccessSetInt()
ElementList should reject this.
The VCard component.
Definition: VCard.php:18