Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/PropertyTest.php @ 7:430dbd5346f7
vendor sabre as distributed
| author | Charlie Root |
|---|---|
| date | Sat, 13 Jan 2018 09:06:10 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 6:cec75ba50afc | 7:430dbd5346f7 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 namespace Sabre\VObject; | |
| 4 | |
| 5 use | |
| 6 Sabre\VObject\Component\VCalendar; | |
| 7 | |
| 8 class PropertyTest extends \PHPUnit_Framework_TestCase { | |
| 9 | |
| 10 public function testToString() { | |
| 11 | |
| 12 $cal = new VCalendar(); | |
| 13 | |
| 14 $property = $cal->createProperty('propname','propvalue'); | |
| 15 $this->assertEquals('PROPNAME', $property->name); | |
| 16 $this->assertEquals('propvalue', $property->__toString()); | |
| 17 $this->assertEquals('propvalue', (string)$property); | |
| 18 $this->assertEquals('propvalue', $property->getValue()); | |
| 19 | |
| 20 } | |
| 21 | |
| 22 public function testCreate() { | |
| 23 | |
| 24 $cal = new VCalendar(); | |
| 25 | |
| 26 $params = array( | |
| 27 'param1' => 'value1', | |
| 28 'param2' => 'value2', | |
| 29 ); | |
| 30 | |
| 31 $property = $cal->createProperty('propname','propvalue', $params); | |
| 32 | |
| 33 $this->assertEquals('value1', $property['param1']->getValue()); | |
| 34 $this->assertEquals('value2', $property['param2']->getValue()); | |
| 35 | |
| 36 } | |
| 37 | |
| 38 public function testSetValue() { | |
| 39 | |
| 40 $cal = new VCalendar(); | |
| 41 | |
| 42 $property = $cal->createProperty('propname','propvalue'); | |
| 43 $property->setValue('value2'); | |
| 44 | |
| 45 $this->assertEquals('PROPNAME', $property->name); | |
| 46 $this->assertEquals('value2', $property->__toString()); | |
| 47 | |
| 48 } | |
| 49 | |
| 50 public function testParameterExists() { | |
| 51 | |
| 52 $cal = new VCalendar(); | |
| 53 $property = $cal->createProperty('propname','propvalue'); | |
| 54 $property['paramname'] = 'paramvalue'; | |
| 55 | |
| 56 $this->assertTrue(isset($property['PARAMNAME'])); | |
| 57 $this->assertTrue(isset($property['paramname'])); | |
| 58 $this->assertFalse(isset($property['foo'])); | |
| 59 | |
| 60 } | |
| 61 | |
| 62 public function testParameterGet() { | |
| 63 | |
| 64 $cal = new VCalendar(); | |
| 65 $property = $cal->createProperty('propname','propvalue'); | |
| 66 $property['paramname'] = 'paramvalue'; | |
| 67 | |
| 68 $this->assertInstanceOf('Sabre\\VObject\\Parameter',$property['paramname']); | |
| 69 | |
| 70 } | |
| 71 | |
| 72 public function testParameterNotExists() { | |
| 73 | |
| 74 $cal = new VCalendar(); | |
| 75 $property = $cal->createProperty('propname','propvalue'); | |
| 76 $property['paramname'] = 'paramvalue'; | |
| 77 | |
| 78 $this->assertInternalType('null',$property['foo']); | |
| 79 | |
| 80 } | |
| 81 | |
| 82 public function testParameterMultiple() { | |
| 83 | |
| 84 $cal = new VCalendar(); | |
| 85 $property = $cal->createProperty('propname','propvalue'); | |
| 86 $property['paramname'] = 'paramvalue'; | |
| 87 $property->add('paramname', 'paramvalue'); | |
| 88 | |
| 89 $this->assertInstanceOf('Sabre\\VObject\\Parameter',$property['paramname']); | |
| 90 $this->assertEquals(2,count($property['paramname']->getParts())); | |
| 91 | |
| 92 } | |
| 93 | |
| 94 public function testSetParameterAsString() { | |
| 95 | |
| 96 $cal = new VCalendar(); | |
| 97 $property = $cal->createProperty('propname','propvalue'); | |
| 98 $property['paramname'] = 'paramvalue'; | |
| 99 | |
| 100 $this->assertEquals(1,count($property->parameters())); | |
| 101 $this->assertInstanceOf('Sabre\\VObject\\Parameter', $property->parameters['PARAMNAME']); | |
| 102 $this->assertEquals('PARAMNAME',$property->parameters['PARAMNAME']->name); | |
| 103 $this->assertEquals('paramvalue',$property->parameters['PARAMNAME']->getValue()); | |
| 104 | |
| 105 } | |
| 106 | |
| 107 public function testUnsetParameter() { | |
| 108 | |
| 109 $cal = new VCalendar(); | |
| 110 $property = $cal->createProperty('propname','propvalue'); | |
| 111 $property['paramname'] = 'paramvalue'; | |
| 112 | |
| 113 unset($property['PARAMNAME']); | |
| 114 $this->assertEquals(0,count($property->parameters())); | |
| 115 | |
| 116 } | |
| 117 | |
| 118 public function testSerialize() { | |
| 119 | |
| 120 $cal = new VCalendar(); | |
| 121 $property = $cal->createProperty('propname','propvalue'); | |
| 122 | |
| 123 $this->assertEquals("PROPNAME:propvalue\r\n",$property->serialize()); | |
| 124 | |
| 125 } | |
| 126 | |
| 127 public function testSerializeParam() { | |
| 128 | |
| 129 $cal = new VCalendar(); | |
| 130 $property = $cal->createProperty('propname','propvalue', array( | |
| 131 'paramname' => 'paramvalue', | |
| 132 'paramname2' => 'paramvalue2', | |
| 133 )); | |
| 134 | |
| 135 $this->assertEquals("PROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propvalue\r\n",$property->serialize()); | |
| 136 | |
| 137 } | |
| 138 | |
| 139 public function testSerializeNewLine() { | |
| 140 | |
| 141 $cal = new VCalendar(); | |
| 142 $property = $cal->createProperty('SUMMARY',"line1\nline2"); | |
| 143 | |
| 144 $this->assertEquals("SUMMARY:line1\\nline2\r\n",$property->serialize()); | |
| 145 | |
| 146 } | |
| 147 | |
| 148 public function testSerializeLongLine() { | |
| 149 | |
| 150 $cal = new VCalendar(); | |
| 151 $value = str_repeat('!',200); | |
| 152 $property = $cal->createProperty('propname',$value); | |
| 153 | |
| 154 $expected = "PROPNAME:" . str_repeat('!',66) . "\r\n " . str_repeat('!',74) . "\r\n " . str_repeat('!',60) . "\r\n"; | |
| 155 | |
| 156 $this->assertEquals($expected,$property->serialize()); | |
| 157 | |
| 158 } | |
| 159 | |
| 160 public function testSerializeUTF8LineFold() { | |
| 161 | |
| 162 $cal = new VCalendar(); | |
| 163 $value = str_repeat('!',65) . "\xc3\xa4bla"; // inserted umlaut-a | |
| 164 $property = $cal->createProperty('propname', $value); | |
| 165 $expected = "PROPNAME:" . str_repeat('!',65) . "\r\n \xc3\xa4bla\r\n"; | |
| 166 $this->assertEquals($expected, $property->serialize()); | |
| 167 | |
| 168 } | |
| 169 | |
| 170 public function testGetIterator() { | |
| 171 | |
| 172 $cal = new VCalendar(); | |
| 173 $it = new ElementList(array()); | |
| 174 $property = $cal->createProperty('propname','propvalue'); | |
| 175 $property->setIterator($it); | |
| 176 $this->assertEquals($it,$property->getIterator()); | |
| 177 | |
| 178 } | |
| 179 | |
| 180 | |
| 181 public function testGetIteratorDefault() { | |
| 182 | |
| 183 $cal = new VCalendar(); | |
| 184 $property = $cal->createProperty('propname','propvalue'); | |
| 185 $it = $property->getIterator(); | |
| 186 $this->assertTrue($it instanceof ElementList); | |
| 187 $this->assertEquals(1,count($it)); | |
| 188 | |
| 189 } | |
| 190 | |
| 191 function testAddScalar() { | |
| 192 | |
| 193 $cal = new VCalendar(); | |
| 194 $property = $cal->createProperty('EMAIL'); | |
| 195 | |
| 196 $property->add('myparam','value'); | |
| 197 | |
| 198 $this->assertEquals(1, count($property->parameters())); | |
| 199 | |
| 200 $this->assertTrue($property->parameters['MYPARAM'] instanceof Parameter); | |
| 201 $this->assertEquals('MYPARAM',$property->parameters['MYPARAM']->name); | |
| 202 $this->assertEquals('value',$property->parameters['MYPARAM']->getValue()); | |
| 203 | |
| 204 } | |
| 205 | |
| 206 function testAddParameter() { | |
| 207 | |
| 208 $cal = new VCalendar(); | |
| 209 $prop = $cal->createProperty('EMAIL'); | |
| 210 | |
| 211 $prop->add('MYPARAM','value'); | |
| 212 | |
| 213 $this->assertEquals(1, count($prop->parameters())); | |
| 214 $this->assertEquals('MYPARAM',$prop['myparam']->name); | |
| 215 | |
| 216 } | |
| 217 | |
| 218 function testAddParameterTwice() { | |
| 219 | |
| 220 $cal = new VCalendar(); | |
| 221 $prop = $cal->createProperty('EMAIL'); | |
| 222 | |
| 223 $prop->add('MYPARAM', 'value1'); | |
| 224 $prop->add('MYPARAM', 'value2'); | |
| 225 | |
| 226 $this->assertEquals(1, count($prop->parameters)); | |
| 227 $this->assertEquals(2, count($prop->parameters['MYPARAM']->getParts())); | |
| 228 | |
| 229 $this->assertEquals('MYPARAM',$prop['MYPARAM']->name); | |
| 230 | |
| 231 } | |
| 232 | |
| 233 | |
| 234 function testClone() { | |
| 235 | |
| 236 $cal = new VCalendar(); | |
| 237 $property = $cal->createProperty('EMAIL','value'); | |
| 238 $property['FOO'] = 'BAR'; | |
| 239 | |
| 240 $property2 = clone $property; | |
| 241 | |
| 242 $property['FOO'] = 'BAZ'; | |
| 243 $this->assertEquals('BAR', (string)$property2['FOO']); | |
| 244 | |
| 245 } | |
| 246 | |
| 247 function testCreateParams() { | |
| 248 | |
| 249 $cal = new VCalendar(); | |
| 250 $property = $cal->createProperty('X-PROP','value', array( | |
| 251 'param1' => 'value1', | |
| 252 'param2' => array('value2', 'value3') | |
| 253 )); | |
| 254 | |
| 255 $this->assertEquals(1, count($property['PARAM1']->getParts())); | |
| 256 $this->assertEquals(2, count($property['PARAM2']->getParts())); | |
| 257 | |
| 258 } | |
| 259 | |
| 260 function testValidateNonUTF8() { | |
| 261 | |
| 262 $calendar = new VCalendar(); | |
| 263 $property = $calendar->createProperty('X-PROP', "Bla\x00"); | |
| 264 $result = $property->validate(Property::REPAIR); | |
| 265 | |
| 266 $this->assertEquals('Property contained a control character (0x00)', $result[0]['message']); | |
| 267 $this->assertEquals('Bla', $property->getValue()); | |
| 268 | |
| 269 } | |
| 270 | |
| 271 function testValidateControlChars() { | |
| 272 | |
| 273 $s = "chars["; | |
| 274 foreach (array( | |
| 275 0x7F, 0x5E, 0x5C, 0x3B, 0x3A, 0x2C, 0x22, 0x20, | |
| 276 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, | |
| 277 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, | |
| 278 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, | |
| 279 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, | |
| 280 ) as $c) { | |
| 281 $s .= sprintf('%02X(%c)', $c, $c); | |
| 282 } | |
| 283 $s .= "]end"; | |
| 284 | |
| 285 $calendar = new VCalendar(); | |
| 286 $property = $calendar->createProperty('X-PROP', $s); | |
| 287 $result = $property->validate(Property::REPAIR); | |
| 288 | |
| 289 $this->assertEquals('Property contained a control character (0x7f)', $result[0]['message']); | |
| 290 $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( )08()07()06()05()04()03()02()01()00()]end", $property->getRawMimeDirValue()); | |
| 291 | |
| 292 } | |
| 293 | |
| 294 | |
| 295 function testValidateBadPropertyName() { | |
| 296 | |
| 297 $calendar = new VCalendar(); | |
| 298 $property = $calendar->createProperty("X_*&PROP*", "Bla"); | |
| 299 $result = $property->validate(Property::REPAIR); | |
| 300 | |
| 301 $this->assertEquals($result[0]['message'], 'The propertyname: X_*&PROP* contains invalid characters. Only A-Z, 0-9 and - are allowed'); | |
| 302 $this->assertEquals('X-PROP', $property->name); | |
| 303 | |
| 304 } | |
| 305 | |
| 306 function testGetValue() { | |
| 307 | |
| 308 $calendar = new VCalendar(); | |
| 309 $property = $calendar->createProperty("SUMMARY", null); | |
| 310 $this->assertEquals(array(), $property->getParts()); | |
| 311 $this->assertNull($property->getValue()); | |
| 312 | |
| 313 $property->setValue(array()); | |
| 314 $this->assertEquals(array(), $property->getParts()); | |
| 315 $this->assertNull($property->getValue()); | |
| 316 | |
| 317 $property->setValue(array(1)); | |
| 318 $this->assertEquals(array(1), $property->getParts()); | |
| 319 $this->assertEquals(1, $property->getValue()); | |
| 320 | |
| 321 $property->setValue(array(1,2)); | |
| 322 $this->assertEquals(array(1,2), $property->getParts()); | |
| 323 $this->assertEquals('1,2', $property->getValue()); | |
| 324 | |
| 325 $property->setValue('str'); | |
| 326 $this->assertEquals(array('str'), $property->getParts()); | |
| 327 $this->assertEquals('str', $property->getValue()); | |
| 328 } | |
| 329 | |
| 330 /** | |
| 331 * ElementList should reject this. | |
| 332 * | |
| 333 * @expectedException \LogicException | |
| 334 */ | |
| 335 public function testArrayAccessSetInt() { | |
| 336 | |
| 337 $calendar = new VCalendar(); | |
| 338 $property = $calendar->createProperty("X-PROP", null); | |
| 339 | |
| 340 $calendar->add($property); | |
| 341 $calendar->{'X-PROP'}[0] = 'Something!'; | |
| 342 | |
| 343 } | |
| 344 | |
| 345 /** | |
| 346 * ElementList should reject this. | |
| 347 * | |
| 348 * @expectedException \LogicException | |
| 349 */ | |
| 350 public function testArrayAccessUnsetInt() { | |
| 351 | |
| 352 $calendar = new VCalendar(); | |
| 353 $property = $calendar->createProperty("X-PROP", null); | |
| 354 | |
| 355 $calendar->add($property); | |
| 356 unset($calendar->{'X-PROP'}[0]); | |
| 357 | |
| 358 } | |
| 359 | |
| 360 } |
