ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
PropertyTest.php
Go to the documentation of this file.
1<?php
2
3namespace Sabre\VObject;
4
5use PHPUnit\Framework\TestCase;
8
9class 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
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
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
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
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
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
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
An exception for terminatinating execution or to throw for unit testing.
The VCalendar component.
Definition: VCalendar.php:23
The VCard component.
Definition: VCard.php:18
VObject ElementList.
Definition: ElementList.php:18
const REPAIR
The following constants are used by the validate() method.
Definition: Node.php:27
VObject Parameter.
Definition: Parameter.php:20
testArrayAccessSetInt()
ElementList should reject this.
testArrayAccessUnsetInt()
ElementList should reject this.
$s
Definition: pwgen.php:45