Issue #3156878 by alexpott, andypost: \Drupal\Component\Datetime\DateTimePlus should pass correct parameter types to checkdate()
parent
50e0c6f2b4
commit
dc21aa7c12
|
@ -624,11 +624,10 @@ class DateTimePlus {
|
|||
$valid_date = FALSE;
|
||||
$valid_time = TRUE;
|
||||
// Check for a valid date using checkdate(). Only values that
|
||||
// meet that test are valid.
|
||||
if (array_key_exists('year', $array) && array_key_exists('month', $array) && array_key_exists('day', $array)) {
|
||||
if (@checkdate($array['month'], $array['day'], $array['year'])) {
|
||||
$valid_date = TRUE;
|
||||
}
|
||||
// meet that test are valid. An empty value, either a string or a 0, is not
|
||||
// a valid value.
|
||||
if (!empty($array['year']) && !empty($array['month']) && !empty($array['day'])) {
|
||||
$valid_date = checkdate($array['month'], $array['day'], $array['year']);
|
||||
}
|
||||
// Testing for valid time is reversed. Missing time is OK,
|
||||
// but incorrect values are not.
|
||||
|
|
|
@ -112,6 +112,23 @@ class DateTimePlusTest extends TestCase {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests DateTimePlus::checkArray().
|
||||
*
|
||||
* @param mixed $array
|
||||
* Input argument for DateTimePlus::checkArray().
|
||||
* @param bool $expected
|
||||
* The expected result of DateTimePlus::checkArray().
|
||||
*
|
||||
* @dataProvider providerTestCheckArray
|
||||
*/
|
||||
public function testCheckArray(array $array, $expected) {
|
||||
$this->assertSame(
|
||||
$expected,
|
||||
DateTimePlus::checkArray($array)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test creating dates from timestamps, and manipulating timezones.
|
||||
*
|
||||
|
@ -442,6 +459,30 @@ class DateTimePlusTest extends TestCase {
|
|||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testCheckArray.
|
||||
*
|
||||
* @return array
|
||||
* An array of arrays, each containing:
|
||||
* - 'array' - Input for DateTimePlus::checkArray().
|
||||
* - 'expected' - Expected output for DateTimePlus::checkArray().
|
||||
*
|
||||
* @see testCheckArray
|
||||
*/
|
||||
public function providerTestCheckArray() {
|
||||
return [
|
||||
'Date array, date only' => [['year' => 2010, 'month' => 2, 'day' => 28], TRUE],
|
||||
'Date array with hour' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10], TRUE],
|
||||
'One year larger than the documented upper limit of checkdate()' => [['year' => 32768, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||
'One year smaller than the documented lower limit of checkdate()' => [['year' => 0, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||
'Invalid month from date array' => [['year' => 2010, 'month' => 27, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||
'Invalid hour from date array' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 80, 'minute' => 0, 'second' => 0], FALSE],
|
||||
'Invalid minute from date array.' => [['year' => 2010, 'month' => 7, 'day' => 8, 'hour' => 8, 'minute' => 88, 'second' => 0], FALSE],
|
||||
'Missing day' => [['year' => 2059, 'month' => 1, 'second' => 1], FALSE],
|
||||
'Zero day' => [['year' => 2059, 'month' => 1, 'day' => 0], FALSE],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides data for testDateTimezone.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue