Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 33 |
Autoload | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
90 | |
0.00% |
0 / 33 |
register($namespace, $suffix, $path) | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
registerSuffix($suffix, $path) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
autoload($class) | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 12 |
|||
matches($class, $namespace, $suffix) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
regex($namespace, $suffix) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
<?php | |
namespace Codeception\Util; | |
class Autoload { | |
protected static $registered = false; | |
protected static $map = array(); | |
/** | |
* A very basic yet useful autoloader, not compatible with PSR-0. | |
* It is used to autoload classes by namespaces with suffixes. | |
* | |
* Example: | |
* | |
* ``` php | |
* <?php | |
* // loads UserHelper in 'helpers/UserHelper.php' | |
* Autoload::register('app\Codeception\Helper','Helper', __DIR__.'/helpers/'); | |
* // loads UserHelper in 'helpers/UserHelper.php' | |
* Autoload::register('app\tests','Page', __DIR__.'/pageobjects/'); | |
* Autoload::register('app\tests','Controller', __DIR__.'/controllers/'); | |
* ?> | |
* ``` | |
* | |
* @param $namespace | |
* @param $suffix | |
* @param $path | |
*/ | |
public static function register($namespace, $suffix, $path) | |
{ | |
self::$map[self::regex($namespace, $suffix)] = $path; | |
if (!self::$registered) { | |
spl_autoload_register(array(__CLASS__, 'autoload')); | |
self::$registered = true; | |
} | |
} | |
/** | |
* Shortcut for Autoload::register for classes with empty namespaces. | |
* | |
* @param $suffix | |
* @param $path | |
*/ | |
public static function registerSuffix($suffix, $path) | |
{ | |
self::register('', $suffix, $path); | |
} | |
public static function autoload($class) | |
{ | |
foreach (self::$map as $regex => $path) { | |
if (!preg_match($regex, $class)) continue; | |
$className = str_replace('\\', '', substr($class, (int)strrpos($class, '\\'))); | |
$file = $path.DIRECTORY_SEPARATOR.$className.'.php'; | |
if (!file_exists($file)) continue; | |
include_once $file; | |
return true; | |
} | |
return false; | |
} | |
// is public for testing purposes | |
public static function matches($class, $namespace, $suffix) | |
{ | |
return (bool) preg_match(self::regex($namespace, $suffix), $class); | |
} | |
protected static function regex($namespace, $suffix) | |
{ | |
$namespace = str_replace("\\",'\\\\', $namespace); | |
return sprintf('~\\\\?%s\\\\\w*?%s$~', $namespace, $suffix); | |
} | |
} |