class DatePHP4LibTest in Date 6
Same name and namespace in other branches
- 5.2 tests/date_test.test \DatePHP4LibTest
Test Date Library
Hierarchy
- class \DatePHP4LibTest extends \DrupalTestCase
Expanded class hierarchy of DatePHP4LibTest
File
- tests/
date_test.test, line 5
View source
class DatePHP4LibTest extends DrupalTestCase {
function get_info() {
return array(
'name' => t('PHP 4 date library'),
'desc' => t('Test ability to create valid dates for years from 100 to 4000 with PHP 4 date library.'),
'group' => 'Date tests',
);
}
function testPHP4DateLibrary() {
include_once './' . drupal_get_path('module', 'date_php4') . '/date_php4.inc';
@set_time_limit(0);
$fail = false;
$t = date_mktime(0, 0, 0);
$this
->assertEqual(date_date('Y-m-d', $t), date('Y-m-d', $t), 'Input date_mktime(0, 0, 0), date() and date_date() should match');
$t = date_mktime(0, 0, 0, 6, 1, 2102, 0, 1);
$this
->assertEqual(date_date('Y-m-d', $t), '2102-06-01', 'Input date_mktime(0, 0, 0, 6, 1, 2102), result ' . date_date('Y-m-d', $t));
$t = date_mktime(0, 0, 0, 2, 1, 2102, 0, 1);
$this
->assertEqual(date_date('Y-m-d', $t), '2102-02-01', 'Input date_mktime(0, 0, 0, 2, 1, 2102), result ' . date_date('Y-m-d', $t));
$t = date_mktime(0, 0, 0, 10, 11, 1492, 0, 1);
$this
->assertEqual(date_date('D Y-m-d', $t), 'Fri 1492-10-11', 'Columbus landing Fri 1492-10-11 returned ' . date_date('D Y-m-d', $t));
$t = date_mktime(0, 0, 0, 2, 29, 1500, 0, 1);
$this
->assertEqual(date_date('Y-m-d', $t), '1500-02-29', 'julian leap years 1500-02-29 returned ' . date_date('Y-m-d', $t));
$t = date_mktime(0, 0, 0, 2, 29, 1700, 0, 1);
$this
->assertEqual(date_date('Y-m-d', $t), '1700-03-01', 'gregorian leap years 1700-03-01 returned ' . date_date('Y-m-d', $t));
$diff = date_mktime(0, 0, 0, 10, 15, 1582, 0, 1) - date_mktime(0, 0, 0, 10, 4, 1582, 0, 1);
$this
->assertEqual($diff, 3600 * 24, 'gregorian correction = ' . $diff / 3600 / 24 . ' days');
$this
->assertEqual(date_dow(15, 10, 1582), 5, "15 Oct 1582, dow should be 5, was " . date_dow(15, 10, 1582));
$this
->assertEqual(date_dow(4, 10, 1582), 4, "4 Oct 1582, dow should be 4, was " . date_dow(4, 10, 1582));
//Testing overflow;
$errors = array();
$t = date_mktime(0, 0, 0, 3, 33, 1965, 0, 1);
if (date_date('Y-m-d', $t) != '1965-04-02') {
$errors[] = 'day overflow 1 ' . date_date('Y-m-d', $t);
}
$t = date_mktime(0, 0, 0, 4, 33, 1971, 0, 1);
if (date_date('Y-m-d', $t) != '1971-05-03') {
$errors[] = 'day overflow 2 ' . date_date('Y-m-d', $t);
}
$t = date_mktime(0, 0, 0, 1, 60, 1965, 0, 1);
if (date_date('Y-m-d', $t) != '1965-03-01') {
$errors[] = 'day overflow 3 ' . date_date('Y-m-d', $t);
}
$t = date_mktime(0, 0, 0, 12, 32, 1965, 0, 1);
if (date_date('Y-m-d', $t) != '1966-01-01') {
$errors[] = 'day overflow 4 ' . date_date('Y-m-d', $t);
}
$t = date_mktime(0, 0, 0, 12, 63, 1965, 0, 1);
if (date_date('Y-m-d', $t) != '1966-02-01') {
$errors[] = 'day overflow 5 ' . date_date('Y-m-d', $t);
}
$t = date_mktime(0, 0, 0, 13, 3, 1965, 0, 1);
if (date_date('Y-m-d', $t) != '1966-01-03') {
$errors[] = 'mth overflow 1 ' . date_date('Y-m-d', $t);
}
$this
->assertEqual(sizeof($errors), 0, 'Testing day overflow to following month, ' . sizeof($errors) . ' failed');
//Testing 2-digit => 4-digit year conversion;
$errors = array();
if (date_year_digit_check(00) != 2000) {
$errors[] = "2-digit 2000";
}
if (date_year_digit_check(10) != 2010) {
$errors[] = "2-digit 2010";
}
if (date_year_digit_check(20) != 2020) {
$errors[] = "2-digit 2020";
}
if (date_year_digit_check(30) != 2030) {
$errors[] = "2-digit 2030";
}
if (date_year_digit_check(40) != 1940) {
$errors[] = "2-digit 1940";
}
if (date_year_digit_check(50) != 1950) {
$errors[] = "2-digit 1950";
}
if (date_year_digit_check(90) != 1990) {
$errors[] = "2-digit 1990";
}
$this
->assertEqual(sizeof($errors), 0, "Testing 2-digit to 4 digit year conversions, " . sizeof($errors) . ' failed');
// Test string formating
$fmt = '\\d\\a\\t\\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \\R\\F\\C822 r s t U w y Y z Z 2003';
$s1 = date($fmt, 0);
$s2 = date_date($fmt, 0);
$this
->assertEqual($s1, $s2, "Comparing all format strings between date() and date_date() for a zero timestamp");
flush();
// Test generation of dates outside 1901-2038
$errors = array();
$error = date_test_date(100, 1);
if (!empty($error)) {
$errors[] = $error;
}
for ($i = 100; --$i >= 0;) {
$y1 = 100 + rand(0, 1970 - 100);
$m = rand(1, 12);
$error = date_test_date($y1, $m);
if (!empty($error)) {
$errors[] = $error;
}
$y1 = 3000 - rand(0, 3000 - 1970);
$error = date_test_date($y1, $m);
if (!empty($error)) {
$errors[] = $error;
}
}
$passed = 201 - sizeof($errors);
$this
->assertEqual(sizeof($errors), 0, 'Tested 201 random dates outside 1901-2038 between 100 and 4000, ' . $passed . ' passed, ' . sizeof($errors) . ' failed');
//dsm($errors);
$start = 1960 + rand(0, 10);
$yrs = 12;
$i = 365.25 * 86400 * ($start - 1970);
$offset = 36000 + rand(10000, 60000);
$max = 365 * $yrs * 86400;
$lastyear = 0;
// we generate a timestamp, convert it to a date, and convert it back to a timestamp
// and check if the roundtrip broke the original timestamp value.
$cnt = 0;
$fail_roundtrip = 0;
for ($max += $i; $i < $max; $i += $offset) {
$ret = date_gmdate('m,d,Y,H,i,s', $i);
$arr = explode(',', $ret);
if ($lastyear != $arr[2]) {
$lastyear = $arr[2];
flush();
}
$newi = date_mktime($arr[3], $arr[4], $arr[5], $arr[0], $arr[1], $arr[2], 1, 1);
if ($i != $newi) {
$fail_roundtrip = 1;
$except_roundtrip[] = "{$i} (" . date_date('m,d,Y,H,i,s', $newi) . "), returned {$newi} ({$ret})" . date_date('m,d,Y,H,i,s', $newi);
}
$cnt += 1;
}
$passed = $cnt - sizeof($except_roundtrip);
//print_r($except_roundtrip);
$this
->assertEqual($fail_roundtrip, 0, "Tested " . number_format($cnt) . " random timestamps from " . $start . " to " . ($start + $yrs) . " for roundtrip from timestamp to date and back, " . number_format($passed) . " passed, " . number_format(sizeof($except_roundtrip)) . " failed");
}
}