From e8ba79adb9f6e81f3417bbde2a0635277899e69c Mon Sep 17 00:00:00 2001 From: Dominic Tubach Date: Sat, 7 Jul 2018 17:51:26 +0200 Subject: [PATCH] [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. --- src/Symfony/Bridge/PhpUnit/ClockMock.php | 15 +++++ .../Bridge/PhpUnit/Tests/ClockMockTest.php | 65 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/Symfony/Bridge/PhpUnit/Tests/ClockMockTest.php diff --git a/src/Symfony/Bridge/PhpUnit/ClockMock.php b/src/Symfony/Bridge/PhpUnit/ClockMock.php index 40ed8ecc0e454..50bea0bd49ef2 100644 --- a/src/Symfony/Bridge/PhpUnit/ClockMock.php +++ b/src/Symfony/Bridge/PhpUnit/ClockMock.php @@ -13,6 +13,7 @@ /** * @author Nicolas Grekas + * @author Dominic Tubach */ class ClockMock { @@ -69,6 +70,15 @@ public static function microtime($asFloat = false) 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 ); } diff --git a/src/Symfony/Bridge/PhpUnit/Tests/ClockMockTest.php b/src/Symfony/Bridge/PhpUnit/Tests/ClockMockTest.php new file mode 100644 index 0000000000000..01a6f39775958 --- /dev/null +++ b/src/Symfony/Bridge/PhpUnit/Tests/ClockMockTest.php @@ -0,0 +1,65 @@ + + * + * 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 + * + * @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')); + } +}