1<?php
2
3namespace Sabre\VObject;
4
5class ParameterTest extends \PHPUnit_Framework_TestCase {
6
7    function testSetup() {
8
9        $cal = new Component\VCalendar();
10
11        $param = new Parameter($cal, 'name', 'value');
12        $this->assertEquals('NAME', $param->name);
13        $this->assertEquals('value', $param->getValue());
14
15    }
16
17    function testSetupNameLess() {
18
19        $card = new Component\VCard();
20
21        $param = new Parameter($card, null, 'URL');
22        $this->assertEquals('VALUE', $param->name);
23        $this->assertEquals('URL', $param->getValue());
24        $this->assertTrue($param->noName);
25
26    }
27
28    function testModify() {
29
30        $cal = new Component\VCalendar();
31
32        $param = new Parameter($cal, 'name', null);
33        $param->addValue(1);
34        $this->assertEquals([1], $param->getParts());
35
36        $param->setParts([1, 2]);
37        $this->assertEquals([1, 2], $param->getParts());
38
39        $param->addValue(3);
40        $this->assertEquals([1, 2, 3], $param->getParts());
41
42        $param->setValue(4);
43        $param->addValue(5);
44        $this->assertEquals([4, 5], $param->getParts());
45
46    }
47
48    function testCastToString() {
49
50        $cal = new Component\VCalendar();
51        $param = new Parameter($cal, 'name', 'value');
52        $this->assertEquals('value', $param->__toString());
53        $this->assertEquals('value', (string)$param);
54
55    }
56
57    function testCastNullToString() {
58
59        $cal = new Component\VCalendar();
60        $param = new Parameter($cal, 'name', null);
61        $this->assertEquals('', $param->__toString());
62        $this->assertEquals('', (string)$param);
63
64    }
65
66    function testSerialize() {
67
68        $cal = new Component\VCalendar();
69        $param = new Parameter($cal, 'name', 'value');
70        $this->assertEquals('NAME=value', $param->serialize());
71
72    }
73
74    function testSerializeEmpty() {
75
76        $cal = new Component\VCalendar();
77        $param = new Parameter($cal, 'name', null);
78        $this->assertEquals('NAME=', $param->serialize());
79
80    }
81
82    function testSerializeComplex() {
83
84        $cal = new Component\VCalendar();
85        $param = new Parameter($cal, 'name', ["val1", "val2;", "val3^", "val4\n", "val5\""]);
86        $this->assertEquals('NAME=val1,"val2;","val3^^","val4^n","val5^\'"', $param->serialize());
87
88    }
89
90    /**
91     * iCal 7.0 (OSX 10.9) has major issues with the EMAIL property, when the
92     * value contains a plus sign, and it's not quoted.
93     *
94     * So we specifically added support for that.
95     */
96    function testSerializePlusSign() {
97
98        $cal = new Component\VCalendar();
99        $param = new Parameter($cal, 'EMAIL', "user+something@example.org");
100        $this->assertEquals('EMAIL="user+something@example.org"', $param->serialize());
101
102    }
103
104    function testIterate() {
105
106        $cal = new Component\VCalendar();
107
108        $param = new Parameter($cal, 'name', [1, 2, 3, 4]);
109        $result = [];
110
111        foreach ($param as $value) {
112            $result[] = $value;
113        }
114
115        $this->assertEquals([1, 2, 3, 4], $result);
116
117    }
118
119    function testSerializeColon() {
120
121        $cal = new Component\VCalendar();
122        $param = new Parameter($cal, 'name', 'va:lue');
123        $this->assertEquals('NAME="va:lue"', $param->serialize());
124
125    }
126
127    function testSerializeSemiColon() {
128
129        $cal = new Component\VCalendar();
130        $param = new Parameter($cal, 'name', 'va;lue');
131        $this->assertEquals('NAME="va;lue"', $param->serialize());
132
133    }
134
135}
136