[Bridge/PhpUnit] Mock date() in ClockMock

As to the PHP documentation date() uses the value of time() as timestamp
if none is given. date() has to be mocked in ClockMock as well for this
still being true, otherwise \time() is used as default.
This commit is contained in:
Dominic Tubach 2018-07-07 17:51:26 +02:00
parent 3cfdc9e9d7
commit e8ba79adb9
2 changed files with 80 additions and 0 deletions

View File

@ -13,6 +13,7 @@ namespace Symfony\Bridge\PhpUnit;
/**
* @author Nicolas Grekas <p@tchwork.com>
* @author Dominic Tubach <dominic.tubach@to.com>
*/
class ClockMock
{
@ -69,6 +70,15 @@ class ClockMock
return sprintf('%0.6f %d', self::$now - (int) self::$now, (int) self::$now);
}
public static function date($format, $timestamp = null)
{
if (null === $timestamp) {
$timestamp = self::time();
}
return \date($format, $timestamp);
}
public static function register($class)
{
$self = get_called_class();
@ -107,6 +117,11 @@ function usleep(\$us)
return \\$self::usleep(\$us);
}
function date(\$format, \$timestamp = null)
{
return \\$self::date(\$format, \$timestamp);
}
EOPHP
);
}

View File

@ -0,0 +1,65 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bridge\PhpUnit\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\PhpUnit\ClockMock;
/**
* @author Dominic Tubach <dominic.tubach@to.com>
*
* @covers \Symfony\Bridge\PhpUnit\ClockMock
*/
class ClockMockTest extends TestCase
{
public static function setUpBeforeClass()
{
ClockMock::register(__CLASS__);
}
protected function setUp()
{
ClockMock::withClockMock(1234567890.125);
}
public function testTime()
{
$this->assertSame(1234567890, time());
}
public function testSleep()
{
sleep(2);
$this->assertSame(1234567892, time());
}
public function testMicrotime()
{
$this->assertSame('0.125000 1234567890', microtime());
}
public function testMicrotimeAsFloat()
{
$this->assertSame(1234567890.125, microtime(true));
}
public function testUsleep()
{
usleep(2);
$this->assertSame(1234567890.125002, microtime(true));
}
public function testDate()
{
$this->assertSame('1234567890', date('U'));
}
}