xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/Property/VCard/DateAndOrTimeTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Property\VCard;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse
6*a1a3b679SAndreas Boehler    Sabre\VObject,
7*a1a3b679SAndreas Boehler    Sabre\VObject\Reader;
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehlerclass DateAndOrTimeTest extends \PHPUnit_Framework_TestCase {
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler    /**
12*a1a3b679SAndreas Boehler     * @dataProvider dates
13*a1a3b679SAndreas Boehler     */
14*a1a3b679SAndreas Boehler    function testGetJsonValue($input, $output) {
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
17*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY', $input);
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas Boehler        $this->assertEquals(array($output), $prop->getJsonValue());
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler    }
22*a1a3b679SAndreas Boehler
23*a1a3b679SAndreas Boehler    function dates() {
24*a1a3b679SAndreas Boehler
25*a1a3b679SAndreas Boehler        return array(
26*a1a3b679SAndreas Boehler            array(
27*a1a3b679SAndreas Boehler                "19961022T140000",
28*a1a3b679SAndreas Boehler                "1996-10-22T14:00:00",
29*a1a3b679SAndreas Boehler            ),
30*a1a3b679SAndreas Boehler            array(
31*a1a3b679SAndreas Boehler                "--1022T1400",
32*a1a3b679SAndreas Boehler                "--10-22T14:00",
33*a1a3b679SAndreas Boehler            ),
34*a1a3b679SAndreas Boehler            array(
35*a1a3b679SAndreas Boehler                "---22T14",
36*a1a3b679SAndreas Boehler                "---22T14",
37*a1a3b679SAndreas Boehler            ),
38*a1a3b679SAndreas Boehler            array(
39*a1a3b679SAndreas Boehler                "19850412",
40*a1a3b679SAndreas Boehler                "1985-04-12",
41*a1a3b679SAndreas Boehler            ),
42*a1a3b679SAndreas Boehler            array(
43*a1a3b679SAndreas Boehler                "1985-04",
44*a1a3b679SAndreas Boehler                "1985-04",
45*a1a3b679SAndreas Boehler            ),
46*a1a3b679SAndreas Boehler            array(
47*a1a3b679SAndreas Boehler                "1985",
48*a1a3b679SAndreas Boehler                "1985",
49*a1a3b679SAndreas Boehler            ),
50*a1a3b679SAndreas Boehler            array(
51*a1a3b679SAndreas Boehler                "--0412",
52*a1a3b679SAndreas Boehler                "--04-12",
53*a1a3b679SAndreas Boehler            ),
54*a1a3b679SAndreas Boehler            array(
55*a1a3b679SAndreas Boehler                "T102200",
56*a1a3b679SAndreas Boehler                "T10:22:00",
57*a1a3b679SAndreas Boehler            ),
58*a1a3b679SAndreas Boehler            array(
59*a1a3b679SAndreas Boehler                "T1022",
60*a1a3b679SAndreas Boehler                "T10:22",
61*a1a3b679SAndreas Boehler            ),
62*a1a3b679SAndreas Boehler            array(
63*a1a3b679SAndreas Boehler                "T10",
64*a1a3b679SAndreas Boehler                "T10",
65*a1a3b679SAndreas Boehler            ),
66*a1a3b679SAndreas Boehler            array(
67*a1a3b679SAndreas Boehler                "T-2200",
68*a1a3b679SAndreas Boehler                "T-22:00",
69*a1a3b679SAndreas Boehler            ),
70*a1a3b679SAndreas Boehler            array(
71*a1a3b679SAndreas Boehler                "T102200Z",
72*a1a3b679SAndreas Boehler                "T10:22:00Z",
73*a1a3b679SAndreas Boehler            ),
74*a1a3b679SAndreas Boehler            array(
75*a1a3b679SAndreas Boehler                "T102200-0800",
76*a1a3b679SAndreas Boehler                "T10:22:00-0800",
77*a1a3b679SAndreas Boehler            ),
78*a1a3b679SAndreas Boehler            array(
79*a1a3b679SAndreas Boehler                "T--00",
80*a1a3b679SAndreas Boehler                "T--00",
81*a1a3b679SAndreas Boehler            ),
82*a1a3b679SAndreas Boehler        );
83*a1a3b679SAndreas Boehler
84*a1a3b679SAndreas Boehler    }
85*a1a3b679SAndreas Boehler
86*a1a3b679SAndreas Boehler    public function testSetParts() {
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
89*a1a3b679SAndreas Boehler
90*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY');
91*a1a3b679SAndreas Boehler        $prop->setParts(array(
92*a1a3b679SAndreas Boehler            new \DateTime('2014-04-02 18:37:00')
93*a1a3b679SAndreas Boehler        ));
94*a1a3b679SAndreas Boehler
95*a1a3b679SAndreas Boehler        $this->assertEquals('20140402T183700Z', $prop->getValue());
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler    }
98*a1a3b679SAndreas Boehler
99*a1a3b679SAndreas Boehler    /**
100*a1a3b679SAndreas Boehler     * @expectedException InvalidArgumentException
101*a1a3b679SAndreas Boehler     */
102*a1a3b679SAndreas Boehler    public function testSetPartsTooMany() {
103*a1a3b679SAndreas Boehler
104*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY');
107*a1a3b679SAndreas Boehler        $prop->setParts(array(
108*a1a3b679SAndreas Boehler            1,
109*a1a3b679SAndreas Boehler            2
110*a1a3b679SAndreas Boehler        ));
111*a1a3b679SAndreas Boehler
112*a1a3b679SAndreas Boehler    }
113*a1a3b679SAndreas Boehler
114*a1a3b679SAndreas Boehler    public function testSetPartsString() {
115*a1a3b679SAndreas Boehler
116*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
117*a1a3b679SAndreas Boehler
118*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY');
119*a1a3b679SAndreas Boehler        $prop->setParts(array(
120*a1a3b679SAndreas Boehler            "20140402T183700Z"
121*a1a3b679SAndreas Boehler        ));
122*a1a3b679SAndreas Boehler
123*a1a3b679SAndreas Boehler        $this->assertEquals('20140402T183700Z', $prop->getValue());
124*a1a3b679SAndreas Boehler
125*a1a3b679SAndreas Boehler    }
126*a1a3b679SAndreas Boehler
127*a1a3b679SAndreas Boehler    public function testSetValueDateTime() {
128*a1a3b679SAndreas Boehler
129*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
130*a1a3b679SAndreas Boehler
131*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY');
132*a1a3b679SAndreas Boehler        $prop->setValue(
133*a1a3b679SAndreas Boehler            new \DateTime('2014-04-02 18:37:00')
134*a1a3b679SAndreas Boehler        );
135*a1a3b679SAndreas Boehler
136*a1a3b679SAndreas Boehler        $this->assertEquals('20140402T183700Z', $prop->getValue());
137*a1a3b679SAndreas Boehler
138*a1a3b679SAndreas Boehler    }
139*a1a3b679SAndreas Boehler
140*a1a3b679SAndreas Boehler    public function testSetDateTimeOffset() {
141*a1a3b679SAndreas Boehler
142*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
143*a1a3b679SAndreas Boehler
144*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY');
145*a1a3b679SAndreas Boehler        $prop->setValue(
146*a1a3b679SAndreas Boehler            new \DateTime('2014-04-02 18:37:00', new \DateTimeZone('America/Toronto'))
147*a1a3b679SAndreas Boehler        );
148*a1a3b679SAndreas Boehler
149*a1a3b679SAndreas Boehler        $this->assertEquals('20140402T183700-0400', $prop->getValue());
150*a1a3b679SAndreas Boehler
151*a1a3b679SAndreas Boehler    }
152*a1a3b679SAndreas Boehler
153*a1a3b679SAndreas Boehler    public function testGetDateTime() {
154*a1a3b679SAndreas Boehler
155*a1a3b679SAndreas Boehler        $datetime = new \DateTime('2014-04-02 18:37:00', new \DateTimeZone('America/Toronto'));
156*a1a3b679SAndreas Boehler
157*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
158*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY', $datetime);
159*a1a3b679SAndreas Boehler
160*a1a3b679SAndreas Boehler        $dt = $prop->getDateTime();
161*a1a3b679SAndreas Boehler        $this->assertEquals('2014-04-02T18:37:00-04:00', $dt->format('c'), "For some reason this one failed. Current default timezone is: " . date_default_timezone_get());
162*a1a3b679SAndreas Boehler
163*a1a3b679SAndreas Boehler    }
164*a1a3b679SAndreas Boehler
165*a1a3b679SAndreas Boehler    public function testGetDate() {
166*a1a3b679SAndreas Boehler
167*a1a3b679SAndreas Boehler        $datetime = new \DateTime('2014-04-02');
168*a1a3b679SAndreas Boehler
169*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
170*a1a3b679SAndreas Boehler        $prop = $vcard->createProperty('BDAY', $datetime, null, 'DATE');
171*a1a3b679SAndreas Boehler
172*a1a3b679SAndreas Boehler        $this->assertEquals('DATE', $prop->getValueType());
173*a1a3b679SAndreas Boehler        $this->assertEquals('BDAY:20140402', rtrim($prop->serialize()));
174*a1a3b679SAndreas Boehler
175*a1a3b679SAndreas Boehler    }
176*a1a3b679SAndreas Boehler
177*a1a3b679SAndreas Boehler    public function testGetDateIncomplete() {
178*a1a3b679SAndreas Boehler
179*a1a3b679SAndreas Boehler        $datetime = '--0407';
180*a1a3b679SAndreas Boehler
181*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
182*a1a3b679SAndreas Boehler        $prop = $vcard->add('BDAY', $datetime);
183*a1a3b679SAndreas Boehler
184*a1a3b679SAndreas Boehler        $dt = $prop->getDateTime();
185*a1a3b679SAndreas Boehler        // Note: if the year changes between the last line and the next line of
186*a1a3b679SAndreas Boehler        // code, this test may fail.
187*a1a3b679SAndreas Boehler        //
188*a1a3b679SAndreas Boehler        // If that happens, head outside and have a drink.
189*a1a3b679SAndreas Boehler        $current = new \DateTime('now');
190*a1a3b679SAndreas Boehler        $year = $current->format('Y');
191*a1a3b679SAndreas Boehler
192*a1a3b679SAndreas Boehler        $this->assertEquals($year . '0407', $dt->format('Ymd'));
193*a1a3b679SAndreas Boehler
194*a1a3b679SAndreas Boehler    }
195*a1a3b679SAndreas Boehler
196*a1a3b679SAndreas Boehler    public function testGetDateIncompleteFromVCard() {
197*a1a3b679SAndreas Boehler
198*a1a3b679SAndreas Boehler        $vcard = <<<VCF
199*a1a3b679SAndreas BoehlerBEGIN:VCARD
200*a1a3b679SAndreas BoehlerVERSION:4.0
201*a1a3b679SAndreas BoehlerBDAY:--0407
202*a1a3b679SAndreas BoehlerEND:VCARD
203*a1a3b679SAndreas BoehlerVCF;
204*a1a3b679SAndreas Boehler        $vcard = Reader::read($vcard);
205*a1a3b679SAndreas Boehler        $prop = $vcard->BDAY;
206*a1a3b679SAndreas Boehler
207*a1a3b679SAndreas Boehler        $dt = $prop->getDateTime();
208*a1a3b679SAndreas Boehler        // Note: if the year changes between the last line and the next line of
209*a1a3b679SAndreas Boehler        // code, this test may fail.
210*a1a3b679SAndreas Boehler        //
211*a1a3b679SAndreas Boehler        // If that happens, head outside and have a drink.
212*a1a3b679SAndreas Boehler        $current = new \DateTime('now');
213*a1a3b679SAndreas Boehler        $year = $current->format('Y');
214*a1a3b679SAndreas Boehler
215*a1a3b679SAndreas Boehler        $this->assertEquals($year . '0407', $dt->format('Ymd'));
216*a1a3b679SAndreas Boehler
217*a1a3b679SAndreas Boehler    }
218*a1a3b679SAndreas Boehler
219*a1a3b679SAndreas Boehler    public function testValidate() {
220*a1a3b679SAndreas Boehler
221*a1a3b679SAndreas Boehler        $datetime = '--0407';
222*a1a3b679SAndreas Boehler
223*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
224*a1a3b679SAndreas Boehler        $prop = $vcard->add('BDAY', $datetime);
225*a1a3b679SAndreas Boehler
226*a1a3b679SAndreas Boehler        $this->assertEquals(array(), $prop->validate());
227*a1a3b679SAndreas Boehler
228*a1a3b679SAndreas Boehler    }
229*a1a3b679SAndreas Boehler
230*a1a3b679SAndreas Boehler    public function testValidateBroken() {
231*a1a3b679SAndreas Boehler
232*a1a3b679SAndreas Boehler        $datetime = '123';
233*a1a3b679SAndreas Boehler
234*a1a3b679SAndreas Boehler        $vcard = new VObject\Component\VCard();
235*a1a3b679SAndreas Boehler        $prop = $vcard->add('BDAY', $datetime);
236*a1a3b679SAndreas Boehler
237*a1a3b679SAndreas Boehler        $this->assertEquals(array(array(
238*a1a3b679SAndreas Boehler            'level' => 3,
239*a1a3b679SAndreas Boehler            'message' => 'The supplied value (123) is not a correct DATE-AND-OR-TIME property',
240*a1a3b679SAndreas Boehler            'node' => $prop,
241*a1a3b679SAndreas Boehler        )), $prop->validate());
242*a1a3b679SAndreas Boehler
243*a1a3b679SAndreas Boehler    }
244*a1a3b679SAndreas Boehler}
245*a1a3b679SAndreas Boehler
246