object = new gvHidraTimestamp(); } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. * * @access protected */ protected function tearDown() { } public function testSerialize01() { $this->object->setDate(1987,12,19); $this->object->setTime(14,1,2); $ser = serialize($this->object); $unser = unserialize($ser); $this->assertTrue(is_object($unser),'No se deserializa un objeto'); $this->assertSame('gvHidraTimestamp', get_class($unser),'No se deserializa un objeto gvHidraTimestap'); $this->assertSame("1987-12-19 14:01:02",$unser->format('Y-m-d H:i:s'), 'No se guarda el estado serializado'); // comprobar resto atributos protegidos, usando isLeap $this->assertFalse($unser->isLeap(), 'No se guarda el estado serializado de las propiedades protegidas'); } public function testSerialize02() { // con timezone $this->object->setDate(1987,12,19); $this->object->setTime(14,1,2); $la_time = new DateTimeZone('America/Los_Angeles'); $this->object->setTimezone($la_time); $ser = serialize($this->object); $unser = unserialize($ser); $this->assertTrue(is_object($unser),'No se deserializa un objeto con timezone'); $this->assertSame('gvHidraTimestamp', get_class($unser),'No se deserializa un objeto gvHidraTimestap con timezone'); $this->assertSame("1987-12-19T05:01:02-08:00",$unser->format('c'), 'No se guarda el estado serializado con timezone'); } public function testSetTime01() { try { $this->object->setTime(300, 12); } catch (Exception $e) { return; } $this->fail('hora mayor de 23'); } public function testSetTime02() { try { $this->object->setTime(-3, 12); } catch (Exception $e) { return; } $this->fail('hora menor de 0'); } public function testSetTime03() { try { $this->object->setTime(15, 200); } catch (Exception $e) { return; } $this->fail('minuto mayor de 59'); } public function testSetTime04() { try { $this->object->setTime(15, -1); } catch (Exception $e) { return; } $this->fail('minuto menor de 0'); } public function testSetTime05() { try { $this->object->setTime(15, 30, 300); } catch (Exception $e) { return; } $this->fail('segundo mayor de 59'); } public function testSetTime06() { try { $this->object->setTime(15, 30, -3); } catch (Exception $e) { return; } $this->fail('segundo menor de 0'); } public function testSetTime07() { try { $this->object->setTime('x', 30, 3); } catch (Exception $e) { return; } $this->fail('hora no numerica'); } public function testSetTime08() { try { $this->object->setTime(3, 'x', 3); } catch (Exception $e) { return; } $this->fail('minuto no numerico'); } public function testSetTime09() { try { $this->object->setTime(3, 30, 'x'); } catch (Exception $e) { return; } $this->fail('segundos no numerica'); } public function testSetTime10() { $this->object->setTime(15, 30, 45); $this->assertSame("153045",$this->object->format('His'), 'no se guarda la hora'); } public function testSetDate01() { try { $this->object->setDate(1987, 9, 'x'); } catch (Exception $e) { return; } $this->fail('dia no numerico'); } public function testSetDate02() { try { $this->object->setDate(1987, 'x', 1); } catch (Exception $e) { return; } $this->fail('mes no numerico'); } public function testSetDate03() { try { $this->object->setDate('x', 9, 23); } catch (Exception $e) { return; } $this->fail('año no numerico'); } public function testSetDate04() { try { $this->object->setDate(32767+1, 9, 23); } catch (Exception $e) { return; } $this->fail('año > 32767'); } public function testSetDate05() { try { $this->object->setDate(0, 9, 23); } catch (Exception $e) { return; } $this->fail('año < 1'); } public function testSetDate06() { try { $this->object->setDate(2004, 13, 23); } catch (Exception $e) { return; } $this->fail('mes > 12'); } public function testSetDate07() { try { $this->object->setDate(2004, -1, 23); } catch (Exception $e) { return; } $this->fail('mes < 1'); } public function testSetDate08() { try { $this->object->setDate(2004, 11, 31); } catch (Exception $e) { return; } $this->fail('dia > que el maximo del mes'); } public function testSetDate09() { try { $this->object->setDate(2004, 11, 0); } catch (Exception $e) { return; } $this->fail('dia < 1'); } public function testSetDate10() { try { $this->object->setDate(2000, 2, 30); // bisiesto } catch (Exception $e) { return; } $this->fail('dia > que el maximo del mes - bisiesto 400'); } public function testSetDate11() { try { $this->object->setDate(2004, 2, 30); // bisiesto } catch (Exception $e) { return; } $this->fail('dia > que el maximo del mes - bisiesto 4'); } public function testSetDate12() { try { $this->object->setDate(2100, 2, 29); // no bisiesto } catch (Exception $e) { return; } $this->fail('dia > que el maximo del mes - no bisiesto 100'); } public function testSetDate13() { $this->object->setDate(2100, 2, 25); $this->assertSame('2100-02-25',$this->object->format('Y-m-d'),'fecha cambiada'); } public function testModify() { $this->object->setDate(2100, 2, 25); $this->object->modify('+1 month'); $this->assertSame('2100-03-25',$this->object->format('Y-m-d'),'fecha incrementada en 1 mes'); } public function testFormatUser() { $this->assertInternalType('string',$this->object->formatUser(),'fecha usuario no es string'); } public function testFormatFW() { $this->assertInternalType('string',$this->object->formatFW(),'fecha FW no es string'); } public function testFormatSOAP01() { $this->assertInternalType('string',$this->object->formatSOAP(),'fecha SOAP no es string'); } public function testFormatSOAP02() { $this->object->setDate(1987,12,19); $this->object->setTime(14,1,2); $tz = new DateTimeZone('Europe/Madrid'); $this->object->setTimezone($tz); $this->assertEquals('1987-12-19T14:01:02+01:00',$this->object->formatSOAP()); $tz = new DateTimeZone('America/Los_Angeles'); $this->object->setTimezone($tz); $this->assertEquals('1987-12-19T05:01:02-08:00',$this->object->formatSOAP()); } public function testGetTimestamp() { $this->assertSame(strtotime($this->object->format('Y-m-d H:i:s')),$this->object->getTimestamp(), 'fecha actual'); $f1 = new gvHidraTimestamp('1500-12-24 12:13:14'); $this->assertSame(false,$f1->getTimestamp(), 'fecha antes de 1970'); } public function testBetween() { $f1 = new gvHidraTimestamp('2008-09-21'); $f2 = new gvHidraTimestamp(); $this->assertSame(true,$this->object->between($f1,$f2), 'fecha dentro intervalo'); $this->object->addYears(1); $this->assertSame(false,$this->object->between($f1,$f2), 'fecha fuera intervalo por arriba'); $this->object->subYears(51); $this->assertSame(false,$this->object->between($f1,$f2), 'fecha fuera intervalo por abajo'); $this->object->addYears(50); $f2 = new gvHidraTimestamp($this->object->formatFW()); $f2->modify('-1 second'); $this->assertSame(false,$this->object->between($f1,$f2), 'fecha fuera intervalo por por arriba, por 1 segundo'); } public function testBetweenDays01() { try { $this->object->betweenDays(new gvHidraTimestamp(),'x'); } catch (Exception $e) { return; } $this->fail('dias no numerico'); } public function testBetweenDays02() { $d1 = new gvHidraTimestamp('2009-06-20'); $d2 = new gvHidraTimestamp('2009-06-26'); $this->assertEquals(false,$this->object->betweenDays($d1,9),'intervalo en el pasado'); $this->assertEquals(false,$d2->betweenDays($d1,5),'intervalo [20, 20+5]'); $this->assertEquals(true,$d2->betweenDays($d1,6),'intervalo [20, 20+6]'); $this->assertEquals(false,$d1->betweenDays($d2,-5),'intervalo [26-5, 26]'); $this->assertEquals(true,$d1->betweenDays($d2,-6),'intervalo [26-6, 26]'); } public function testCmp() { $this->assertSame(-1,gvHidraTimestamp::cmp($this->object,new gvHidraTimestamp('2007-12-23')), 'fecha actual mayor que una del pasado'); $this->assertSame(1,gvHidraTimestamp::cmp(new gvHidraTimestamp('2007-12-23'),$this->object), 'fecha del pasado menor que actual'); $this->assertSame(-1,gvHidraTimestamp::cmp($this->object,new gvHidraTimestamp('2007-12-23 18:12:43')), 'fecha actual mayor que una del pasado (con hora)'); $this->assertSame(1,gvHidraTimestamp::cmp(new gvHidraTimestamp('2007-12-23 18:12'),$this->object), 'fecha del pasado (con hora) menor que actual'); $this->assertSame(0,gvHidraTimestamp::cmp(new gvHidraTimestamp('2007-12-23'),new gvHidraTimestamp('2007-12-23 00:00:00')), 'fechas iguales'); $this->assertSame(0,gvHidraTimestamp::cmp(new gvHidraTimestamp($this->object->formatFW()),$this->object), 'fechas iguales clonando objeto'); // comparaciones con tz $Moscow = new DateTimeZone('Europe/Moscow'); $Fiji = new DateTimeZone('Pacific/Fiji'); $alli = new gvHidraTimestamp('2004-12-23',$Fiji); $aqui = new gvHidraTimestamp('2004-12-23',$Moscow); $this->assertSame(-1,gvHidraTimestamp::cmp($aqui,$alli), 'fechas iguales con distinto tz'); } public function testOutputFormat() { $this->assertInternalType('string',gvHidraTimestamp::outputFormat('d-m-Y'), 'outputFormat devuelve string'); } public function testAddDays01() { try { $this->object->addDays(-2100); } catch (Exception $e) { return; } $this->fail('dia negativo'); } public function testAddDays02() { try { $this->object->addDays('x'); } catch (Exception $e) { return; } $this->fail('dias no numerico'); } public function testAddDays03() { $d = new gvHidraTimestamp('2009-06-20'); $d->addDays(5); $this->assertSame('2009-06-25',$d->format('Y-m-d'),'fecha añadiendo 5 dias'); } public function testSubDays01() { try { $this->object->subDays('x'); } catch (Exception $e) { return; } $this->fail('dias no numerico'); } public function testSubDays02() { $d = new gvHidraTimestamp('2009-06-20'); $d->subDays(5); $this->assertSame('2009-06-15',$d->format('Y-m-d'),'fecha quitando 5 dias'); $d->subDays(-5); $this->assertSame('2009-06-10',$d->format('Y-m-d'),'fecha quitando -5 dias'); } public function testAddWeeks01() { try { $this->object->addWeeks(-2100); } catch (Exception $e) { return; } $this->fail('semana negativo'); } public function testAddWeeks02() { try { $this->object->addWeeks('x'); } catch (Exception $e) { return; } $this->fail('semana no numerica'); } public function testAddWeeks03() { $d = new gvHidraTimestamp('2009-06-25'); $d->addWeeks(2); $this->assertSame('2009-07-09',$d->format('Y-m-d'),'fecha añadiendo 2 semanas'); } public function testSubWeeks01() { try { $this->object->subWeeks('x'); } catch (Exception $e) { return; } $this->fail('semana no numerico'); } public function testSubWeeks02() { $d = new gvHidraTimestamp('2009-06-25'); $d->subWeeks(5); $this->assertSame('2009-05-21',$d->format('Y-m-d'),'fecha quitando 5 semanas'); $d->subWeeks(-5); $this->assertSame('2009-04-16',$d->format('Y-m-d'),'fecha quitando -5 semanas'); } public function testAddMonths01() { try { $this->object->addMonths(-2100); } catch (Exception $e) { return; } $this->fail('meses negativo'); } public function testAddMonths02() { try { $this->object->addMonths('y'); } catch (Exception $e) { return; } $this->fail('meses no numerico'); } public function testAddMonths03() { $d = new gvHidraTimestamp('2009-07-31'); $d->addMonths(2); $this->assertSame('2009-09-30',$d->format('Y-m-d'),'fecha añadiendo 2 meses - propia'); } public function testAddMonths04() { $d = new gvHidraTimestamp('2009-07-31'); $d->modify('+2 month'); $this->assertSame('2009-10-01',$d->format('Y-m-d'),'fecha añadiendo 2 meses - modify'); } public function testSubMonths01() { try { $this->object->subMonths('j'); } catch (Exception $e) { return; } $this->fail('mes no numerico'); } public function testSubMonths02() { $d = new gvHidraTimestamp('2009-07-31'); $d->subMonths(1); $this->assertSame('2009-06-30',$d->format('Y-m-d'),'fecha quitando 1 mes - propia'); $d->subMonths(-3); $this->assertSame('2009-03-30',$d->format('Y-m-d'),'fecha quitando -3 mes - propia'); } public function testSubMonths03() { $d = new gvHidraTimestamp('2009-07-31'); $d->modify('-1 month'); $this->assertSame('2009-07-01',$d->format('Y-m-d'),'fecha quitando 1 mes - modify'); } public function testAddYears01() { try { $this->object->addYears(-100); } catch (Exception $e) { return; } $this->fail('años negativo'); } public function testAddYears02() { try { $this->object->addYears('t'); } catch (Exception $e) { return; } $this->fail('años no numerico'); } public function testAddYears03() { $d = new gvHidraTimestamp('2008-02-29'); $d->addYears(1); $this->assertSame('2009-02-28',$d->format('Y-m-d'),'fecha añadiendo 1 año - propia'); } public function testAddYears04() { $d = new gvHidraTimestamp('2008-02-29'); $d->modify('+1 year'); $this->assertSame('2009-03-01',$d->format('Y-m-d'),'fecha añadiendo 1 año - modify'); } public function testSubYears01() { try { $this->object->subYears('x'); } catch (Exception $e) { return; } $this->fail('año no numerico'); } public function testSubYears02() { $d = new gvHidraTimestamp('2008-02-29'); $d->subYears(1); $this->assertSame('2007-02-28',$d->format('Y-m-d'),'fecha quitando 1 año - propia'); } public function testSubYears03() { $d = new gvHidraTimestamp('2008-02-29'); $d->modify('-1 year'); $this->assertSame('2007-03-01',$d->format('Y-m-d'),'fecha quitando 1 año - modify'); } public function testIsLeap() { $d = new gvHidraTimestamp('2008-02-29'); $this->assertEquals(true,$d->isLeap(),'2008 bisiesto'); $d->setDate(2009,2,20); $this->assertEquals(false,$d->isLeap(),'2009 no bisiesto'); $d->setDate(2000,2,20); $this->assertEquals(true,$d->isLeap(),'2000 bisiesto'); $d->setDate(1900,2,20); $this->assertEquals(false,$d->isLeap(),'1900 no bisiesto'); } } ?>