<?php
Mock::Generate ('A_Datetime_Range');
Mock::Generate ('A_Datetime_Duration');
class DatetimeTest extends UnitTestCase {
function setUp() {
}
function TearDown() {
}
function testDatetime_parseDate() {
$datetime = new A_Datetime();
$datetime->parseDate('2001/12/20');
$this->assertEqual($datetime->getDate(), '2001-12-20');
$datetime->parseDate('12//20//2001');
$this->assertEqual($datetime->getDate(), '2001-12-20');
$datetime->parseDate('20.12.2001');
$this->assertEqual($datetime->getDate(), '2001-12-20');
$datetime->parseDate('12/20/01');
$this->assertEqual($datetime->getDate(), '2001-12-20');
$datetime->parseDate('12/20/01');
$this->assertEqual($datetime->getDate(), '2001-12-20');
$datetime->parseDate('1/2/01');
$this->assertEqual($datetime->getDate(), '2001-02-01');
$datetime->parseDate('020301');
$this->assertEqual($datetime->getDate(), '2001-03-02');
$datetime->parseDate('19990706');
$this->assertEqual($datetime->getDate(), '1999-07-06');
$datetime->setDayMonthOrder(false);
$datetime->parseDate('1/2/01');
$this->assertEqual($datetime->getDate(), '2001-01-02');
$datetime->parseDate('040501');
$this->assertEqual($datetime->getDate(), '2001-04-05');
}
function testDatetime_toString() {
$datetime = new A_Datetime();
$datetime->parseDate('2001/12/20 12:11:10');
// default format is 'U' for timestamp so check
$this->assertEqual("$datetime", '2001-12-20 12:11:10');
$datetime->setFormat('d.m.Y');
$this->assertEqual("$datetime", '20.12.2001');
}
function testDatetime_Getters() {
$datetime = new A_Datetime();
$datetime->parseDate('2008/12/20 21:11:10');
// default format is 'U' for timestamp so check
$this->assertTrue($datetime->getYear() == 2008);
$this->assertTrue($datetime->getMonth() == 12);
$this->assertTrue($datetime->getDay() == 20);
$this->assertTrue($datetime->getHour() == 21);
$this->assertTrue($datetime->getMinute() == 11);
$this->assertTrue($datetime->getSecond() == 10);
}
function testDatetime_getDate() {
$datetime = new A_Datetime();
$datetime->parseDate('2008-12-20 21:11:10');
$str = $datetime->getDate();
$this->assertEqual($str, '2008-12-20');
$str = $datetime->getDate(true);
$this->assertEqual($str, '2008-12-20 21:11:10');
}
function testDatetime_getTime() {
$datetime = new A_Datetime();
$str = $datetime->getTime();
$this->assertEqual($str, date('G:i'));
$str = $datetime->getTime(false, true);
$this->assertEqual($str, date('G:i:s'));
$str = $datetime->getTime(true);
$this->assertEqual($str, date('g:i a'));
$str = $datetime->getTime(true, true);
$this->assertEqual($str, date('g:i:s a'));
}
function testDatetime_BeforeAfter() {
$date1 = new A_Datetime();
$date1->parseDate('2008/12/20 21:11:10');
$date2 = new A_Datetime();
$date2->parseDate('2008/12/21');
$this->assertTrue($date1->isBefore($date2));
$date2->parseDate('2008/12/19');
$this->assertTrue($date1->isAfter($date2));
}
function testIsWithinRangeReturnsTrue() {
$date1 = new A_Datetime();
$date1->parseDate ('2008/12/22');
$date2 = new A_Datetime();
$date2->parseDate ('2008/12/21');
$date3 = new A_Datetime();
$date3->parseDate ('2008/12/23');
$range = new MockA_Datetime_Range();
$range->setReturnValue ('getStart', $date2->getTimestamp());
$range->setReturnValue ('getEnd', $date3->getTimestamp());
$this->assertTrue ($date1->isWithin ($range));
}
function testIsNotWithinRangeReturnsFalse() {
$date1 = new A_Datetime();
$date1->parseDate ('2008/12/20');
$date2 = new A_Datetime();
$date2->parseDate ('2008/12/21');
$date3 = new A_Datetime();
$date3->parseDate ('2008/12/23');
$range = new MockA_Datetime_Range();
$range->setReturnValue ('getStart', $date2->getTimestamp());
$range->setReturnValue ('getEnd', $date3->getTimestamp());
$this->assertFalse ($date1->isWithin ($range));
}
function testAddReturnsNewDate() {
$date = new A_Datetime();
$duration = new MockA_Datetime_Duration();
$duration->setReturnValue ('toString', '+1 day');
$duration->expectOnce ('setPositive');
$duration->expectOnce ('toString');
$date2 = $date->add ($duration);
$this->assertEqual ($date2->getTimestamp(), strtotime ('+1 day', $date->getTimestamp()));
}
function testRemoveReturnsNewDate() {
$date = new A_Datetime();
$duration = new MockA_Datetime_Duration();
$duration->setReturnValue ('toString', '-1 days');
$duration->expectOnce ('setNegative');
$duration->expectOnce ('toString');
$date2 = $date->remove ($duration);
$this->assertEqual ($date2->getTimestamp(), strtotime ('-1 day', $date->getTimestamp()));
}
function testArrayToString() {
$array1 = array('year'=>'2008','mon'=>'12','mday'=>'20','hours'=>'21','minutes'=>'11','seconds'=>'10');
$array2 = array('year'=>'2008','month'=>'12','day'=>'20','hour'=>'21','minute'=>'11','second'=>'10');
$array3 = array('year'=>'2009','month'=>'11','day'=>'10','hour'=>'01','minute'=>'21','second'=>'11');
$datetime = new A_Datetime($array2);
$str = $datetime->getDate(true);
$this->assertEqual($str, '2008-12-20 21:11:10');
$str = $datetime->arrayToString($array1);
$this->assertEqual($str, '2008-12-20 21:11:10');
$str = $datetime->arrayToString($array2);
$this->assertEqual($str, '2008-12-20 21:11:10');
}
}
|