3 namespace Sabre\VObject;
5 class PropertyTest extends \PHPUnit_Framework_TestCase {
7 public function testToString() {
9 $property = new Property('propname','propvalue');
10 $this->assertEquals('PROPNAME', $property->name);
11 $this->assertEquals('propvalue', $property->value);
12 $this->assertEquals('propvalue', $property->__toString());
13 $this->assertEquals('propvalue', (string)$property);
17 public function testParameterExists() {
19 $property = new Property('propname','propvalue');
20 $property->parameters[] = new Parameter('paramname','paramvalue');
22 $this->assertTrue(isset($property['PARAMNAME']));
23 $this->assertTrue(isset($property['paramname']));
24 $this->assertFalse(isset($property['foo']));
28 public function testParameterGet() {
30 $property = new Property('propname','propvalue');
31 $property->parameters[] = new Parameter('paramname','paramvalue');
33 $this->assertInstanceOf('Sabre\\VObject\\Parameter',$property['paramname']);
37 public function testParameterNotExists() {
39 $property = new Property('propname','propvalue');
40 $property->parameters[] = new Parameter('paramname','paramvalue');
42 $this->assertInternalType('null',$property['foo']);
46 public function testParameterMultiple() {
48 $property = new Property('propname','propvalue');
49 $property->parameters[] = new Parameter('paramname','paramvalue');
50 $property->parameters[] = new Parameter('paramname','paramvalue');
52 $this->assertInstanceOf('Sabre\\VObject\\Parameter',$property['paramname']);
53 $this->assertEquals(2,count($property['paramname']));
57 public function testSetParameterAsString() {
59 $property = new Property('propname','propvalue');
60 $property['paramname'] = 'paramvalue';
62 $this->assertEquals(1,count($property->parameters));
63 $this->assertInstanceOf('Sabre\\VObject\\Parameter', $property->parameters[0]);
64 $this->assertEquals('PARAMNAME',$property->parameters[0]->name);
65 $this->assertEquals('paramvalue',$property->parameters[0]->value);
70 * @expectedException InvalidArgumentException
72 public function testSetParameterAsStringNoKey() {
74 $property = new Property('propname','propvalue');
75 $property[] = 'paramvalue';
79 public function testSetParameterObject() {
81 $property = new Property('propname','propvalue');
82 $param = new Parameter('paramname','paramvalue');
86 $this->assertEquals(1,count($property->parameters));
87 $this->assertEquals($param, $property->parameters[0]);
92 * @expectedException InvalidArgumentException
94 public function testSetParameterObjectWithKey() {
96 $property = new Property('propname','propvalue');
97 $param = new Parameter('paramname','paramvalue');
99 $property['key'] = $param;
105 * @expectedException InvalidArgumentException
107 public function testSetParameterObjectRandomObject() {
109 $property = new Property('propname','propvalue');
110 $property[] = new \StdClass();
114 public function testUnsetParameter() {
116 $property = new Property('propname','propvalue');
117 $param = new Parameter('paramname','paramvalue');
118 $property->parameters[] = $param;
120 unset($property['PARAMNAME']);
121 $this->assertEquals(0,count($property->parameters));
125 public function testParamCount() {
127 $property = new Property('propname','propvalue');
128 $param = new Parameter('paramname','paramvalue');
129 $property->parameters[] = $param;
130 $property->parameters[] = clone $param;
132 $this->assertEquals(2,count($property->parameters));
136 public function testSerialize() {
138 $property = new Property('propname','propvalue');
140 $this->assertEquals("PROPNAME:propvalue\r\n",$property->serialize());
144 public function testSerializeParam() {
146 $property = new Property('propname','propvalue');
147 $property->parameters[] = new Parameter('paramname','paramvalue');
148 $property->parameters[] = new Parameter('paramname2','paramvalue2');
150 $this->assertEquals("PROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propvalue\r\n",$property->serialize());
154 public function testSerializeNewLine() {
156 $property = new Property('propname',"line1\nline2");
158 $this->assertEquals("PROPNAME:line1\\nline2\r\n",$property->serialize());
162 public function testSerializeLongLine() {
164 $value = str_repeat('!',200);
165 $property = new Property('propname',$value);
167 $expected = "PROPNAME:" . str_repeat('!',66) . "\r\n " . str_repeat('!',74) . "\r\n " . str_repeat('!',60) . "\r\n";
169 $this->assertEquals($expected,$property->serialize());
173 public function testSerializeUTF8LineFold() {
175 $value = str_repeat('!',65) . "\xc3\xa4bla"; // inserted umlaut-a
176 $property = new Property('propname', $value);
177 $expected = "PROPNAME:" . str_repeat('!',65) . "\r\n \xc3\xa4bla\r\n";
178 $this->assertEquals($expected, $property->serialize());
182 public function testGetIterator() {
184 $it = new ElementList(array());
185 $property = new Property('propname','propvalue');
186 $property->setIterator($it);
187 $this->assertEquals($it,$property->getIterator());
192 public function testGetIteratorDefault() {
194 $property = new Property('propname','propvalue');
195 $it = $property->getIterator();
196 $this->assertTrue($it instanceof ElementList);
197 $this->assertEquals(1,count($it));
201 function testAddScalar() {
203 $property = new Property('EMAIL');
205 $property->add('myparam','value');
207 $this->assertEquals(1, count($property->parameters));
209 $this->assertTrue($property->parameters[0] instanceof Parameter);
210 $this->assertEquals('MYPARAM',$property->parameters[0]->name);
211 $this->assertEquals('value',$property->parameters[0]->value);
215 function testAddParameter() {
217 $prop = new Property('EMAIL');
219 $prop->add(new Parameter('MYPARAM','value'));
221 $this->assertEquals(1, count($prop->parameters));
222 $this->assertEquals('MYPARAM',$prop['myparam']->name);
226 function testAddParameterTwice() {
228 $prop = new Property('EMAIL');
230 $prop->add(new Parameter('MYPARAM', 'value1'));
231 $prop->add(new Parameter('MYPARAM', 'value2'));
233 $this->assertEquals(2, count($prop->parameters));
235 $this->assertEquals('MYPARAM',$prop['MYPARAM']->name);
240 * @expectedException InvalidArgumentException
242 function testAddArgFail() {
244 $prop = new Property('EMAIL');
245 $prop->add(new Parameter('MPARAM'),'hello');
250 * @expectedException InvalidArgumentException
252 function testAddArgFail2() {
254 $property = new Property('EMAIL','value');
255 $property->add(array());
260 * @expectedException InvalidArgumentException
262 function testAddArgFail3() {
264 $property = new Property('EMAIL','value');
265 $property->add('hello',array());
269 function testClone() {
271 $property = new Property('EMAIL','value');
272 $property['FOO'] = 'BAR';
274 $property2 = clone $property;
276 $property['FOO'] = 'BAZ';
277 $this->assertEquals('BAR', (string)$property2['FOO']);
281 function testCreateParams() {
283 $property = Property::create('X-PROP', 'value', array(
284 'param1' => 'value1',
285 'param2' => array('value2', 'value3')
288 $this->assertEquals(1, count($property['PARAM1']));
289 $this->assertEquals(2, count($property['PARAM2']));