diff options
Diffstat (limited to 'tests/unit/Prado.php')
-rw-r--r-- | tests/unit/Prado.php | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/unit/Prado.php b/tests/unit/Prado.php new file mode 100644 index 00000000..aebcfcd0 --- /dev/null +++ b/tests/unit/Prado.php @@ -0,0 +1,123 @@ +<?php + +require_once 'PradoBase.php'; + +/** + * Extended Prado class which allows to redefine application instances and aliases. + */ +class Prado extends PradoBase { + + private static $_application = null; + private static $_aliases = array('System'=>PRADO_DIR); + private static $_usings=array(); + + public static function setApplication($application) { + self::$_application = $application; + } + + public static function getApplication() { + return self::$_application; + } + + public static function using($namespace) + { + if(isset(self::$_usings[$namespace]) || class_exists($namespace,false)) + return; + if(($pos=strrpos($namespace,'.'))===false) // a class name + { + try + { + include_once($namespace.self::CLASS_FILE_EXT); + } + catch(Exception $e) + { + if(!class_exists($namespace,false)) + throw new TInvalidOperationException('prado_component_unknown',$namespace); + else + throw $e; + } + } + else if(($path=self::getPathOfNamespace($namespace,self::CLASS_FILE_EXT))!==null) + { + $className=substr($namespace,$pos+1); + if($className==='*') // a directory + { + self::$_usings[$namespace]=$path; + set_include_path(get_include_path().PATH_SEPARATOR.$path); + } + else // a file + { + self::$_usings[$namespace]=$path; + if(!class_exists($className,false)) + { + try + { + include_once($path); + } + catch(Exception $e) + { + if(!class_exists($className,false)) + throw new TInvalidOperationException('prado_component_unknown',$className); + else + throw $e; + } + } + } + } + else + throw new TInvalidDataValueException('prado_using_invalid',$namespace); + } + + public static function getPathOfNamespace($namespace,$ext='') + { + if(isset(self::$_usings[$namespace])) + return self::$_usings[$namespace]; + else if(isset(self::$_aliases[$namespace])) + return self::$_aliases[$namespace]; + else + { + $segs=explode('.',$namespace); + $alias=array_shift($segs); + if(($file=array_pop($segs))!==null && ($root=self::getPathOfAlias($alias))!==null) + return rtrim($root.'/'.implode('/',$segs),'/').(($file==='*')?'':'/'.$file.$ext); + else + return null; + } + } + + public static function getPathOfAlias($alias) + { + return isset(self::$_aliases[$alias])?self::$_aliases[$alias]:null; + } + + protected static function getPathAliases() + { + return self::$_aliases; + } + + public static function setPathOfAlias($alias, $path) { + if(($rp=realpath($path))!==false && is_dir($rp)) { + if(strpos($alias,'.') === false) + self::$_aliases[$alias] = $rp; + else + throw new TInvalidDataValueException('prado_aliasname_invalid',$alias); + } + else + throw new TInvalidDataValueException('prado_alias_invalid',$alias,$path); + } + + + /*public static function setPathOfAlias($alias, $path) { + if(($rp=realpath($path)) !== false && is_dir($rp)) { + if(strpos($alias,'.') === false) { + self::$_aliases[$alias]=$rp; + } else { + throw new TInvalidDataValueException('prado_aliasname_invalid', $alias); + } + } else { + throw new TInvalidDataValueException('prado_alias_invalid', $alias, $path); + } + }*/ +} + +?>
\ No newline at end of file |