123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?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;
- /**
- * @author Nicolas Grekas <p@tchwork.com>
- * @author Dominic Tubach <dominic.tubach@to.com>
- */
- class ClockMock
- {
- private static $now;
- public static function withClockMock($enable = null)
- {
- if (null === $enable) {
- return null !== self::$now;
- }
- self::$now = is_numeric($enable) ? (float) $enable : ($enable ? microtime(true) : null);
- return null;
- }
- public static function time()
- {
- if (null === self::$now) {
- return \time();
- }
- return (int) self::$now;
- }
- public static function sleep($s)
- {
- if (null === self::$now) {
- return \sleep($s);
- }
- self::$now += (int) $s;
- return 0;
- }
- public static function usleep($us)
- {
- if (null === self::$now) {
- \usleep($us);
- } else {
- self::$now += $us / 1000000;
- }
- }
- public static function microtime($asFloat = false)
- {
- if (null === self::$now) {
- return \microtime($asFloat);
- }
- if ($asFloat) {
- return self::$now;
- }
- return sprintf('%0.6f00 %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 gmdate($format, $timestamp = null)
- {
- if (null === $timestamp) {
- $timestamp = self::time();
- }
- return \gmdate($format, $timestamp);
- }
- public static function register($class)
- {
- $self = \get_called_class();
- $mockedNs = [substr($class, 0, strrpos($class, '\\'))];
- if (0 < strpos($class, '\\Tests\\')) {
- $ns = str_replace('\\Tests\\', '\\', $class);
- $mockedNs[] = substr($ns, 0, strrpos($ns, '\\'));
- } elseif (0 === strpos($class, 'Tests\\')) {
- $mockedNs[] = substr($class, 6, strrpos($class, '\\') - 6);
- }
- foreach ($mockedNs as $ns) {
- if (\function_exists($ns.'\time')) {
- continue;
- }
- eval(<<<EOPHP
- namespace $ns;
- function time()
- {
- return \\$self::time();
- }
- function microtime(\$asFloat = false)
- {
- return \\$self::microtime(\$asFloat);
- }
- function sleep(\$s)
- {
- return \\$self::sleep(\$s);
- }
- function usleep(\$us)
- {
- \\$self::usleep(\$us);
- }
- function date(\$format, \$timestamp = null)
- {
- return \\$self::date(\$format, \$timestamp);
- }
- function gmdate(\$format, \$timestamp = null)
- {
- return \\$self::gmdate(\$format, \$timestamp);
- }
- EOPHP
- );
- }
- }
- }
|