From 69c97a71476e4eaa6c629022fcd4ec7f36d4ec0d Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Wed, 20 Apr 2011 21:44:54 -0400 Subject: Adding early bootstrap ideas for core test suite --- tests/lib/ci_testcase.php | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 tests/lib/ci_testcase.php (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php new file mode 100644 index 000000000..a8a272db2 --- /dev/null +++ b/tests/lib/ci_testcase.php @@ -0,0 +1,110 @@ + 'bm', + 'config' => 'cfg', + 'hooks' => 'ext', + 'utf8' => 'uni', + 'router' => 'rtr', + 'output' => 'out', + 'security' => 'sec', + 'input' => 'in', + 'lang' => 'lang', + + // @todo the loader is an edge case + 'loader' => 'load' + ); + + function __construct() + { + parent::__construct(); + } + + // -------------------------------------------------------------------- + + // Change what get_instance returns + function ci_instance($obj) + { + $this->ci_instance = $obj; + } + + // -------------------------------------------------------------------- + + function ci_set_instance_var($name, $obj) + { + $this->ci_instance->$name =& $obj; + } + + // -------------------------------------------------------------------- + + // Set a class to a mock before it is loaded + function ci_library($name) + { + + } + + // -------------------------------------------------------------------- + + /** + * 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. + */ + function &ci_core_class($name) + { + $name = strtolower($name); + + if (isset(self::$global_map[$name])) + { + $class_name = ucfirst($name); + $global_name = self::$global_map[$name]; + } + elseif (in_array($name, self::$global_map)) + { + $class_name = ucfirst(array_search($name, self::$global_map)); + $global_name = $name; + } + else + { + throw new Exception('Not a valid core class.'); + } + + if ( ! class_exists('CI_'.$class_name)) + { + require_once BASEPATH.'core/'.$class_name.'.php'; + } + + $GLOBALS[strtoupper($global_name)] = 'CI_'.$class_name; + return $GLOBALS[strtoupper($global_name)]; + } + + // -------------------------------------------------------------------- + + // convenience function for global mocks + function ci_set_core_class($name, $obj) + { + $orig =& $this->ci_core_class($name); + $orig = $obj; + } + + // -------------------------------------------------------------------- + + static function ci_config($item) + { + return ''; + } +} + +// EOF \ No newline at end of file -- cgit v1.2.3-24-g4f1b From fe372e30a8f05ec4a77dc9a5ea2ec471b3488bd3 Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 00:59:45 -0400 Subject: Fixing up the scope soup, and adding a way to set core config items. --- tests/lib/ci_testcase.php | 74 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 8 deletions(-) (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php index a8a272db2..04216e2a8 100644 --- a/tests/lib/ci_testcase.php +++ b/tests/lib/ci_testcase.php @@ -4,10 +4,8 @@ // Need a way to change dependencies (core libs and laoded libs) // Need a way to set the CI class -class CodeIgniterTestCase extends PHPUnit_Framework_TestCase { +class CI_TestCase extends PHPUnit_Framework_TestCase { - public $ci_instance; - public static $test_instance; public static $global_map = array( 'benchmark' => 'bm', 'config' => 'cfg', @@ -23,23 +21,62 @@ class CodeIgniterTestCase extends PHPUnit_Framework_TestCase { 'loader' => 'load' ); - function __construct() + protected $ci_config = array(); + + protected $ci_instance; + protected static $ci_test_instance; + + + public function __construct() { parent::__construct(); } // -------------------------------------------------------------------- - // Change what get_instance returns - function ci_instance($obj) + /** + * 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 static function instance() + { + return self::$ci_test_instance; + } + + // -------------------------------------------------------------------- + + function ci_instance($obj = FALSE) + { + if ( ! is_object($obj)) + { + return $this->ci_instance; + } + $this->ci_instance = $obj; } // -------------------------------------------------------------------- - function ci_set_instance_var($name, $obj) + function ci_instance_var($name, $obj = FALSE) { + if ( ! is_object($obj)) + { + return $this->ci_instance->$name; + } + $this->ci_instance->$name =& $obj; } @@ -101,7 +138,28 @@ class CodeIgniterTestCase extends PHPUnit_Framework_TestCase { // -------------------------------------------------------------------- - static function ci_config($item) + function ci_set_config($key, $val = '') + { + if (is_array($key)) + { + $this->ci_config = $key; + } + else + { + $this->ci_config[$key] = $val; + } + } + + // -------------------------------------------------------------------- + + function ci_config_array() + { + return $this->ci_config; + } + + // -------------------------------------------------------------------- + + function ci_config_item($item) { return ''; } -- cgit v1.2.3-24-g4f1b From ae7b3f9265ab5d5776d729d6258f3ad2b311ac8c Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 01:21:27 -0400 Subject: a bit of shuffling around in CI_TestCase --- tests/lib/ci_testcase.php | 89 ++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 51 deletions(-) (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php index 04216e2a8..c8c6bc900 100644 --- a/tests/lib/ci_testcase.php +++ b/tests/lib/ci_testcase.php @@ -5,8 +5,12 @@ // Need a way to set the CI class class CI_TestCase extends PHPUnit_Framework_TestCase { + + protected $ci_config; + protected $ci_instance; + protected static $ci_test_instance; - public static $global_map = array( + private $global_map = array( 'benchmark' => 'bm', 'config' => 'cfg', 'hooks' => 'ext', @@ -21,39 +25,25 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { 'loader' => 'load' ); - protected $ci_config = array(); - - protected $ci_instance; - protected static $ci_test_instance; - - public function __construct() { parent::__construct(); + + $this->ci_config = array(); } // -------------------------------------------------------------------- - /** - * 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 static function instance() + function ci_set_config($key, $val = '') { - return self::$ci_test_instance; + if (is_array($key)) + { + $this->ci_config = $key; + } + else + { + $this->ci_config[$key] = $val; + } } // -------------------------------------------------------------------- @@ -80,14 +70,6 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { $this->ci_instance->$name =& $obj; } - // -------------------------------------------------------------------- - - // Set a class to a mock before it is loaded - function ci_library($name) - { - - } - // -------------------------------------------------------------------- /** @@ -103,14 +85,14 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { { $name = strtolower($name); - if (isset(self::$global_map[$name])) + if (isset($this->global_map[$name])) { $class_name = ucfirst($name); - $global_name = self::$global_map[$name]; + $global_name = $this->global_map[$name]; } - elseif (in_array($name, self::$global_map)) + elseif (in_array($name, $this->global_map)) { - $class_name = ucfirst(array_search($name, self::$global_map)); + $class_name = ucfirst(array_search($name, $this->global_map)); $global_name = $name; } else @@ -136,32 +118,37 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { $orig = $obj; } + // -------------------------------------------------------------------- + // Internals // -------------------------------------------------------------------- - function ci_set_config($key, $val = '') + /** + * 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() { - if (is_array($key)) - { - $this->ci_config = $key; - } - else - { - $this->ci_config[$key] = $val; - } + self::$ci_test_instance = $this; + parent::runBare(); } // -------------------------------------------------------------------- - function ci_config_array() + public static function instance() { - return $this->ci_config; + return self::$ci_test_instance; } // -------------------------------------------------------------------- - function ci_config_item($item) + function ci_get_config() { - return ''; + return $this->ci_config; } } -- cgit v1.2.3-24-g4f1b From 8da69039f6d855eb4f88de73702155e6899d2d23 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 11:28:27 -0500 Subject: Working on tests in the loader. Have generic model mocking working with vfsStream. --- tests/lib/ci_testcase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php index c8c6bc900..10539a3af 100644 --- a/tests/lib/ci_testcase.php +++ b/tests/lib/ci_testcase.php @@ -20,9 +20,9 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { 'security' => 'sec', 'input' => 'in', 'lang' => 'lang', - // @todo the loader is an edge case - 'loader' => 'load' + 'loader' => 'load', + 'model' => 'model' ); public function __construct() -- cgit v1.2.3-24-g4f1b From 68286a4dcc1ed4d904ad992173c1b3621bf6fced Mon Sep 17 00:00:00 2001 From: Eric Barnes Date: Thu, 21 Apr 2011 22:00:33 -0400 Subject: Reworked unit tests to match rest of framework and added a few more. --- tests/lib/ci_testcase.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php index 10539a3af..8ca71fdf2 100644 --- a/tests/lib/ci_testcase.php +++ b/tests/lib/ci_testcase.php @@ -25,6 +25,8 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { 'model' => 'model' ); + // -------------------------------------------------------------------- + public function __construct() { parent::__construct(); @@ -34,6 +36,26 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { // -------------------------------------------------------------------- + public function setUp() + { + if (method_exists($this, 'set_up')) + { + $this->set_up(); + } + } + + // -------------------------------------------------------------------- + + public function tearDown() + { + if (method_exists($this, 'tear_down')) + { + $this->tear_down(); + } + } + + // -------------------------------------------------------------------- + function ci_set_config($key, $val = '') { if (is_array($key)) -- cgit v1.2.3-24-g4f1b From 8749bc7e836c196dfef37d3b7b5a67736a15092c Mon Sep 17 00:00:00 2001 From: Taufan Aditya Date: Sun, 11 Mar 2012 05:43:45 +0700 Subject: Fix incomplete and skipped test --- tests/lib/ci_testcase.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tests/lib/ci_testcase.php') diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php index 8ca71fdf2..afccee017 100644 --- a/tests/lib/ci_testcase.php +++ b/tests/lib/ci_testcase.php @@ -172,6 +172,23 @@ class CI_TestCase extends PHPUnit_Framework_TestCase { { return $this->ci_config; } + + // -------------------------------------------------------------------- + + /** + * This overload is useful to create a stub, that need to have a specific method. + */ + function __call($method, $args) + { + if ($this->{$method} instanceof Closure) + { + return call_user_func_array($this->{$method},$args); + } + else + { + return parent::__call($method, $args); + } + } } // EOF \ No newline at end of file -- cgit v1.2.3-24-g4f1b