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