ajout SAE PHP 19/20 Meilleure note de la promo
This commit is contained in:
118
SAE2.02_Application_WEB/tests/mocks/autoloader.php
Normal file
118
SAE2.02_Application_WEB/tests/mocks/autoloader.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
// This autoloader provide convenient way to working with mock object
|
||||
// make the test looks natural. This autoloader support cascade file loading as well
|
||||
// within mocks directory.
|
||||
//
|
||||
// Prototype :
|
||||
//
|
||||
// $mock_table = new Mock_Libraries_Table(); // Will load ./mocks/libraries/table.php
|
||||
// $mock_database_driver = new Mock_Database_Driver(); // Will load ./mocks/database/driver.php
|
||||
// and so on...
|
||||
function autoload($class)
|
||||
{
|
||||
$dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
|
||||
|
||||
$ci_core = array(
|
||||
'Benchmark',
|
||||
'Config',
|
||||
'Controller',
|
||||
'Exceptions',
|
||||
'Hooks',
|
||||
'Input',
|
||||
'Lang',
|
||||
'Loader',
|
||||
'Log',
|
||||
'Model',
|
||||
'Output',
|
||||
'Router',
|
||||
'Security',
|
||||
'URI',
|
||||
'Utf8'
|
||||
);
|
||||
|
||||
$ci_libraries = array(
|
||||
'Calendar',
|
||||
'Driver_Library',
|
||||
'Email',
|
||||
'Encrypt',
|
||||
'Encryption',
|
||||
'Form_validation',
|
||||
'Ftp',
|
||||
'Image_lib',
|
||||
'Javascript',
|
||||
'Migration',
|
||||
'Pagination',
|
||||
'Parser',
|
||||
'Profiler',
|
||||
'Table',
|
||||
'Trackback',
|
||||
'Typography',
|
||||
'Unit_test',
|
||||
'Upload',
|
||||
'User_agent',
|
||||
'Xmlrpc',
|
||||
'Zip'
|
||||
);
|
||||
|
||||
$ci_drivers = array('Session', 'Cache');
|
||||
|
||||
if (strpos($class, 'Mock_') === 0)
|
||||
{
|
||||
$class = strtolower(str_replace(array('Mock_', '_'), array('', DIRECTORY_SEPARATOR), $class));
|
||||
}
|
||||
elseif (strpos($class, 'CI_') === 0)
|
||||
{
|
||||
$subclass = substr($class, 3);
|
||||
|
||||
if (in_array($subclass, $ci_core))
|
||||
{
|
||||
$dir = SYSTEM_PATH.'core'.DIRECTORY_SEPARATOR;
|
||||
$class = $subclass;
|
||||
}
|
||||
elseif (in_array($subclass, $ci_libraries))
|
||||
{
|
||||
$dir = SYSTEM_PATH.'libraries'.DIRECTORY_SEPARATOR;
|
||||
$class = ($subclass === 'Driver_Library') ? 'Driver' : $subclass;
|
||||
}
|
||||
elseif (in_array($subclass, $ci_drivers))
|
||||
{
|
||||
$dir = SYSTEM_PATH.'libraries'.DIRECTORY_SEPARATOR.$subclass.DIRECTORY_SEPARATOR;
|
||||
$class = $subclass;
|
||||
}
|
||||
elseif (in_array(($parent = strtok($subclass, '_')), $ci_drivers)) {
|
||||
$dir = SYSTEM_PATH.'libraries'.DIRECTORY_SEPARATOR.$parent.DIRECTORY_SEPARATOR.'drivers'.DIRECTORY_SEPARATOR;
|
||||
$class = $subclass;
|
||||
}
|
||||
elseif (preg_match('/^CI_DB_(.+)_(.+)_(driver|forge|result|utility)$/', $class, $m) && count($m) === 4)
|
||||
{
|
||||
$driver_path = SYSTEM_PATH.'database'.DIRECTORY_SEPARATOR.'drivers'.DIRECTORY_SEPARATOR;
|
||||
$dir = $driver_path.$m[1].DIRECTORY_SEPARATOR.'subdrivers'.DIRECTORY_SEPARATOR;
|
||||
$file = $dir.$m[1].'_'.$m[2].'_'.$m[3].'.php';
|
||||
}
|
||||
elseif (preg_match('/^CI_DB_(.+)_(driver|forge|result|utility)$/', $class, $m) && count($m) === 3)
|
||||
{
|
||||
$driver_path = SYSTEM_PATH.'database'.DIRECTORY_SEPARATOR.'drivers'.DIRECTORY_SEPARATOR;
|
||||
$dir = $driver_path.$m[1].DIRECTORY_SEPARATOR;
|
||||
$file = $dir.$m[1].'_'.$m[2].'.php';
|
||||
}
|
||||
elseif (strpos($class, 'CI_DB') === 0)
|
||||
{
|
||||
$dir = SYSTEM_PATH.'database'.DIRECTORY_SEPARATOR;
|
||||
$file = $dir.str_replace(array('CI_DB','active_record'), array('DB', 'active_rec'), $subclass).'.php';
|
||||
}
|
||||
else
|
||||
{
|
||||
$class = strtolower($class);
|
||||
}
|
||||
}
|
||||
|
||||
$file = isset($file) ? $file : $dir.$class.'.php';
|
||||
|
||||
if ( ! file_exists($file))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
include_once($file);
|
||||
}
|
||||
401
SAE2.02_Application_WEB/tests/mocks/ci_testcase.php
Normal file
401
SAE2.02_Application_WEB/tests/mocks/ci_testcase.php
Normal file
@@ -0,0 +1,401 @@
|
||||
<?php
|
||||
|
||||
#[AllowDynamicProperties]
|
||||
class CI_TestCase extends \PHPUnit\Framework\TestCase {
|
||||
|
||||
public $ci_vfs_root;
|
||||
public $ci_app_root;
|
||||
public $ci_base_root;
|
||||
public $ci_readonly_dir;
|
||||
protected $ci_instance;
|
||||
protected static $ci_test_instance;
|
||||
|
||||
private $global_map = array(
|
||||
'benchmark' => 'bm',
|
||||
'config' => 'cfg',
|
||||
'hooks' => 'ext',
|
||||
'utf8' => 'uni',
|
||||
'router' => 'rtr',
|
||||
'output' => 'out',
|
||||
'security' => 'sec',
|
||||
'input' => 'in',
|
||||
'lang' => 'lang',
|
||||
'loader' => 'load',
|
||||
'model' => 'model'
|
||||
);
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function __construct($name = null, array $data = array(), $dataName = '')
|
||||
{
|
||||
parent::__construct($name, $data, $dataName);
|
||||
$this->ci_instance = new stdClass();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
// Setup VFS with base directories
|
||||
$this->ci_vfs_root = vfsStream::setup('');
|
||||
$this->ci_app_root = vfsStream::newDirectory('application')->at($this->ci_vfs_root);
|
||||
$this->ci_base_root = vfsStream::newDirectory('system')->at($this->ci_vfs_root);
|
||||
$this->ci_view_root = vfsStream::newDirectory('views')->at($this->ci_app_root);
|
||||
$this->ci_readonly_dir = vfsStream::newDirectory('readonly', 555)->at($this->ci_app_root);
|
||||
|
||||
if (method_exists($this, 'set_up'))
|
||||
{
|
||||
$this->set_up();
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
if (method_exists($this, 'tear_down'))
|
||||
{
|
||||
$this->tear_down();
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public static function instance()
|
||||
{
|
||||
return self::$ci_test_instance;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function ci_set_config($key = '', $val = '')
|
||||
{
|
||||
// Add test config
|
||||
if ( ! isset($this->ci_instance->config))
|
||||
{
|
||||
$this->ci_instance->config = new CI_TestConfig();
|
||||
}
|
||||
|
||||
// Empty key means just do setup above
|
||||
if ($key === '')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_array($key))
|
||||
{
|
||||
$this->ci_instance->config->config = $key;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->ci_instance->config->config[$key] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function ci_get_config()
|
||||
{
|
||||
return isset($this->ci_instance->config) ? $this->ci_instance->config->config : array();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function ci_instance($obj = FALSE)
|
||||
{
|
||||
if ( ! is_object($obj))
|
||||
{
|
||||
return $this->ci_instance;
|
||||
}
|
||||
|
||||
$this->ci_instance = $obj;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function ci_instance_var($name, $obj = FALSE)
|
||||
{
|
||||
if ( ! is_object($obj))
|
||||
{
|
||||
return $this->ci_instance->$name;
|
||||
}
|
||||
|
||||
$this->ci_instance->$name =& $obj;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Grab a core class
|
||||
*
|
||||
* Loads the correct core class without extensions
|
||||
* and returns a reference to the class name in the
|
||||
* globals array with the correct key. This way the
|
||||
* test can modify the variable it assigns to and
|
||||
* still maintain the global.
|
||||
*/
|
||||
public function &ci_core_class($name)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
|
||||
if (isset($this->global_map[$name]))
|
||||
{
|
||||
$class_name = ucfirst($name);
|
||||
$global_name = $this->global_map[$name];
|
||||
}
|
||||
elseif (in_array($name, $this->global_map))
|
||||
{
|
||||
$class_name = ucfirst(array_search($name, $this->global_map));
|
||||
$global_name = $name;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception('Not a valid core class.');
|
||||
}
|
||||
|
||||
if ( ! class_exists('CI_'.$class_name))
|
||||
{
|
||||
require_once SYSTEM_PATH.'core/'.$class_name.'.php';
|
||||
}
|
||||
|
||||
$GLOBALS[strtoupper($global_name)] = 'CI_'.$class_name;
|
||||
return $GLOBALS[strtoupper($global_name)];
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// convenience function for global mocks
|
||||
public function ci_set_core_class($name, $obj)
|
||||
{
|
||||
$orig =& $this->ci_core_class($name);
|
||||
$orig = $obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create VFS directory
|
||||
*
|
||||
* @param string Directory name
|
||||
* @param object Optional root to create in
|
||||
* @return object New directory object
|
||||
*/
|
||||
public function ci_vfs_mkdir($name, $root = NULL)
|
||||
{
|
||||
// Check for root
|
||||
if ( ! $root)
|
||||
{
|
||||
$root = $this->ci_vfs_root;
|
||||
}
|
||||
|
||||
// Return new directory object
|
||||
return vfsStream::newDirectory($name)->at($root);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Create VFS content
|
||||
*
|
||||
* @param string File name
|
||||
* @param string File content
|
||||
* @param object VFS directory object
|
||||
* @param mixed Optional subdirectory path or array of subs
|
||||
* @return void
|
||||
*/
|
||||
public function ci_vfs_create($file, $content = '', $root = NULL, $path = NULL)
|
||||
{
|
||||
// Check for array
|
||||
if (is_array($file))
|
||||
{
|
||||
foreach ($file as $name => $content)
|
||||
{
|
||||
$this->ci_vfs_create($name, $content, $root, $path);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Assert .php extension if none given
|
||||
if (pathinfo($file, PATHINFO_EXTENSION) == '')
|
||||
{
|
||||
$file .= '.php';
|
||||
}
|
||||
|
||||
// Build content
|
||||
$tree = array($file => $content);
|
||||
|
||||
// Check for path
|
||||
$subs = array();
|
||||
if ($path)
|
||||
{
|
||||
// Explode if not array
|
||||
$subs = is_array($path) ? $path : explode('/', trim($path, '/'));
|
||||
}
|
||||
|
||||
// Check for root
|
||||
if ( ! $root)
|
||||
{
|
||||
// Use base VFS root
|
||||
$root = $this->ci_vfs_root;
|
||||
}
|
||||
|
||||
// Handle subdirectories
|
||||
while (($dir = array_shift($subs)))
|
||||
{
|
||||
// See if subdir exists under current root
|
||||
$dir_root = $root->getChild($dir);
|
||||
if ($dir_root)
|
||||
{
|
||||
// Yes - recurse into subdir
|
||||
$root = $dir_root;
|
||||
}
|
||||
else
|
||||
{
|
||||
// No - put subdirectory back and quit
|
||||
array_unshift($subs, $dir);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Create any remaining subdirectories
|
||||
if ($subs)
|
||||
{
|
||||
foreach (array_reverse($subs) as $dir)
|
||||
{
|
||||
// Wrap content in subdirectory for creation
|
||||
$tree = array($dir => $tree);
|
||||
}
|
||||
}
|
||||
|
||||
// Create tree
|
||||
vfsStream::create($tree, $root);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Clone a real file into VFS
|
||||
*
|
||||
* @param string Path from base directory
|
||||
* @return bool TRUE on success, otherwise FALSE
|
||||
*/
|
||||
public function ci_vfs_clone($path, $dest='')
|
||||
{
|
||||
// Check for array
|
||||
if (is_array($path))
|
||||
{
|
||||
foreach ($path as $file)
|
||||
{
|
||||
$this->ci_vfs_clone($file, $dest);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Get real file contents
|
||||
$content = file_get_contents(PROJECT_BASE.$path);
|
||||
if ($content === FALSE)
|
||||
{
|
||||
// Couldn't find file to clone
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (empty($dest))
|
||||
{
|
||||
$dest = dirname($path);
|
||||
}
|
||||
|
||||
$this->ci_vfs_create(basename($path), $content, NULL, $dest);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Helper to get a VFS URL path
|
||||
*
|
||||
* @param string Path
|
||||
* @param string Optional base path
|
||||
* @return string Path URL
|
||||
*/
|
||||
public function ci_vfs_path($path, $base = '')
|
||||
{
|
||||
// Check for base path
|
||||
if ($base)
|
||||
{
|
||||
// Prepend to path
|
||||
$path = rtrim($base, '/').'/'.ltrim($path, '/');
|
||||
|
||||
// Is it already in URL form?
|
||||
if (strpos($path, '://') !== FALSE)
|
||||
{
|
||||
// Done - return path
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
|
||||
// Trim leading slash and return URL
|
||||
return vfsStream::url(ltrim($path, '/'));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Internals
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Overwrite runBare
|
||||
*
|
||||
* PHPUnit instantiates the test classes before
|
||||
* running them individually. So right before a test
|
||||
* runs we set our instance. Normally this step would
|
||||
* happen in setUp, but someone is bound to forget to
|
||||
* call the parent method and debugging this is no fun.
|
||||
*/
|
||||
public function runBare()
|
||||
{
|
||||
self::$ci_test_instance = $this;
|
||||
parent::runBare();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function helper($name)
|
||||
{
|
||||
require_once(SYSTEM_PATH.'helpers/'.$name.'_helper.php');
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
public function lang($name)
|
||||
{
|
||||
require(SYSTEM_PATH.'language/english/'.$name.'_lang.php');
|
||||
return $lang;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* This overload is useful to create a stub, that need to have a specific method.
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
if ($this->{$method} instanceof Closure)
|
||||
{
|
||||
return call_user_func_array($this->{$method},$args);
|
||||
}
|
||||
|
||||
return parent::__call($method, $args);
|
||||
}
|
||||
|
||||
public function setExpectedException($exception_class, $exception_message = '', $exception_code = null)
|
||||
{
|
||||
$use_expect_exception = method_exists($this, 'expectException');
|
||||
|
||||
if ($use_expect_exception)
|
||||
{
|
||||
$this->expectException($exception_class);
|
||||
$exception_message !== '' && $this->expectExceptionMessage($exception_message);
|
||||
}
|
||||
else
|
||||
{
|
||||
parent::setExpectedException($exception_class, $exception_message, $exception_code);
|
||||
}
|
||||
}
|
||||
}
|
||||
20
SAE2.02_Application_WEB/tests/mocks/ci_testconfig.php
Normal file
20
SAE2.02_Application_WEB/tests/mocks/ci_testconfig.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
class CI_TestConfig extends CI_Config {
|
||||
|
||||
public $config = array();
|
||||
public $_config_paths = array(APPPATH);
|
||||
public $loaded = array();
|
||||
|
||||
public function item($key, $index = '')
|
||||
{
|
||||
return isset($this->config[$key]) ? $this->config[$key] : FALSE;
|
||||
}
|
||||
|
||||
public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
|
||||
{
|
||||
$this->loaded[] = $file;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
153
SAE2.02_Application_WEB/tests/mocks/core/common.php
Normal file
153
SAE2.02_Application_WEB/tests/mocks/core/common.php
Normal file
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
// Set up the global CI functions in their most minimal core representation
|
||||
|
||||
if ( ! function_exists('get_instance'))
|
||||
{
|
||||
function &get_instance()
|
||||
{
|
||||
$test = CI_TestCase::instance();
|
||||
$test = $test->ci_instance();
|
||||
return $test;
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
if ( ! function_exists('get_config'))
|
||||
{
|
||||
function &get_config()
|
||||
{
|
||||
$test = CI_TestCase::instance();
|
||||
$config = $test->ci_get_config();
|
||||
return $config;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('config_item'))
|
||||
{
|
||||
function config_item($item)
|
||||
{
|
||||
$config =& get_config();
|
||||
|
||||
if ( ! isset($config[$item]))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return $config[$item];
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('get_mimes'))
|
||||
{
|
||||
/**
|
||||
* Returns the MIME types array from config/mimes.php
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function &get_mimes()
|
||||
{
|
||||
static $_mimes = array();
|
||||
|
||||
if (empty($_mimes))
|
||||
{
|
||||
$path = realpath(PROJECT_BASE.'application/config/mimes.php');
|
||||
if (is_file($path))
|
||||
{
|
||||
$_mimes = include($path);
|
||||
}
|
||||
}
|
||||
|
||||
return $_mimes;
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
if ( ! function_exists('load_class'))
|
||||
{
|
||||
function load_class($class, $directory = 'libraries', $prefix = 'CI_')
|
||||
{
|
||||
if ($directory !== 'core' OR $prefix !== 'CI_')
|
||||
{
|
||||
throw new Exception('Not Implemented: Non-core load_class()');
|
||||
}
|
||||
|
||||
$test = CI_TestCase::instance();
|
||||
|
||||
$obj =& $test->ci_core_class($class);
|
||||
|
||||
if (is_string($obj))
|
||||
{
|
||||
throw new Exception('Bad Isolation: Use ci_set_core_class to set '.$class);
|
||||
}
|
||||
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// Clean up error messages
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
if ( ! function_exists('show_error'))
|
||||
{
|
||||
function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
|
||||
{
|
||||
throw new RuntimeException('CI Error: '.$message);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('show_404'))
|
||||
{
|
||||
function show_404($page = '', $log_error = TRUE)
|
||||
{
|
||||
throw new RuntimeException('CI Error: 404');
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('_exception_handler'))
|
||||
{
|
||||
function _exception_handler($severity, $message, $filepath, $line)
|
||||
{
|
||||
throw new RuntimeException('CI Exception: '.$message.' | '.$filepath.' | '.$line);
|
||||
}
|
||||
}
|
||||
|
||||
// We assume a few things about our environment ...
|
||||
// --------------------------------------------------------------------
|
||||
if ( ! function_exists('is_loaded'))
|
||||
{
|
||||
function &is_loaded()
|
||||
{
|
||||
$loaded = array();
|
||||
return $loaded;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('log_message'))
|
||||
{
|
||||
function log_message($level, $message)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('set_status_header'))
|
||||
{
|
||||
function set_status_header($code = 200, $text = '')
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists('is_cli'))
|
||||
{
|
||||
// In order to test HTTP functionality, we need to lie about this
|
||||
function is_cli()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
35
SAE2.02_Application_WEB/tests/mocks/core/security.php
Normal file
35
SAE2.02_Application_WEB/tests/mocks/core/security.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
class Mock_Core_Security extends CI_Security {
|
||||
|
||||
public function csrf_set_cookie()
|
||||
{
|
||||
// We cannot set cookie in CLI mode, so for csrf test, who rely on $_COOKIE,
|
||||
// we superseded set_cookie with directly set the cookie variable,
|
||||
// @see : ./tests/codeigniter/core/Security_test.php, line 8
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Override inaccessible protected properties
|
||||
public function __get($property)
|
||||
{
|
||||
return isset($this->{'_'.$property}) ? $this->{'_'.$property} : NULL;
|
||||
}
|
||||
|
||||
public function remove_evil_attributes($str, $is_image)
|
||||
{
|
||||
return $this->_remove_evil_attributes($str, $is_image);
|
||||
}
|
||||
|
||||
// Override inaccessible protected method
|
||||
public function __call($method, $params)
|
||||
{
|
||||
if (is_callable(array($this, '_'.$method)))
|
||||
{
|
||||
return call_user_func_array(array($this, '_'.$method), $params);
|
||||
}
|
||||
|
||||
throw new BadMethodCallException('Method '.$method.' was not found');
|
||||
}
|
||||
|
||||
}
|
||||
32
SAE2.02_Application_WEB/tests/mocks/core/uri.php
Normal file
32
SAE2.02_Application_WEB/tests/mocks/core/uri.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
class Mock_Core_URI extends CI_URI {
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$test = CI_TestCase::instance();
|
||||
$cls =& $test->ci_core_class('cfg');
|
||||
|
||||
// set predictable config values
|
||||
$test->ci_set_config(array(
|
||||
'index_page' => 'index.php',
|
||||
'base_url' => 'http://example.com/',
|
||||
'subclass_prefix' => 'MY_',
|
||||
'enable_query_strings' => FALSE,
|
||||
'permitted_uri_chars' => 'a-z 0-9~%.:_\-'
|
||||
));
|
||||
|
||||
$this->config = new $cls;
|
||||
|
||||
if ($this->config->item('enable_query_strings') !== TRUE OR is_cli())
|
||||
{
|
||||
$this->_permitted_uri_chars = $this->config->item('permitted_uri_chars');
|
||||
}
|
||||
}
|
||||
|
||||
public function _set_permitted_uri_chars($value)
|
||||
{
|
||||
$this->_permitted_uri_chars = $value;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'mysql' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'mysql'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'mysql_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'not_travis',
|
||||
'password' => 'wrong password',
|
||||
'database' => 'not_ci_test',
|
||||
'dbdriver' => 'mysql',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'mysql',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'mysqli' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'mysqli'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'mysqli_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'not_travis',
|
||||
'password' => 'wrong password',
|
||||
'database' => 'not_ci_test',
|
||||
'dbdriver' => 'mysqli',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'mysqli',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'pdo/mysql' => array(
|
||||
'dsn' => 'mysql:host=127.0.0.1;dbname=ci_test',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'mysql'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'pdo/mysql_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'not_travis',
|
||||
'password' => 'wrong password',
|
||||
'database' => 'not_ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'mysql',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => 'mysql:host=127.0.0.1;dbname=ci_test',
|
||||
'hostname' => '127.0.0.1',
|
||||
'username' => 'travis',
|
||||
'password' => 'travis',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'mysql'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'pdo/pgsql' => array(
|
||||
'dsn' => 'pgsql:host=localhost;port=5432;dbname=ci_test;',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'postgres',
|
||||
'password' => 'postgres',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'pgsql'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'pdo/pgsql_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'not_travis',
|
||||
'password' => 'wrong password',
|
||||
'database' => 'not_ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'pgsql',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => 'pgsql:host=localhost;port=5432;dbname=ci_test;',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'postgres',
|
||||
'password' => 'postgres',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'pgsql'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'pdo/sqlite' => array(
|
||||
'dsn' => 'sqlite:/'.realpath(__DIR__.'/../..').'/ci_test.sqlite',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => 'sqlite',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'sqlite'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'pdo/sqlite_failover' => array(
|
||||
'dsn' => 'sqlite:not_exists.sqlite',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => 'sqlite',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'sqlite',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => 'sqlite:/'.realpath(__DIR__.'/../..').'/ci_test.sqlite',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => 'sqlite',
|
||||
'dbdriver' => 'pdo',
|
||||
'subdriver' => 'sqlite'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'pgsql' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'postgres',
|
||||
'password' => 'postgres',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'postgre'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'pgsql_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'not_travis',
|
||||
'password' => 'wrong password',
|
||||
'database' => 'not_ci_test',
|
||||
'dbdriver' => 'postgre',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'postgres',
|
||||
'password' => 'postgres',
|
||||
'database' => 'ci_test',
|
||||
'dbdriver' => 'postgre',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
// Typical Database configuration
|
||||
'sqlite' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => realpath(__DIR__.'/..').'/ci_test.sqlite',
|
||||
'dbdriver' => 'sqlite3'
|
||||
),
|
||||
|
||||
// Database configuration with failover
|
||||
'sqlite_failover' => array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => '../not_exists.sqlite',
|
||||
'dbdriver' => 'sqlite3',
|
||||
'failover' => array(
|
||||
array(
|
||||
'dsn' => '',
|
||||
'hostname' => 'localhost',
|
||||
'username' => 'sqlite',
|
||||
'password' => 'sqlite',
|
||||
'database' => realpath(__DIR__.'/..').'/ci_test.sqlite',
|
||||
'dbdriver' => 'sqlite3'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
142
SAE2.02_Application_WEB/tests/mocks/database/db.php
Normal file
142
SAE2.02_Application_WEB/tests/mocks/database/db.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_DB {
|
||||
|
||||
/**
|
||||
* @var array DB configuration
|
||||
*/
|
||||
private $config = array();
|
||||
|
||||
/**
|
||||
* @var string DB driver name
|
||||
*/
|
||||
private static $dbdriver = '';
|
||||
|
||||
/**
|
||||
* @var string DB sub-driver name
|
||||
*/
|
||||
private static $subdriver = '';
|
||||
|
||||
/**
|
||||
* Prepare database configuration skeleton
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build DSN connection string for DB driver instantiate process
|
||||
*
|
||||
* @param string Group name
|
||||
* @return string DSN Connection string
|
||||
*/
|
||||
public function set_dsn($group = 'default')
|
||||
{
|
||||
if ( ! isset($this->config[$group]))
|
||||
{
|
||||
throw new InvalidArgumentException('Group '.$group.' not exists');
|
||||
}
|
||||
|
||||
self::$dbdriver = $this->config[$group]['dbdriver'];
|
||||
if (isset($this->config[$group]['subdriver']))
|
||||
{
|
||||
self::$subdriver = $this->config[$group]['subdriver'];
|
||||
}
|
||||
|
||||
$params = array(
|
||||
'dbprefix' => '',
|
||||
'pconnect' => FALSE,
|
||||
'db_debug' => FALSE,
|
||||
'cache_on' => FALSE,
|
||||
'cachedir' => '',
|
||||
'char_set' => 'utf8',
|
||||
'dbcollat' => 'utf8_general_ci',
|
||||
'swap_pre' => '',
|
||||
'stricton' => FALSE
|
||||
);
|
||||
|
||||
$config = array_merge($this->config[$group], $params);
|
||||
$dsnstring = empty($config['dsn']) ? FALSE : $config['dsn'];
|
||||
$subdriver = empty($config['subdriver']) ? FALSE: $config['subdriver'];
|
||||
$failover = empty($config['failover']) ? FALSE : $config['failover'];
|
||||
|
||||
$dsn = $config['dbdriver'].'://'.$config['username'].':'.$config['password']
|
||||
.'@'.$config['hostname'].'/'.$config['database'];
|
||||
|
||||
// Build the parameter
|
||||
$other_params = array_slice($config, 6);
|
||||
if ($dsnstring) $other_params['dsn'] = $dsnstring;
|
||||
if ($subdriver) $other_params['subdriver'] = $subdriver;
|
||||
if ($failover) $other_params['failover'] = $failover;
|
||||
|
||||
return $dsn.'?'.http_build_query($other_params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a database config array
|
||||
*
|
||||
* @see ./config
|
||||
* @param string Driver based configuration
|
||||
* @return array
|
||||
*/
|
||||
public static function config($driver)
|
||||
{
|
||||
$dir = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
|
||||
return include($dir.'config'.DIRECTORY_SEPARATOR.$driver.'.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Main DB method wrapper
|
||||
*
|
||||
* @param string Group or DSN string
|
||||
* @param bool
|
||||
* @return object
|
||||
*/
|
||||
public static function DB($group, $query_builder = FALSE)
|
||||
{
|
||||
// Create dummy driver and builder files to "load" - the mocks have
|
||||
// already triggered autoloading of the real files
|
||||
$case = CI_TestCase::instance();
|
||||
$driver = self::$dbdriver;
|
||||
$subdriver = self::$subdriver;
|
||||
$case->ci_vfs_create(array(
|
||||
'DB_driver.php' => '',
|
||||
'DB_result.php' => '',
|
||||
'DB_forge.php' => '',
|
||||
'DB_query_builder.php' => ''
|
||||
), '', $case->ci_base_root, 'database');
|
||||
if (file_exists(SYSTEM_PATH.'database/drivers/'.$driver.'/'.$driver.'_driver.php'))
|
||||
{
|
||||
$case->ci_vfs_create(array(
|
||||
$driver.'_driver.php' => '',
|
||||
$driver.'_result.php' => '',
|
||||
$driver.'_forge.php' => ''
|
||||
), '', $case->ci_base_root, 'database/drivers/'.$driver);
|
||||
}
|
||||
if ($subdriver)
|
||||
{
|
||||
$case->ci_vfs_create(array(
|
||||
$driver.'_'.$subdriver.'_driver.php' => '',
|
||||
$driver.'_'.$subdriver.'_forge.php' => ''
|
||||
), '', $case->ci_base_root, 'database/drivers/'.$driver.'/subdrivers');
|
||||
}
|
||||
|
||||
include_once(SYSTEM_PATH.'database/DB.php');
|
||||
|
||||
try
|
||||
{
|
||||
$db = DB($group, $query_builder);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new RuntimeException($e->getMessage());
|
||||
}
|
||||
|
||||
return $db;
|
||||
}
|
||||
|
||||
}
|
||||
40
SAE2.02_Application_WEB/tests/mocks/database/db/driver.php
Normal file
40
SAE2.02_Application_WEB/tests/mocks/database/db/driver.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_DB_Driver extends CI_DB_driver {
|
||||
|
||||
/**
|
||||
* @var object The actual Driver
|
||||
*/
|
||||
protected $ci_db_driver;
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param string DB Driver class name
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($driver_class, $config = array())
|
||||
{
|
||||
if (is_string($driver_class))
|
||||
{
|
||||
$this->ci_db_driver = new $driver_class($config);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloading method, emulate the actual driver method (multiple inheritance workaround)
|
||||
*/
|
||||
public function __call($method, $arguments)
|
||||
{
|
||||
if ( ! is_callable(array($this->ci_db_driver, $method)))
|
||||
{
|
||||
throw new BadMethodCallException($method. ' not exists or not implemented');
|
||||
}
|
||||
|
||||
return call_user_func_array(array($this->ci_db_driver, $method), $arguments);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class CI_DB extends CI_DB_query_builder {}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Drivers_Mysql extends Mock_Database_DB_Driver {
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
parent::__construct('CI_DB_mysql_driver', $config);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Drivers_Mysqli extends Mock_Database_DB_Driver {
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
parent::__construct('CI_DB_mysqli_driver', $config);
|
||||
}
|
||||
|
||||
}
|
||||
15
SAE2.02_Application_WEB/tests/mocks/database/drivers/pdo.php
Normal file
15
SAE2.02_Application_WEB/tests/mocks/database/drivers/pdo.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Drivers_PDO extends Mock_Database_DB_Driver {
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
parent::__construct('CI_DB_pdo_driver', $config);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Drivers_Postgre extends Mock_Database_DB_Driver {
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
parent::__construct('CI_DB_postgre_driver', $config);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Drivers_Sqlite extends Mock_Database_DB_Driver {
|
||||
|
||||
/**
|
||||
* Instantiate the database driver
|
||||
*
|
||||
* @param array DB configuration to set
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config = array())
|
||||
{
|
||||
parent::__construct('CI_DB_sqlite3_driver', $config);
|
||||
}
|
||||
|
||||
}
|
||||
155
SAE2.02_Application_WEB/tests/mocks/database/schema/skeleton.php
Normal file
155
SAE2.02_Application_WEB/tests/mocks/database/schema/skeleton.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
|
||||
class Mock_Database_Schema_Skeleton {
|
||||
|
||||
/**
|
||||
* @var object Database Holder
|
||||
*/
|
||||
public static $db;
|
||||
|
||||
/**
|
||||
* @var object Forge Holder
|
||||
*/
|
||||
public static $forge;
|
||||
|
||||
/**
|
||||
* @var object Driver Holder
|
||||
*/
|
||||
public static $driver;
|
||||
|
||||
/**
|
||||
* Initialize both database and forge components
|
||||
*/
|
||||
public static function init($driver)
|
||||
{
|
||||
if (empty(self::$db) && empty(self::$forge))
|
||||
{
|
||||
// E_DEPRECATED notices thrown by mysql_connect(), mysql_pconnect()
|
||||
// on PHP 5.5+ cause the tests to fail
|
||||
if ($driver === 'mysql' && version_compare(PHP_VERSION, '5.5', '>='))
|
||||
{
|
||||
error_reporting(E_ALL & ~E_DEPRECATED);
|
||||
}
|
||||
|
||||
$config = Mock_Database_DB::config($driver);
|
||||
$connection = new Mock_Database_DB($config);
|
||||
$db = Mock_Database_DB::DB($connection->set_dsn($driver), TRUE);
|
||||
|
||||
CI_TestCase::instance()->ci_instance_var('db', $db);
|
||||
|
||||
$loader = new CI_Loader();
|
||||
$loader->dbforge();
|
||||
$forge = CI_TestCase::instance()->ci_instance_var('dbforge');
|
||||
|
||||
self::$db = $db;
|
||||
self::$forge = $forge;
|
||||
self::$driver = $driver;
|
||||
}
|
||||
|
||||
return self::$db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the dummy tables
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function create_tables()
|
||||
{
|
||||
// User Table
|
||||
self::$forge->add_field(array(
|
||||
'id' => array(
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3
|
||||
),
|
||||
'name' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40
|
||||
),
|
||||
'email' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 100
|
||||
),
|
||||
'country' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40
|
||||
)
|
||||
));
|
||||
self::$forge->add_key('id', TRUE);
|
||||
self::$forge->create_table('user', TRUE) OR show_error('Unable to create the `user` table');
|
||||
|
||||
// Job Table
|
||||
self::$forge->add_field(array(
|
||||
'id' => array(
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3
|
||||
),
|
||||
'name' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40
|
||||
),
|
||||
'description' => array(
|
||||
'type' => 'TEXT'
|
||||
)
|
||||
));
|
||||
self::$forge->add_key('id', TRUE);
|
||||
self::$forge->create_table('job', TRUE) OR show_error('Unable to create the `job` table');
|
||||
|
||||
// Misc Table
|
||||
self::$forge->add_field(array(
|
||||
'id' => array(
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3
|
||||
),
|
||||
'key' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40
|
||||
),
|
||||
'value' => array(
|
||||
'type' => 'TEXT'
|
||||
)
|
||||
));
|
||||
self::$forge->add_key('id', TRUE);
|
||||
self::$forge->create_table('misc', TRUE) OR show_error('Unable to create the `misc` table');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the dummy datas
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function create_data()
|
||||
{
|
||||
// Job Data
|
||||
$data = array(
|
||||
'user' => array(
|
||||
array('id' => 1, 'name' => 'Derek Jones', 'email' => 'derek@world.com', 'country' => 'US'),
|
||||
array('id' => 2, 'name' => 'Ahmadinejad', 'email' => 'ahmadinejad@world.com', 'country' => 'Iran'),
|
||||
array('id' => 3, 'name' => 'Richard A Causey', 'email' => 'richard@world.com', 'country' => 'US'),
|
||||
array('id' => 4, 'name' => 'Chris Martin', 'email' => 'chris@world.com', 'country' => 'UK')
|
||||
),
|
||||
'job' => array(
|
||||
array('id' => 1, 'name' => 'Developer', 'description' => 'Awesome job, but sometimes makes you bored'),
|
||||
array('id' => 2, 'name' => 'Politician', 'description' => 'This is not really a job'),
|
||||
array('id' => 3, 'name' => 'Accountant', 'description' => 'Boring job, but you will get free snack at lunch'),
|
||||
array('id' => 4, 'name' => 'Musician', 'description' => 'Only Coldplay can actually called Musician')
|
||||
),
|
||||
'misc' => array(
|
||||
array('id' => 1, 'key' => '\\xxxfoo456', 'value' => 'Entry with \\xxx'),
|
||||
array('id' => 2, 'key' => '\\%foo456', 'value' => 'Entry with \\%'),
|
||||
array('id' => 3, 'key' => 'spaces and tabs', 'value' => ' One two three tab')
|
||||
)
|
||||
);
|
||||
|
||||
foreach ($data as $table => $dummy_data)
|
||||
{
|
||||
self::$db->truncate($table) OR show_error("Unable to truncate `{$table}` table");
|
||||
|
||||
foreach ($dummy_data as $single_dummy_data)
|
||||
{
|
||||
self::$db->insert($table, $single_dummy_data) OR show_error("Unable to insert data into `{$table}` table");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
27
SAE2.02_Application_WEB/tests/mocks/libraries/driver.php
Normal file
27
SAE2.02_Application_WEB/tests/mocks/libraries/driver.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mock library to subclass Driver for testing
|
||||
*/
|
||||
class Mock_Libraries_Driver extends CI_Driver_Library {
|
||||
/**
|
||||
* Set valid drivers list
|
||||
*/
|
||||
public function driver_list($drivers = NULL)
|
||||
{
|
||||
if (empty($drivers))
|
||||
{
|
||||
return $this->valid_drivers;
|
||||
}
|
||||
|
||||
$this->valid_drivers = (array) $drivers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get library name
|
||||
*/
|
||||
public function get_name()
|
||||
{
|
||||
return $this->lib_name;
|
||||
}
|
||||
}
|
||||
39
SAE2.02_Application_WEB/tests/mocks/libraries/encryption.php
Normal file
39
SAE2.02_Application_WEB/tests/mocks/libraries/encryption.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
class Mock_Libraries_Encryption extends CI_Encryption {
|
||||
|
||||
/**
|
||||
* __get_params()
|
||||
*
|
||||
* Allows public calls to the otherwise protected _get_params().
|
||||
*/
|
||||
public function __get_params($params)
|
||||
{
|
||||
return $this->_get_params($params);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* get_key()
|
||||
*
|
||||
* Allows checking for key changes.
|
||||
*/
|
||||
public function get_key()
|
||||
{
|
||||
return $this->_key;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* __driver_get_handle()
|
||||
*
|
||||
* Allows checking for _mcrypt_get_handle(), _openssl_get_handle()
|
||||
*/
|
||||
public function __driver_get_handle($driver, $cipher, $mode)
|
||||
{
|
||||
return $this->{'_'.$driver.'_get_handle'}($cipher, $mode);
|
||||
}
|
||||
|
||||
}
|
||||
38
SAE2.02_Application_WEB/tests/mocks/libraries/session.php
Normal file
38
SAE2.02_Application_WEB/tests/mocks/libraries/session.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mock library to add testing features to Session driver library
|
||||
*/
|
||||
class Mock_Libraries_Session extends CI_Session {
|
||||
/**
|
||||
* Simulate new page load
|
||||
*/
|
||||
public function reload()
|
||||
{
|
||||
$this->_flashdata_sweep();
|
||||
$this->_flashdata_mark();
|
||||
$this->_tempdata_sweep();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock cookie driver to overload cookie setting
|
||||
*/
|
||||
class Mock_Libraries_Session_cookie extends CI_Session_cookie {
|
||||
/**
|
||||
* Overload _setcookie to manage $_COOKIE values, since actual cookies can't be set in unit testing
|
||||
*/
|
||||
protected function _setcookie($name, $value = '', $expire = 0, $path = '', $domain = '', $secure = FALSE, $httponly = FALSE)
|
||||
{
|
||||
if (empty($value) OR $expire <= time())
|
||||
{
|
||||
unset($_COOKIE[$name]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$_COOKIE[$name] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Mock_Libraries_Session_native extends CI_Session_native {}
|
||||
16
SAE2.02_Application_WEB/tests/mocks/libraries/table.php
Normal file
16
SAE2.02_Application_WEB/tests/mocks/libraries/table.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Mock_Libraries_Table extends CI_Table {
|
||||
|
||||
// Override inaccessible protected method
|
||||
public function __call($method, $params)
|
||||
{
|
||||
if (is_callable(array($this, '_'.$method)))
|
||||
{
|
||||
return call_user_func_array(array($this, '_'.$method), $params);
|
||||
}
|
||||
|
||||
throw new BadMethodCallException('Method '.$method.' was not found');
|
||||
}
|
||||
|
||||
}
|
||||
BIN
SAE2.02_Application_WEB/tests/mocks/uploads/ci_logo.gif
Normal file
BIN
SAE2.02_Application_WEB/tests/mocks/uploads/ci_logo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
Reference in New Issue
Block a user