This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
lnkohana/modules/unittest/classes/Kohana/Unittest/Helpers.php

170 lines
3.7 KiB
PHP
Raw Normal View History

2016-05-01 10:50:24 +00:00
<?php defined('SYSPATH') or die('No direct script access.');
2013-04-22 04:09:50 +00:00
/**
* Unit testing helpers
*/
class Kohana_Unittest_Helpers {
/**
* Static variable used to work out whether we have an internet
* connection
* @see has_internet
* @var boolean
*/
static protected $_has_internet = NULL;
/**
* Check for internet connectivity
*
* @return boolean Whether an internet connection is available
*/
public static function has_internet()
{
if ( ! isset(self::$_has_internet))
{
// The @ operator is used here to avoid DNS errors when there is no connection.
$sock = @fsockopen("www.google.com", 80, $errno, $errstr, 1);
self::$_has_internet = (bool) $sock ? TRUE : FALSE;
}
return self::$_has_internet;
}
/**
* Helper function which replaces the "/" to OS-specific delimiter
*
* @param string $path
* @return string
*/
static public function dir_separator($path)
{
return str_replace('/', DIRECTORY_SEPARATOR, $path);
}
/**
* Removes all cache files from the kohana cache dir
*
* @return void
*/
static public function clean_cache_dir()
{
$cache_dir = opendir(Kohana::$cache_dir);
while ($dir = readdir($cache_dir))
{
// Cache files are split into directories based on first two characters of hash
if ($dir[0] !== '.' AND strlen($dir) === 2)
{
$dir = self::dir_separator(Kohana::$cache_dir.'/'.$dir.'/');
$cache = opendir($dir);
while ($file = readdir($cache))
{
if ($file[0] !== '.')
{
unlink($dir.$file);
}
}
closedir($cache);
rmdir($dir);
}
}
closedir($cache_dir);
}
/**
* Backup of the environment variables
* @see set_environment
* @var array
*/
protected $_environment_backup = array();
/**
* Allows easy setting & backing up of enviroment config
*
* Option types are checked in the following order:
*
* * Server Var
* * Static Variable
* * Config option
*
* @param array $environment List of environment to set
*/
public function set_environment(array $environment)
{
if ( ! count($environment))
return FALSE;
foreach ($environment as $option => $value)
{
$backup_needed = ! array_key_exists($option, $this->_environment_backup);
// Handle changing superglobals
if (in_array($option, array('_GET', '_POST', '_SERVER', '_FILES')))
{
// For some reason we need to do this in order to change the superglobals
global $$option;
if ($backup_needed)
{
$this->_environment_backup[$option] = $$option;
}
// PHPUnit makes a backup of superglobals automatically
$$option = $value;
}
// If this is a static property i.e. Html::$windowed_urls
elseif (strpos($option, '::$') !== FALSE)
{
list($class, $var) = explode('::$', $option, 2);
$class = new ReflectionClass($class);
if ($backup_needed)
{
$this->_environment_backup[$option] = $class->getStaticPropertyValue($var);
}
$class->setStaticPropertyValue($var, $value);
}
// If this is an environment variable
elseif (preg_match('/^[A-Z_-]+$/', $option) OR isset($_SERVER[$option]))
{
if ($backup_needed)
{
$this->_environment_backup[$option] = isset($_SERVER[$option]) ? $_SERVER[$option] : '';
}
$_SERVER[$option] = $value;
}
// Else we assume this is a config option
else
{
if ($backup_needed)
{
$this->_environment_backup[$option] = Kohana::$config->load($option);
}
list($group, $var) = explode('.', $option, 2);
Kohana::$config->load($group)->set($var, $value);
}
}
}
/**
* Restores the environment to the original state
*
* @chainable
* @return Kohana_Unittest_Helpers $this
*/
public function restore_environment()
{
$this->set_environment($this->_environment_backup);
}
}