<?php namespace CodeIgniter; use CIUnitTestCase; use Config\Services as ConfigServices; /** * Services class for testing. */ class Services { /** * Mock objects for testing which are returned if exist. * * @var array */ static protected $mocks = []; //-------------------------------------------------------------------- /** * Reset shared instances and mocks for testing. */ public static function reset() { static::$mocks = []; CIUnitTestCase::setPrivateProperty(ConfigServices::class, 'instances', []); } //-------------------------------------------------------------------- /** * Inject mock object for testing. * * @param string $name * @param $mock */ public static function injectMock(string $name, $mock) { $name = strtolower($name); static::$mocks[$name] = $mock; } //-------------------------------------------------------------------- /** * Returns a service * * @param string $name * @param array $arguments */ public static function __callStatic(string $name, array $arguments) { $name = strtolower($name); // Returns mock if exists if (isset(static::$mocks[$name])) { return static::$mocks[$name]; } if (method_exists(ConfigServices::class, $name)) { return ConfigServices::$name(...$arguments); } } //-------------------------------------------------------------------- }