From ba2430b5778b5b2414b94b818354fa1ff7cfd0db Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Wed, 20 Apr 2011 21:44:13 -0400 Subject: Adding tests directory and initial implemenation draft. --- tests/readme.txt | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 tests/readme.txt diff --git a/tests/readme.txt b/tests/readme.txt new file mode 100644 index 000000000..eaad2c480 --- /dev/null +++ b/tests/readme.txt @@ -0,0 +1,113 @@ +# Do not merge to default until this is blank # + +- Clean up naming conventions +- Figure out config stuff +- Figure out database testing + + + +# -------------- CodeIgniter Testing (4/20/2011) -------------- # + + +# Introduction: + +This is the preliminary CodeIgniter testing documentation. It +will cover both internal as well as external APIs and the reasoning +behind their implemenation, where appropriate. As with all CodeIgniter +documentation, this file should maintain a mostly human readable +format to facilitate clean api design. [see http://arrenbrecht.ch/testing/] + +*FIRST PUBLIC DRAFT: EVERYTHING IS SUBJECT TO CHANGE* + +# Test Suites: + +CodeIgniter bootstraps a request very directly, with very flat class +hierarchy. As a result, there is no main CodeIgniter class until the +controller is instantiated. + +This has forced the core classes to be relatively decoupled, which is +a good thing. However, it makes that portion of code relatively hard +to test. + +Right now that means we'll probably have two core test suites, along +with a base for application and package tests. That gives us: + +1. Bootstrap Test - test common.php and sanity check codeigniter.php [in planning] +2. System Test - test core components in relative isolation [in development] +3. Application Test - bootstrapping for application/tests [not started] +4. Package Test - bootstrapping for /tests [not started] + + +## 1. Bootstrap Test + +Testing common.php should be pretty simple. Include the file, and test the +functions. May require some tweaking so that we can grab the statics from all +methods (see is_loaded()). Testing the actual CodeIgniter.php file will most +likely be an output test for the default view, with some object checking after +the file runs. Needs consideration. + + +## 2. System Test + +Testing the core system relies on being able to isolate the core components +as much as possible. A few of them access other core classes as globals. These +should be mocked up and easy to manipulate. + +All functions in common.php should be a minimal implementation, or and mapped +to a method in the test's parent class to gives us full control of their output. + + +### CodeIgniterTestCase Documentation + + +Test cases should extend CodeIgniterTestCase. This internally +extends PHPUnit_Framework_TestCase, so you have access to all +of your usual PHPUnit methods. + +We need to provide a simple way to modify the globals and the +common function output. We also need to be able to mock up +the super object as we please. + +Current API is *not stable*. Names and implementations will change. + +$this->ci_instance($obj) + set the object to use as the "super object", in a lot + of cases this will be a simple stdClass with the attributes + you need it to have. + +$this->ci_set_instance_var($name, $val) + add an attribute to the super object. This is useful if you + set up a simple instance in setUp and then need to add different + class mockups to your super object. + +$this->ci_core_class($name) + Get the _class name_ of a core class, so that you can instantiate + it. The variable is returned by reference and is tied to the correct + $GLOBALS key. For example: + $cfg =& $this->ci_core_class('cfg'); // returns 'CI_Config' + $cfg = new $cfg; // instantiates config and overwrites the CFG global + +$this->ci_set_core_class($name, $obj); + An alternative way to set one of the core globals. + + +## 3. Application Test: + +Not sure yet, needs to handle: +- Libraries +- Helpers +- Models +- MY_* files +- Controllers (uh...?) +- Views? (watir, selenium, cucumber?) + +- Database Testing + + +## 4. Package Test: + +I don't have a clue how this will work. + +Needs to be able to handle packages +that are used multiple times within the application (i.e. EE/Pyro modules) +as well as packages that are used by multiple applications (library distributions) \ No newline at end of file -- cgit v1.2.3-24-g4f1b 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/Bootstrap.php | 21 ++++ tests/codeigniter/Setup_test.php | 13 +++ tests/codeigniter/core/Config_test.php | 107 ++++++++++++++++++ tests/codeigniter/core/Lang_test.php | 31 +++++ tests/codeigniter/core/Loader_test.php | 144 ++++++++++++++++++++++++ tests/codeigniter/helpers/Array_helper_test.php | 49 ++++++++ tests/codeigniter/libraries/Parser_test.php | 125 ++++++++++++++++++++ tests/lib/ci_testcase.php | 110 ++++++++++++++++++ tests/lib/common.php | 120 ++++++++++++++++++++ tests/phpunit.xml | 17 +++ 10 files changed, 737 insertions(+) create mode 100644 tests/Bootstrap.php create mode 100644 tests/codeigniter/Setup_test.php create mode 100644 tests/codeigniter/core/Config_test.php create mode 100644 tests/codeigniter/core/Lang_test.php create mode 100644 tests/codeigniter/core/Loader_test.php create mode 100644 tests/codeigniter/helpers/Array_helper_test.php create mode 100644 tests/codeigniter/libraries/Parser_test.php create mode 100644 tests/lib/ci_testcase.php create mode 100644 tests/lib/common.php create mode 100644 tests/phpunit.xml diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php new file mode 100644 index 000000000..ca63ff788 --- /dev/null +++ b/tests/Bootstrap.php @@ -0,0 +1,21 @@ +markTestIncomplete('not implemented'); + // ensure that our bootstrapped test environment + // is a good representation of an isolated CI install + //die('here'); + } + +} \ No newline at end of file diff --git a/tests/codeigniter/core/Config_test.php b/tests/codeigniter/core/Config_test.php new file mode 100644 index 000000000..628fc630b --- /dev/null +++ b/tests/codeigniter/core/Config_test.php @@ -0,0 +1,107 @@ +ci_core_class('cfg'); + + $stub = $this->getMock($cls, NULL, array(), '', FALSE); + + //I would prefer this, but it currently + // does not work as when you try to pass + // null to setMethods it fails on an internal + // function call that expects an array =( + /* + $stub = $this->getMockBuilder($cls) + ->disableOriginalConstructor() + ->setMethods(null) + ->getMock(); + */ + + + // set predictable config values + $stub->config = array( + 'index_page' => 'index.php', + 'base_url' => 'http://example.com/', + 'subclass_prefix' => 'MY_' + ); + + $this->config = $stub; + } + + // -------------------------------------------------------------------- + + public function testItem() + { + $this->assertEquals('http://example.com/', $this->config->item('base_url')); + + // Bad Config value + $this->assertFalse($this->config->item('no_good_item')); + + // Index + $this->assertFalse($this->config->item('no_good_item', 'bad_index')); + $this->assertFalse($this->config->item('no_good_item', 'default')); + } + + // -------------------------------------------------------------------- + + public function testSetItem() + { + $this->assertFalse($this->config->item('not_yet_set')); + + $this->config->set_item('not_yet_set', 'is set'); + + $this->assertEquals('is set', $this->config->item('not_yet_set')); + } + + // -------------------------------------------------------------------- + + public function testSlashItem() + { + // Bad Config value + $this->assertFalse($this->config->slash_item('no_good_item')); + + $this->assertEquals('http://example.com/', $this->config->slash_item('base_url')); + + $this->assertEquals('MY_/', $this->config->slash_item('subclass_prefix')); + } + + // -------------------------------------------------------------------- + + public function testSiteUrl() + { + $this->assertEquals('http://example.com/index.php', $this->config->site_url()); + + $base_url = $this->config->item('base_url'); + + $this->config->set_item('base_url', ''); + + $q_string = $this->config->item('enable_query_strings'); + + $this->config->set_item('enable_query_strings', FALSE); + + $this->assertEquals('/index.php/test', $this->config->site_url('test')); + $this->assertEquals('/index.php/test/1', $this->config->site_url(array('test', '1'))); + + $this->config->set_item('enable_query_strings', TRUE); + + $this->assertEquals('/index.php?test', $this->config->site_url('test')); + $this->assertEquals('/index.php?0=test&1=1', $this->config->site_url(array('test', '1'))); + + $this->config->set_item('base_url', $base_url); + + $this->assertEquals('http://example.com/index.php?test', $this->config->site_url('test')); + + // back to home base + $this->config->set_item('enable_query_strings', $q_string); + } + + // -------------------------------------------------------------------- + + public function testSystemUrl() + { + $this->assertEquals('http://example.com/system/', $this->config->system_url()); + } + +} \ No newline at end of file diff --git a/tests/codeigniter/core/Lang_test.php b/tests/codeigniter/core/Lang_test.php new file mode 100644 index 000000000..82e279a52 --- /dev/null +++ b/tests/codeigniter/core/Lang_test.php @@ -0,0 +1,31 @@ +ci_core_class('lang'); + $this->lang = new $cls; + } + + // -------------------------------------------------------------------- + + public function testLoad() + { + // get_config needs work + $this->markTestIncomplete('get_config needs work'); + //$this->assertTrue($this->lang->load('profiler')); + } + + // -------------------------------------------------------------------- + + public function testLine() + { + $this->markTestIncomplete('get_config needs work'); + + $this->assertEquals('URI STRING', $this->lang->line('profiler_uri_string')); + } + +} \ No newline at end of file diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php new file mode 100644 index 000000000..fd9c63216 --- /dev/null +++ b/tests/codeigniter/core/Loader_test.php @@ -0,0 +1,144 @@ +ci_core_class('load'); + $this->_loader = new $cls; + + // mock up a ci instance + $this->ci_obj = new StdClass; + + // Fix get_instance() + CodeIgniterTestCase::$test_instance =& $this; + $this->ci_instance($this->ci_obj); + } + + // -------------------------------------------------------------------- + + public function testLibrary() + { + // Mock up a config object until we + // figure out how to test the library configs + $config = $this->getMock('CI_Config', NULL, array(), '', FALSE); + $config->expects($this->any()) + ->method('load') + ->will($this->returnValue(TRUE)); + + // Add the mock to our stdClass + $this->ci_set_instance_var('config', $config); + + // Test loading as an array. + $this->assertEquals(NULL, $this->_loader->library(array('table'))); + $this->assertTrue(class_exists('CI_Table'), 'Table class exists'); + $this->assertAttributeInstanceOf('CI_Table', 'table', $this->ci_obj); + + // Test no lib given + $this->assertEquals(FALSE, $this->_loader->library()); + + // Test a string given to params + $this->assertEquals(NULL, $this->_loader->library('table', ' ')); + } + + // -------------------------------------------------------------------- + + public function testModels() + { + // Test loading as an array. + $this->assertEquals(NULL, $this->_loader->model(array('foobar'))); + + // Test no model given + $this->assertEquals(FALSE, $this->_loader->model('')); + + // Test a string given to params + $this->assertEquals(NULL, $this->_loader->model('foobar', ' ')); + } + + // -------------------------------------------------------------------- + + public function testDatabase() + { + $this->assertEquals(NULL, $this->_loader->database()); + $this->assertEquals(NULL, $this->_loader->dbutil()); + } + + // -------------------------------------------------------------------- + + public function testView() + { + // I'm not entirely sure this is the proper way to handle this. + // So, let's revist it, m'kay? + try + { + $this->_loader->view('foo'); + } + catch (Exception $expected) + { + return; + } + } + + // -------------------------------------------------------------------- + + public function testFile() + { + // I'm not entirely sure this is the proper way to handle this. + // So, let's revist it, m'kay? + try + { + $this->_loader->file('foo'); + } + catch (Exception $expected) + { + return; + } + } + + // -------------------------------------------------------------------- + + public function testVars() + { + $vars = array( + 'foo' => 'bar' + ); + + $this->assertEquals(NULL, $this->_loader->vars($vars)); + $this->assertEquals(NULL, $this->_loader->vars('foo', 'bar')); + } + + // -------------------------------------------------------------------- + + public function testHelper() + { + $this->assertEquals(NULL, $this->_loader->helper('array')); + $this->assertEquals(NULL, $this->_loader->helper('bad')); + } + + // -------------------------------------------------------------------- + + public function testHelpers() + { + $this->assertEquals(NULL, $this->_loader->helpers(array('file', 'array', 'string'))); + } + + // -------------------------------------------------------------------- + + // public function testLanguage() + // { + // $this->assertEquals(NULL, $this->_loader->language('test')); + // } + + // -------------------------------------------------------------------- + + public function testLoadConfig() + { + $this->assertEquals(NULL, $this->_loader->config('config', FALSE, TRUE)); + } + + + +} \ No newline at end of file diff --git a/tests/codeigniter/helpers/Array_helper_test.php b/tests/codeigniter/helpers/Array_helper_test.php new file mode 100644 index 000000000..bbefdb49d --- /dev/null +++ b/tests/codeigniter/helpers/Array_helper_test.php @@ -0,0 +1,49 @@ +my_array = array( + 'foo' => 'bar', + 'sally' => 'jim', + 'maggie' => 'bessie', + 'herb' => 'cook' + ); + } + + // ------------------------------------------------------------------------ + + public function testElementWithExistingItem() + { + $this->assertEquals(FALSE, element('testing', $this->my_array)); + + $this->assertEquals('not set', element('testing', $this->my_array, 'not set')); + + $this->assertEquals('bar', element('foo', $this->my_array)); + } + + // ------------------------------------------------------------------------ + + public function testRandomElement() + { + // Send a string, not an array to random_element + $this->assertEquals('my string', random_element('my string')); + + // Test sending an array + $this->assertEquals(TRUE, in_array(random_element($this->my_array), $this->my_array)); + } + + // ------------------------------------------------------------------------ + + public function testElements() + { + $this->assertEquals(TRUE, is_array(elements('test', $this->my_array))); + $this->assertEquals(TRUE, is_array(elements('foo', $this->my_array))); + } + +} \ No newline at end of file diff --git a/tests/codeigniter/libraries/Parser_test.php b/tests/codeigniter/libraries/Parser_test.php new file mode 100644 index 000000000..a8de108f0 --- /dev/null +++ b/tests/codeigniter/libraries/Parser_test.php @@ -0,0 +1,125 @@ +load->library('parser'); + self::$cls = get_class($CI->parser); + } + + // -------------------------------------------------------------------- + + public function setUp() + { + $cls = self::$cls; + $this->parser = new $cls; + } + // -------------------------------------------------------------------- + + public function testSetDelimiters() + { + // Make sure default delimiters are there + $this->assertEquals('{', $this->parser->l_delim); + $this->assertEquals('}', $this->parser->r_delim); + + // Change them to square brackets + $this->parser->set_delimiters('[', ']'); + + // Make sure they changed + $this->assertEquals('[', $this->parser->l_delim); + $this->assertEquals(']', $this->parser->r_delim); + + // Reset them + $this->parser->set_delimiters(); + + // Make sure default delimiters are there + $this->assertEquals('{', $this->parser->l_delim); + $this->assertEquals('}', $this->parser->r_delim); + } + + // -------------------------------------------------------------------- + + public function testParseSimpleString() + { + $data = array( + 'title' => 'Page Title', + 'body' => 'Lorem ipsum dolor sit amet.' + ); + + $template = "{title}\n{body}"; + + $result = implode("\n", $data); + + $this->assertEquals($result, $this->parser->parse_string($template, $data, TRUE)); + } + + // -------------------------------------------------------------------- + + public function testParse() + { + $this->_parse_no_template(); + $this->_parse_var_pair(); + $this->_mismatched_var_pair(); + } + + // -------------------------------------------------------------------- + + private function _parse_no_template() + { + $this->assertFalse($this->parser->parse_string('', '', TRUE)); + } + + // -------------------------------------------------------------------- + + private function _parse_var_pair() + { + $data = array( + 'title' => 'Super Heroes', + 'powers' => array( + array( + 'invisibility' => 'yes', + 'flying' => 'no'), + ) + ); + + $template = "{title}\n{powers}{invisibility}\n{flying}{/powers}"; + + $result = "Super Heroes\nyes\nno"; + + $this->assertEquals($result, $this->parser->parse_string($template, $data, TRUE)); + } + + // -------------------------------------------------------------------- + + private function _mismatched_var_pair() + { + $data = array( + 'title' => 'Super Heroes', + 'powers' => array( + array( + 'invisibility' => 'yes', + 'flying' => 'no'), + ) + ); + + $template = "{title}\n{powers}{invisibility}\n{flying}"; + + $result = "Super Heroes\n{powers}{invisibility}\n{flying}"; + + $this->assertEquals($result, $this->parser->parse_string($template, $data, TRUE)); + } + + // -------------------------------------------------------------------- + + // -------------------------------------------------------------------- + + // -------------------------------------------------------------------- + +} \ No newline at end of file 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 diff --git a/tests/lib/common.php b/tests/lib/common.php new file mode 100644 index 000000000..482721a9a --- /dev/null +++ b/tests/lib/common.php @@ -0,0 +1,120 @@ +ci_instance; +} + +// Config Stuff | @todo High priority! +// -------------------------------------------------------------------- + +function get_config() { die('implement me'); } + +function config_item($item) +{ + return CodeIgniterTestCase::ci_config($item); +} + +// -------------------------------------------------------------------- + +function load_class($class, $directory = 'libraries', $prefix = 'CI_') +{ + if ($directory != 'core' OR $prefix != 'CI_') + { + throw new Exception('Not Implemented: Non-core load_class()'); + } + + $test = CodeIgniterTestCase::$test_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; +} + +// This is sort of meh. Should probably be mocked up with +// controllable output, so that we can test some of our +// security code. The function itself will be tested in the +// bootstrap testsuite. +// -------------------------------------------------------------------- + +function remove_invisible_characters($str, $url_encoded = TRUE) +{ + $non_displayables = array(); + + // every control character except newline (dec 10) + // carriage return (dec 13), and horizontal tab (dec 09) + + if ($url_encoded) + { + $non_displayables[] = '/%0[0-8bcef]/'; // url encoded 00-08, 11, 12, 14, 15 + $non_displayables[] = '/%1[0-9a-f]/'; // url encoded 16-31 + } + + $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127 + + do + { + $str = preg_replace($non_displayables, '', $str, -1, $count); + } + while ($count); + + return $str; +} + + +// Clean up error messages +// -------------------------------------------------------------------- + +function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered') +{ + throw new Exception('CI Error: '.$message); +} + +function show_404($page = '', $log_error = TRUE) +{ + throw new Exception('CI Error: 404'); +} + +function _exception_handler($severity, $message, $filepath, $line) +{ + throw new Exception('CI Exception: '.$message.' | '.$filepath.' | '.$line); +} + + +// We assume a few things about our environment ... +// -------------------------------------------------------------------- + +function is_php($version = '5.0.0') +{ + return ! (version_compare(PHP_VERSION, $version) < 0); +} + +function is_really_writable($file) +{ + return is_writable($file); +} + +function is_loaded() +{ + throw new Exception('Bad Isolation: mock up environment'); +} + +function log_message($level = 'error', $message, $php_error = FALSE) +{ + return TRUE; +} + +function set_status_header($code = 200, $text = '') +{ + return TRUE; +} + +// EOF \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml new file mode 100644 index 000000000..9e5e10d59 --- /dev/null +++ b/tests/phpunit.xml @@ -0,0 +1,17 @@ + + + + + + codeigniter/Setup_test.php + codeigniter/core + + + + + \ No newline at end of file -- cgit v1.2.3-24-g4f1b From c5d93cb3d4d8909507cbed548620e58d26c7c4bd Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 00:58:51 -0400 Subject: Removing some lefover code form experimenting with process isolation. --- tests/Bootstrap.php | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index ca63ff788..5a5eb6458 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -3,18 +3,10 @@ ini_set('display_errors', 1); error_reporting(E_ALL | E_STRICT); -if ( ! defined('PROJECT_BASE')) -{ - define('PROJECT_BASE', realpath(dirname(__FILE__).'/../').'/'); - - define('BASEPATH', PROJECT_BASE.'system/'); - define('APPPATH', PROJECT_BASE.'application/'); -} -// define('EXT', '.php'); - -// @todo provide a way to set various config options - +define('PROJECT_BASE', realpath(dirname(__FILE__).'/../').'/'); +define('BASEPATH', PROJECT_BASE.'system/'); +define('APPPATH', PROJECT_BASE.'application/'); // set up a highly controlled CI environment require_once './lib/common.php'; -- 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 ++++++++++++++++++++++++++++++++++++++++++----- tests/lib/common.php | 18 ++++++++---- 2 files changed, 78 insertions(+), 14 deletions(-) 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 ''; } diff --git a/tests/lib/common.php b/tests/lib/common.php index 482721a9a..994e9bc22 100644 --- a/tests/lib/common.php +++ b/tests/lib/common.php @@ -4,18 +4,24 @@ function &get_instance() { - $test = CodeIgniterTestCase::$test_instance; - return $test->ci_instance; + $test = CI_TestCase::instance(); + $instance = $test->ci_instance(); + return $instance; } -// Config Stuff | @todo High priority! // -------------------------------------------------------------------- -function get_config() { die('implement me'); } +function &get_config() { + $test = CI_TestCase::instance(); + $config = $test->ci_config_array(); + + return $config; +} function config_item($item) { - return CodeIgniterTestCase::ci_config($item); + $test = CI_TestCase::instance(); + return $test->ci_config_item($item); } // -------------------------------------------------------------------- @@ -27,7 +33,7 @@ function load_class($class, $directory = 'libraries', $prefix = 'CI_') throw new Exception('Not Implemented: Non-core load_class()'); } - $test = CodeIgniterTestCase::$test_instance; + $test = CI_TestCase::instance(); $obj =& $test->ci_core_class($class); -- cgit v1.2.3-24-g4f1b From 10ba64f9b76a25a77182d72a0a09413ccba12770 Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 01:00:27 -0400 Subject: Renamed the main test class, fixing test cases. --- tests/codeigniter/core/Config_test.php | 26 ++++++-------------------- tests/codeigniter/core/Lang_test.php | 2 +- tests/codeigniter/core/Loader_test.php | 5 ++--- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/tests/codeigniter/core/Config_test.php b/tests/codeigniter/core/Config_test.php index 628fc630b..b04dd67fa 100644 --- a/tests/codeigniter/core/Config_test.php +++ b/tests/codeigniter/core/Config_test.php @@ -1,33 +1,19 @@ ci_core_class('cfg'); - - $stub = $this->getMock($cls, NULL, array(), '', FALSE); - - //I would prefer this, but it currently - // does not work as when you try to pass - // null to setMethods it fails on an internal - // function call that expects an array =( - /* - $stub = $this->getMockBuilder($cls) - ->disableOriginalConstructor() - ->setMethods(null) - ->getMock(); - */ - - + // set predictable config values - $stub->config = array( + $this->ci_set_config(array( 'index_page' => 'index.php', 'base_url' => 'http://example.com/', 'subclass_prefix' => 'MY_' - ); - - $this->config = $stub; + )); + + $this->config = new $cls; } // -------------------------------------------------------------------- diff --git a/tests/codeigniter/core/Lang_test.php b/tests/codeigniter/core/Lang_test.php index 82e279a52..f65b335b0 100644 --- a/tests/codeigniter/core/Lang_test.php +++ b/tests/codeigniter/core/Lang_test.php @@ -1,6 +1,6 @@ ci_obj = new StdClass; // Fix get_instance() - CodeIgniterTestCase::$test_instance =& $this; $this->ci_instance($this->ci_obj); } @@ -30,7 +29,7 @@ class Loader_test extends CodeIgniterTestCase { ->will($this->returnValue(TRUE)); // Add the mock to our stdClass - $this->ci_set_instance_var('config', $config); + $this->ci_instance_var('config', $config); // Test loading as an array. $this->assertEquals(NULL, $this->_loader->library(array('table'))); -- cgit v1.2.3-24-g4f1b From f5aee9d1532b175d2dbfbb66f56e8861f34cd861 Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 01:20:40 -0400 Subject: some basic bootstrap cleanup --- tests/Bootstrap.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index 5a5eb6458..94dafdce4 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -1,13 +1,20 @@ 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(-) 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 88b296311090acdb84719148d3c722ca30bd3ed7 Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 01:21:55 -0400 Subject: Making config_item work again after I pulled it from CI_TestCase --- tests/lib/common.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/lib/common.php b/tests/lib/common.php index 994e9bc22..6d29eb0d6 100644 --- a/tests/lib/common.php +++ b/tests/lib/common.php @@ -13,15 +13,21 @@ function &get_instance() function &get_config() { $test = CI_TestCase::instance(); - $config = $test->ci_config_array(); + $config = $test->ci_get_config(); return $config; } function config_item($item) { - $test = CI_TestCase::instance(); - return $test->ci_config_item($item); + $config =& get_config(); + + if ( ! isset($config[$item])) + { + return FALSE; + } + + return $config[$item]; } // -------------------------------------------------------------------- -- cgit v1.2.3-24-g4f1b From 34bc0896ea283fefdba5213a67e6db6134b982b6 Mon Sep 17 00:00:00 2001 From: Pascal Kriete Date: Thu, 21 Apr 2011 01:22:23 -0400 Subject: Updating changes in the readme --- tests/readme.txt | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/tests/readme.txt b/tests/readme.txt index eaad2c480..27871478b 100644 --- a/tests/readme.txt +++ b/tests/readme.txt @@ -57,12 +57,12 @@ All functions in common.php should be a minimal implementation, or and mapped to a method in the test's parent class to gives us full control of their output. -### CodeIgniterTestCase Documentation +### CI_TestCase Documentation -Test cases should extend CodeIgniterTestCase. This internally -extends PHPUnit_Framework_TestCase, so you have access to all -of your usual PHPUnit methods. +Test cases should extend CI_TestCase. This internally extends +PHPUnit_Framework_TestCase, so you have access to all of your +usual PHPUnit methods. We need to provide a simple way to modify the globals and the common function output. We also need to be able to mock up @@ -70,12 +70,16 @@ the super object as we please. Current API is *not stable*. Names and implementations will change. +$this->ci_set_config($key, $val) + Set the global config variables. If key is an array, it will + replace the entire config array. They are _not_ merged. + $this->ci_instance($obj) set the object to use as the "super object", in a lot of cases this will be a simple stdClass with the attributes - you need it to have. + you need it to have. If no parameter, will return the instance. -$this->ci_set_instance_var($name, $val) +$this->ci_instance_var($name, $val) add an attribute to the super object. This is useful if you set up a simple instance in setUp and then need to add different class mockups to your super object. @@ -87,9 +91,18 @@ $this->ci_core_class($name) $cfg =& $this->ci_core_class('cfg'); // returns 'CI_Config' $cfg = new $cfg; // instantiates config and overwrites the CFG global -$this->ci_set_core_class($name, $obj); +$this->ci_set_core_class($name, $obj) An alternative way to set one of the core globals. +$this->ci_get_config() __internal__ + Returns the global config array. Internal as you shouldn't need to + call this (you're setting it, after all). Used internally to make + CI's get_config() work. + +CI_TestCase::instance() __internal__ + Returns an instance of the current test case. We force phpunit to + run with backup-globals enabled, so this will always be the instance + of the currently running test class. ## 3. Application Test: -- cgit v1.2.3-24-g4f1b From 25a6690724751d1937a8adc867ca630830b2eb6f Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 09:24:16 -0500 Subject: Updating requirements for unit tests in readme.txt --- tests/readme.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/readme.txt b/tests/readme.txt index 27871478b..b1e9b732f 100644 --- a/tests/readme.txt +++ b/tests/readme.txt @@ -19,6 +19,17 @@ format to facilitate clean api design. [see http://arrenbrecht.ch/testing/] *FIRST PUBLIC DRAFT: EVERYTHING IS SUBJECT TO CHANGE* +# Requirements + +1. PHP Unit + - pear channel-discover pear.phpunit.de + - pear install phpunit/PHPUnit + +2. vfsStream + - pear channel-discover pear.php-tools.net + - pear install pat/vfsStream-alpha + + # Test Suites: CodeIgniter bootstraps a request very directly, with very flat class -- 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/codeigniter/core/Loader_test.php | 134 ++++++++++++++++++++++----------- tests/lib/ci_testcase.php | 4 +- 2 files changed, 92 insertions(+), 46 deletions(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index c7085c439..2aa1b8cb9 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -1,5 +1,38 @@ models_dir = vfsStream::newDirectory('models')->at(vfsStreamWrapper::getRoot()); + $this->libs_dir = vfsStream::newDirectory('libraries')->at(vfsStreamWrapper::getRoot()); + $this->helpers_dir = vfsStream::newDirectory('helpers')->at(vfsStreamWrapper::getRoot()); + $this->views_dir = vfsStream::newDirectory('views')->at(vfsStreamWrapper::getRoot()); + + $this->_ci_ob_level = ob_get_level(); + $this->_ci_library_paths = array(vfsStream::url('application').'/', BASEPATH); + $this->_ci_helper_paths = array(vfsStream::url('application').'/', BASEPATH); + $this->_ci_model_paths = array(vfsStream::url('application').'/'); + $this->_ci_view_paths = array(vfsStream::url('application').'/views/' => TRUE); + } +} + + class Loader_test extends CI_TestCase { private $ci_obj; @@ -7,8 +40,7 @@ class Loader_test extends CI_TestCase { public function setUp() { // Instantiate a new loader - $cls = $this->ci_core_class('load'); - $this->_loader = new $cls; + $this->load = new Extended_Loader(); // mock up a ci instance $this->ci_obj = new StdClass; @@ -32,53 +64,67 @@ class Loader_test extends CI_TestCase { $this->ci_instance_var('config', $config); // Test loading as an array. - $this->assertEquals(NULL, $this->_loader->library(array('table'))); + $this->assertEquals(NULL, $this->load->library(array('table'))); $this->assertTrue(class_exists('CI_Table'), 'Table class exists'); $this->assertAttributeInstanceOf('CI_Table', 'table', $this->ci_obj); // Test no lib given - $this->assertEquals(FALSE, $this->_loader->library()); + $this->assertEquals(FALSE, $this->load->library()); // Test a string given to params - $this->assertEquals(NULL, $this->_loader->library('table', ' ')); + $this->assertEquals(NULL, $this->load->library('table', ' ')); } // -------------------------------------------------------------------- + public function testNonExistentModel() + { + $this->setExpectedException( + 'Exception', + 'CI Error: Unable to locate the model you have specified: ci_test_nonexistent_mode.php' + ); + + $this->load->model('ci_test_nonexistent_mode.php'); + } + + // -------------------------------------------------------------------- + public function testModels() { - // Test loading as an array. - $this->assertEquals(NULL, $this->_loader->model(array('foobar'))); + $this->ci_set_core_class('model', 'CI_Model'); + + $content = 'withContent($content) + ->at($this->load->models_dir); + + $this->assertNull($this->load->model('unit_test_model')); // Test no model given - $this->assertEquals(FALSE, $this->_loader->model('')); + $this->assertEquals(FALSE, $this->load->model('')); // Test a string given to params - $this->assertEquals(NULL, $this->_loader->model('foobar', ' ')); + // $this->assertEquals(NULL, $this->load->model('foobar', ' ')); } // -------------------------------------------------------------------- - public function testDatabase() - { - $this->assertEquals(NULL, $this->_loader->database()); - $this->assertEquals(NULL, $this->_loader->dbutil()); - } + // public function testDatabase() + // { + // $this->assertEquals(NULL, $this->load->database()); + // $this->assertEquals(NULL, $this->load->dbutil()); + // } // -------------------------------------------------------------------- - public function testView() + public function testNonExistentView() { - // I'm not entirely sure this is the proper way to handle this. - // So, let's revist it, m'kay? - try - { - $this->_loader->view('foo'); - } - catch (Exception $expected) - { - return; - } + $this->setExpectedException( + 'Exception', + 'CI Error: Unable to load the requested file: ci_test_nonexistent_view.php' + ); + + $this->load->view('ci_test_nonexistent_view', array('foo' => 'bar')); } // -------------------------------------------------------------------- @@ -86,10 +132,9 @@ class Loader_test extends CI_TestCase { public function testFile() { // I'm not entirely sure this is the proper way to handle this. - // So, let's revist it, m'kay? try { - $this->_loader->file('foo'); + $this->load->file('foo'); } catch (Exception $expected) { @@ -105,39 +150,40 @@ class Loader_test extends CI_TestCase { 'foo' => 'bar' ); - $this->assertEquals(NULL, $this->_loader->vars($vars)); - $this->assertEquals(NULL, $this->_loader->vars('foo', 'bar')); + $this->assertEquals(NULL, $this->load->vars($vars)); + $this->assertEquals(NULL, $this->load->vars('foo', 'bar')); } // -------------------------------------------------------------------- - public function testHelper() - { - $this->assertEquals(NULL, $this->_loader->helper('array')); - $this->assertEquals(NULL, $this->_loader->helper('bad')); - } + // public function testHelper() + // { + // $this->assertEquals(NULL, $this->load->helper('array')); + // $this->assertEquals(NULL, $this->load->helper('bad')); + // } // -------------------------------------------------------------------- public function testHelpers() { - $this->assertEquals(NULL, $this->_loader->helpers(array('file', 'array', 'string'))); + $this->assertEquals(NULL, $this->load->helpers(array('file', 'array', 'string'))); } // -------------------------------------------------------------------- // public function testLanguage() // { - // $this->assertEquals(NULL, $this->_loader->language('test')); + // $this->assertEquals(NULL, $this->load->language('test')); // } // -------------------------------------------------------------------- - public function testLoadConfig() - { - $this->assertEquals(NULL, $this->_loader->config('config', FALSE, TRUE)); - } - - - -} \ No newline at end of file + // public function testLoadConfig() + // { + // $this->assertEquals(NULL, $this->load->config('config', FALSE, TRUE)); + // } +} + + + + 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 98357c5865dbec43bcb79fb114469d40cf2f5367 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 11:30:23 -0500 Subject: Swap from assertEquals(FALSE, x) to just assertFalse(). Silly Greg. --- tests/codeigniter/core/Loader_test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index 2aa1b8cb9..83ee68777 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -101,7 +101,7 @@ class Loader_test extends CI_TestCase { $this->assertNull($this->load->model('unit_test_model')); // Test no model given - $this->assertEquals(FALSE, $this->load->model('')); + $this->assertFalse($this->load->model('')); // Test a string given to params // $this->assertEquals(NULL, $this->load->model('foobar', ' ')); -- cgit v1.2.3-24-g4f1b From deab6ad864f05367e2c122906f63d24286b731d1 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 11:44:11 -0500 Subject: Buttoning up model loader tests. --- tests/codeigniter/core/Loader_test.php | 39 +++++++++++++++++----------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index 83ee68777..d84928eca 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -64,7 +64,7 @@ class Loader_test extends CI_TestCase { $this->ci_instance_var('config', $config); // Test loading as an array. - $this->assertEquals(NULL, $this->load->library(array('table'))); + $this->assertNull($this->load->library(array('table'))); $this->assertTrue(class_exists('CI_Table'), 'Table class exists'); $this->assertAttributeInstanceOf('CI_Table', 'table', $this->ci_obj); @@ -100,11 +100,11 @@ class Loader_test extends CI_TestCase { $this->assertNull($this->load->model('unit_test_model')); - // Test no model given - $this->assertFalse($this->load->model('')); + // Was the model class instantiated. + $this->assertTrue(class_exists('Unit_test_model')); - // Test a string given to params - // $this->assertEquals(NULL, $this->load->model('foobar', ' ')); + // Test no model given + $this->assertNull($this->load->model('')); } // -------------------------------------------------------------------- @@ -132,14 +132,8 @@ class Loader_test extends CI_TestCase { public function testFile() { // I'm not entirely sure this is the proper way to handle this. - try - { - $this->load->file('foo'); - } - catch (Exception $expected) - { - return; - } + // $this->load->file('foo'); + } // -------------------------------------------------------------------- @@ -156,15 +150,22 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- - // public function testHelper() - // { - // $this->assertEquals(NULL, $this->load->helper('array')); - // $this->assertEquals(NULL, $this->load->helper('bad')); - // } + public function testHelper() + { + $this->assertEquals(NULL, $this->load->helper('array')); + + $this->setExpectedException( + 'Exception', + 'CI Error: Unable to load the requested file: helpers/bad_helper.php' + ); + + + $this->load->helper('bad'); + } // -------------------------------------------------------------------- - public function testHelpers() + public function testLoadingMultipleHelpers() { $this->assertEquals(NULL, $this->load->helpers(array('file', 'array', 'string'))); } -- cgit v1.2.3-24-g4f1b From 321768d902f68a929a55ef9480c22cb54d40bd34 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 12:09:33 -0500 Subject: Testing view loading. --- tests/codeigniter/core/Loader_test.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index d84928eca..782751cd7 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -117,6 +117,23 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- + public function testLoadView() + { + $this->ci_set_core_class('output', 'CI_Output'); + + $content = 'This is my test page. '; + $view = vfsStream::newFile('unit_test_view.php')->withContent($content) + ->at($this->load->views_dir); + + // Use the optional return parameter in this test, so the view is not + // run through the output class. + $this->assertEquals('This is my test page. World!', + $this->load->view('unit_test_view', array('hello' => "World!"), TRUE)); + + } + + // -------------------------------------------------------------------- + public function testNonExistentView() { $this->setExpectedException( -- cgit v1.2.3-24-g4f1b From 6858fb92133afa127eff6f11dd29abf554e1b2d1 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 12:27:23 -0500 Subject: Adding mock testing of libraries in the application directory --- tests/codeigniter/core/Loader_test.php | 58 +++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index 782751cd7..1e32c7e0a 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -53,15 +53,7 @@ class Loader_test extends CI_TestCase { public function testLibrary() { - // Mock up a config object until we - // figure out how to test the library configs - $config = $this->getMock('CI_Config', NULL, array(), '', FALSE); - $config->expects($this->any()) - ->method('load') - ->will($this->returnValue(TRUE)); - - // Add the mock to our stdClass - $this->ci_instance_var('config', $config); + $this->_setup_config_mock(); // Test loading as an array. $this->assertNull($this->load->library(array('table'))); @@ -73,22 +65,58 @@ class Loader_test extends CI_TestCase { // Test a string given to params $this->assertEquals(NULL, $this->load->library('table', ' ')); - } + } + + // -------------------------------------------------------------------- + + public function testLoadLibraryInApplicationDir() + { + $this->_setup_config_mock(); + + $content = 'withContent($content) + ->at($this->load->libs_dir); + + $this->assertNull($this->load->library('super_test_library')); + + // Was the model class instantiated. + $this->assertTrue(class_exists('Super_test_library')); + } // -------------------------------------------------------------------- + private function _setup_config_mock() + { + // Mock up a config object until we + // figure out how to test the library configs + $config = $this->getMock('CI_Config', NULL, array(), '', FALSE); + $config->expects($this->any()) + ->method('load') + ->will($this->returnValue(TRUE)); + + // Add the mock to our stdClass + $this->ci_instance_var('config', $config); + } + + // -------------------------------------------------------------------- + + public function testNonExistentModel() { $this->setExpectedException( 'Exception', - 'CI Error: Unable to locate the model you have specified: ci_test_nonexistent_mode.php' + 'CI Error: Unable to locate the model you have specified: ci_test_nonexistent_model.php' ); - $this->load->model('ci_test_nonexistent_mode.php'); + $this->load->model('ci_test_nonexistent_model.php'); } // -------------------------------------------------------------------- + /** + * @coverts CI_Loader::model + */ public function testModels() { $this->ci_set_core_class('model', 'CI_Model'); @@ -117,6 +145,9 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- + /** + * @coverts CI_Loader::view + */ public function testLoadView() { $this->ci_set_core_class('output', 'CI_Output'); @@ -134,6 +165,9 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- + /** + * @coverts CI_Loader::view + */ public function testNonExistentView() { $this->setExpectedException( -- cgit v1.2.3-24-g4f1b From 4d2bb09cbb4fc66dc4881c2ffdeee7dbaf0a3a3b Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 12:33:12 -0500 Subject: config CI_Loader tests. --- tests/codeigniter/core/Loader_test.php | 36 +++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index 1e32c7e0a..55ab9a4e5 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -195,8 +195,8 @@ class Loader_test extends CI_TestCase { 'foo' => 'bar' ); - $this->assertEquals(NULL, $this->load->vars($vars)); - $this->assertEquals(NULL, $this->load->vars('foo', 'bar')); + $this->assertNull($this->load->vars($vars)); + $this->assertNull($this->load->vars('foo', 'bar')); } // -------------------------------------------------------------------- @@ -230,12 +230,30 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- - // public function testLoadConfig() - // { - // $this->assertEquals(NULL, $this->load->config('config', FALSE, TRUE)); - // } -} - - + public function testLoadConfig() + { + $this->_setup_config_mock(); + + $this->assertNull($this->load->config('config', FALSE)); + } + + // -------------------------------------------------------------------- + public function testLoadBadConfig() + { + $this->_setup_config_mock(); + + $this->setExpectedException( + 'Exception', + 'CI Error: The configuration file foobar.php does not exist.' + ); + + $this->load->config('foobar', FALSE); + } + // -------------------------------------------------------------------- + + + + +} \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 56106630e172203858d58325dea5d2e81b226f87 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 13:10:19 -0500 Subject: load->file() tests. --- tests/codeigniter/core/Loader_test.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php index 55ab9a4e5..49679e241 100644 --- a/tests/codeigniter/core/Loader_test.php +++ b/tests/codeigniter/core/Loader_test.php @@ -101,7 +101,6 @@ class Loader_test extends CI_TestCase { // -------------------------------------------------------------------- - public function testNonExistentModel() { $this->setExpectedException( @@ -182,8 +181,22 @@ class Loader_test extends CI_TestCase { public function testFile() { - // I'm not entirely sure this is the proper way to handle this. - // $this->load->file('foo'); + $content = 'Here is a test file, which we will load now.'; + $file = vfsStream::newFile('ci_test_mock_file.php')->withContent($content) + ->at($this->load->views_dir); + + // Just like load->view(), take the output class out of the mix here. + $load = $this->load->file(vfsStream::url('application').'/views/ci_test_mock_file.php', + TRUE); + + $this->assertEquals($content, $load); + + $this->setExpectedException( + 'Exception', + 'CI Error: Unable to load the requested file: ci_test_file_not_exists' + ); + + $this->load->file('ci_test_file_not_exists', TRUE); } @@ -210,7 +223,6 @@ class Loader_test extends CI_TestCase { 'CI Error: Unable to load the requested file: helpers/bad_helper.php' ); - $this->load->helper('bad'); } -- cgit v1.2.3-24-g4f1b From b567947d38a20960aade96f9179ad6bc21f22646 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 14:34:31 -0500 Subject: Moving tests/codeigniter/helpers/Array_helper_test.php to be lower cased. Adding html_helper_test.php as well. --- tests/Bootstrap.php | 8 +++ tests/codeigniter/helpers/Array_helper_test.php | 49 ------------------ tests/codeigniter/helpers/array_helper_test.php | 49 ++++++++++++++++++ tests/codeigniter/helpers/html_helper_test.php | 67 +++++++++++++++++++++++++ tests/phpunit.xml | 5 +- 5 files changed, 127 insertions(+), 51 deletions(-) delete mode 100644 tests/codeigniter/helpers/Array_helper_test.php create mode 100644 tests/codeigniter/helpers/array_helper_test.php create mode 100644 tests/codeigniter/helpers/html_helper_test.php diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index 94dafdce4..db5ffbd52 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -17,4 +17,12 @@ define('APPPATH', PROJECT_BASE.'application/'); require_once $dir.'/lib/common.php'; require_once $dir.'/lib/ci_testcase.php'; + +// Omit files in the PEAR & PHP Paths from ending up in the coverage report +PHP_CodeCoverage_Filter::getInstance()->addDirectoryToBlacklist(PEAR_INSTALL_DIR); +PHP_CodeCoverage_Filter::getInstance()->addDirectoryToBlacklist(PHP_LIBDIR); + +// Omit Tests from the coverage reports. +// PHP_CodeCoverage_Filter::getInstance() + unset($dir); \ No newline at end of file diff --git a/tests/codeigniter/helpers/Array_helper_test.php b/tests/codeigniter/helpers/Array_helper_test.php deleted file mode 100644 index bbefdb49d..000000000 --- a/tests/codeigniter/helpers/Array_helper_test.php +++ /dev/null @@ -1,49 +0,0 @@ -my_array = array( - 'foo' => 'bar', - 'sally' => 'jim', - 'maggie' => 'bessie', - 'herb' => 'cook' - ); - } - - // ------------------------------------------------------------------------ - - public function testElementWithExistingItem() - { - $this->assertEquals(FALSE, element('testing', $this->my_array)); - - $this->assertEquals('not set', element('testing', $this->my_array, 'not set')); - - $this->assertEquals('bar', element('foo', $this->my_array)); - } - - // ------------------------------------------------------------------------ - - public function testRandomElement() - { - // Send a string, not an array to random_element - $this->assertEquals('my string', random_element('my string')); - - // Test sending an array - $this->assertEquals(TRUE, in_array(random_element($this->my_array), $this->my_array)); - } - - // ------------------------------------------------------------------------ - - public function testElements() - { - $this->assertEquals(TRUE, is_array(elements('test', $this->my_array))); - $this->assertEquals(TRUE, is_array(elements('foo', $this->my_array))); - } - -} \ No newline at end of file diff --git a/tests/codeigniter/helpers/array_helper_test.php b/tests/codeigniter/helpers/array_helper_test.php new file mode 100644 index 000000000..bbefdb49d --- /dev/null +++ b/tests/codeigniter/helpers/array_helper_test.php @@ -0,0 +1,49 @@ +my_array = array( + 'foo' => 'bar', + 'sally' => 'jim', + 'maggie' => 'bessie', + 'herb' => 'cook' + ); + } + + // ------------------------------------------------------------------------ + + public function testElementWithExistingItem() + { + $this->assertEquals(FALSE, element('testing', $this->my_array)); + + $this->assertEquals('not set', element('testing', $this->my_array, 'not set')); + + $this->assertEquals('bar', element('foo', $this->my_array)); + } + + // ------------------------------------------------------------------------ + + public function testRandomElement() + { + // Send a string, not an array to random_element + $this->assertEquals('my string', random_element('my string')); + + // Test sending an array + $this->assertEquals(TRUE, in_array(random_element($this->my_array), $this->my_array)); + } + + // ------------------------------------------------------------------------ + + public function testElements() + { + $this->assertEquals(TRUE, is_array(elements('test', $this->my_array))); + $this->assertEquals(TRUE, is_array(elements('foo', $this->my_array))); + } + +} \ No newline at end of file diff --git a/tests/codeigniter/helpers/html_helper_test.php b/tests/codeigniter/helpers/html_helper_test.php new file mode 100644 index 000000000..3b7f2b342 --- /dev/null +++ b/tests/codeigniter/helpers/html_helper_test.php @@ -0,0 +1,67 @@ +assertEquals('

foobar

', heading('foobar')); + } + + // ------------------------------------------------------------------------ + + public function testUl() + { + $expect = << +
  • foo
  • +
  • bar
  • + + +EOH; + + $expect = ltrim($expect); + + $list = array('foo', 'bar'); + + $this->assertEquals($expect, ul($list)); + + + $expect = << +
  • foo
  • +
  • bar
  • + + +EOH; + + $expect = ltrim($expect); + + $list = array('foo', 'bar'); + + $this->assertEquals($expect, ul($list, ' class="test"')); + + $this->assertEquals($expect, ul($list, array('class' => 'test'))); + } + + // ------------------------------------------------------------------------ + + public function testNBS() + { + $this->assertEquals('   ', nbs(3)); + } + + // ------------------------------------------------------------------------ + + public function testMeta() + { + $this->assertEquals("\n", meta('test', 'foo')); + + $expect = "\n"; + + $this->assertEquals($expect, meta(array('name' => 'foo'))); + + } + +} \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 9e5e10d59..1e712a1bb 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -1,17 +1,18 @@ codeigniter/Setup_test.php codeigniter/core - + codeigniter/helpers + \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 9071573bc510f127fa22ddd367b2ff46a60242cc Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 14:36:26 -0500 Subject: Adding text_helper_test --- tests/codeigniter/helpers/text_helper_test.php | 151 +++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 tests/codeigniter/helpers/text_helper_test.php diff --git a/tests/codeigniter/helpers/text_helper_test.php b/tests/codeigniter/helpers/text_helper_test.php new file mode 100644 index 000000000..aa6660ea0 --- /dev/null +++ b/tests/codeigniter/helpers/text_helper_test.php @@ -0,0 +1,151 @@ +_long_string = 'Once upon a time, a framework had no tests. It sad. So some nice people began to write tests. The more time that went on, the happier it became. Everyone was happy.'; + } + + // ------------------------------------------------------------------------ + + public function testWordLimiter() + { + $this->assertEquals('Once upon a time,…', word_limiter($this->_long_string, 4)); + $this->assertEquals('Once upon a time,…', word_limiter($this->_long_string, 4, '…')); + $this->assertEquals('', word_limiter('', 4)); + } + + // ------------------------------------------------------------------------ + + public function testCharacterLimiter() + { + $this->assertEquals('Once upon a time, a…', character_limiter($this->_long_string, 20)); + $this->assertEquals('Once upon a time, a…', character_limiter($this->_long_string, 20, '…')); + $this->assertEquals('Short', character_limiter('Short', 20)); + $this->assertEquals('Short', character_limiter('Short', 5)); + } + + // ------------------------------------------------------------------------ + + public function testAsciiToEntities() + { + $strs = array( + '“‘ “test”' => '“‘ “test”', + '†¥¨ˆøåß∂ƒ©˙∆˚¬' => '†¥¨ˆøåß∂ƒ©˙∆˚¬' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, ascii_to_entities($str)); + } + } + + // ------------------------------------------------------------------------ + + public function testEntitiesToAscii() + { + $strs = array( + '“‘ “test”' => '“‘ “test”', + '†¥¨ˆøåß∂ƒ©˙∆˚¬' => '†¥¨ˆøåß∂ƒ©˙∆˚¬' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, entities_to_ascii($str)); + } + } + + // ------------------------------------------------------------------------ + + public function testCensoredWords() + { + $censored = array('boob', 'nerd', 'ass', 'fart'); + + $strs = array( + 'Ted bobbled the ball' => 'Ted bobbled the ball', + 'Jake is a nerdo' => 'Jake is a nerdo', + 'The borg will assimilate you' => 'The borg will assimilate you', + 'Did Mary Fart?' => 'Did Mary $*#?', + 'Jake is really a boob' => 'Jake is really a $*#' + ); + + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, word_censor($str, $censored, '$*#')); + } + + // test censored words being sent as a string + $this->assertEquals('test', word_censor('test', 'test')); + } + + // ------------------------------------------------------------------------ + + public function testHighlightCode() + { + $code = ''; + $expect = "\n<?php var_dump(\$this); ?> \n\n"; + + $this->assertEquals($expect, highlight_code($code)); + } + + // ------------------------------------------------------------------------ + + public function testHighlightPhrase() + { + $strs = array( + 'this is a phrase' => 'this is a phrase', + 'this is another' => 'this is another', + 'Gimme a test, Sally' => 'Gimme a test, Sally', + 'Or tell me what this is' => 'Or tell me what this is', + '' => '' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, highlight_phrase($str, 'this is')); + } + } + + // ------------------------------------------------------------------------ + + public function testEllipsizing() + { + $strs = array( + '0' => array( + 'this is my string' => '… my string', + "here's another one" => '…nother one', + 'this one is just a bit longer' => '…bit longer', + 'short' => 'short' + ), + '.5' => array( + 'this is my string' => 'this …tring', + "here's another one" => "here'…r one", + 'this one is just a bit longer' => 'this …onger', + 'short' => 'short' + ), + '1' => array( + 'this is my string' => 'this is my…', + "here's another one" => "here's ano…", + 'this one is just a bit longer' => 'this one i…', + 'short' => 'short' + ), + ); + + foreach ($strs as $pos => $s) + { + foreach ($s as $str => $expect) + { + $this->assertEquals($expect, ellipsize($str, 10, $pos)); + } + } + } + + // ------------------------------------------------------------------------ + +} \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 052b01d9398de56e23300242f25d5317afcacf82 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 14:38:03 -0500 Subject: Adding string helper and inflector helper tests --- .../codeigniter/helpers/inflector_helper_test.php | 91 ++++++++++++++++ tests/codeigniter/helpers/string_helper_test.php | 117 +++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 tests/codeigniter/helpers/inflector_helper_test.php create mode 100644 tests/codeigniter/helpers/string_helper_test.php diff --git a/tests/codeigniter/helpers/inflector_helper_test.php b/tests/codeigniter/helpers/inflector_helper_test.php new file mode 100644 index 000000000..5e2fae9fd --- /dev/null +++ b/tests/codeigniter/helpers/inflector_helper_test.php @@ -0,0 +1,91 @@ + 'telly', + 'smellies' => 'smelly', + 'abjectnesses' => 'abjectness', + 'smells' => 'smell' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, singular($str)); + } + } + + // -------------------------------------------------------------------- + + public function testPlural() + { + $strs = array( + 'telly' => 'tellies', + 'smelly' => 'smellies', + 'abjectness' => 'abjectness', + 'smell' => 'smells', + 'witch' => 'witches' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, plural($str)); + } + } + + // -------------------------------------------------------------------- + + public function testCamelize() + { + $strs = array( + 'this is the string' => 'thisIsTheString', + 'this is another one' => 'thisIsAnotherOne', + 'i-am-playing-a-trick' => 'i-am-playing-a-trick', + 'what_do_you_think-yo?' => 'whatDoYouThink-yo?', + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, camelize($str)); + } + } + + // -------------------------------------------------------------------- + + public function testUnderscore() + { + $strs = array( + 'this is the string' => 'this_is_the_string', + 'this is another one' => 'this_is_another_one', + 'i-am-playing-a-trick' => 'i-am-playing-a-trick', + 'what_do_you_think-yo?' => 'what_do_you_think-yo?', + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, underscore($str)); + } + } + + // -------------------------------------------------------------------- + + public function testHumanize() + { + $strs = array( + 'this_is_the_string' => 'This Is The String', + 'this_is_another_one' => 'This Is Another One', + 'i-am-playing-a-trick' => 'I-am-playing-a-trick', + 'what_do_you_think-yo?' => 'What Do You Think-yo?', + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, humanize($str)); + } + } +} \ No newline at end of file diff --git a/tests/codeigniter/helpers/string_helper_test.php b/tests/codeigniter/helpers/string_helper_test.php new file mode 100644 index 000000000..71449f64a --- /dev/null +++ b/tests/codeigniter/helpers/string_helper_test.php @@ -0,0 +1,117 @@ + 'Slashes//\\', + '/var/www/html/' => 'var/www/html' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, trim_slashes($str)); + } + } + + // -------------------------------------------------------------------- + + public function testStripSlashes() + { + $this->assertEquals("This is totally foo bar'd", trim_slashes("This is totally foo bar'd")); + } + + // -------------------------------------------------------------------- + + public function testStripQuotes() + { + $strs = array( + '"me oh my!"' => 'me oh my!', + "it's a winner!" => 'its a winner!', + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, strip_quotes($str)); + } + } + + // -------------------------------------------------------------------- + + public function testQuotesToEntities() + { + $strs = array( + '"me oh my!"' => '"me oh my!"', + "it's a winner!" => 'it's a winner!', + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, quotes_to_entities($str)); + } + } + + // -------------------------------------------------------------------- + + public function testReduceDoubleSlashes() + { + $strs = array( + 'http://codeigniter.com' => 'http://codeigniter.com', + '//var/www/html/example.com/' => '/var/www/html/example.com/', + '/var/www/html//index.php' => '/var/www/html/index.php' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, reduce_double_slashes($str)); + } + } + + // -------------------------------------------------------------------- + + public function testReduceMultiples() + { + $strs = array( + 'Fred, Bill,, Joe, Jimmy' => 'Fred, Bill, Joe, Jimmy', + 'Ringo, John, Paul,,' => 'Ringo, John, Paul,' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, reduce_multiples($str)); + } + + $strs = array( + 'Fred, Bill,, Joe, Jimmy' => 'Fred, Bill, Joe, Jimmy', + 'Ringo, John, Paul,,' => 'Ringo, John, Paul' + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, reduce_multiples($str, ',', TRUE)); + } + } + + // -------------------------------------------------------------------- + + public function testRepeater() + { + $strs = array( + 'a' => 'aaaaaaaaaa', + ' ' => '          ', + '
    ' => '









    ' + + ); + + foreach ($strs as $str => $expect) + { + $this->assertEquals($expect, repeater($str, 10)); + } + } + + // -------------------------------------------------------------------- + +} \ No newline at end of file -- cgit v1.2.3-24-g4f1b From b4d93dbab7253f98613ab10e75e0ed20f06eaf19 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 14:42:33 -0500 Subject: Updating helper test classes to extend CI_TestCase --- tests/codeigniter/helpers/array_helper_test.php | 2 +- tests/codeigniter/helpers/html_helper_test.php | 2 +- tests/codeigniter/helpers/inflector_helper_test.php | 2 +- tests/codeigniter/helpers/string_helper_test.php | 2 +- tests/codeigniter/helpers/text_helper_test.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/codeigniter/helpers/array_helper_test.php b/tests/codeigniter/helpers/array_helper_test.php index bbefdb49d..fd306cee8 100644 --- a/tests/codeigniter/helpers/array_helper_test.php +++ b/tests/codeigniter/helpers/array_helper_test.php @@ -4,7 +4,7 @@ require_once(BASEPATH.'helpers/array_helper.php'); -class Array_helper_test extends PHPUnit_Framework_TestCase +class Array_helper_test extends CI_TestCase { public function setUp() { diff --git a/tests/codeigniter/helpers/html_helper_test.php b/tests/codeigniter/helpers/html_helper_test.php index 3b7f2b342..8c0e53301 100644 --- a/tests/codeigniter/helpers/html_helper_test.php +++ b/tests/codeigniter/helpers/html_helper_test.php @@ -2,7 +2,7 @@ require_once(BASEPATH.'helpers/html_helper.php'); -class Html_helper_test extends PHPUnit_Framework_TestCase +class Html_helper_test extends CI_TestCase { public function testHeading() { diff --git a/tests/codeigniter/helpers/inflector_helper_test.php b/tests/codeigniter/helpers/inflector_helper_test.php index 5e2fae9fd..e59875e4a 100644 --- a/tests/codeigniter/helpers/inflector_helper_test.php +++ b/tests/codeigniter/helpers/inflector_helper_test.php @@ -2,7 +2,7 @@ require_once(BASEPATH.'helpers/inflector_helper.php'); -class Inflector_helper_test extends PHPUnit_Framework_TestCase { +class Inflector_helper_test extends CI_TestCase { public function testSingular() diff --git a/tests/codeigniter/helpers/string_helper_test.php b/tests/codeigniter/helpers/string_helper_test.php index 71449f64a..00ba5dec7 100644 --- a/tests/codeigniter/helpers/string_helper_test.php +++ b/tests/codeigniter/helpers/string_helper_test.php @@ -2,7 +2,7 @@ require_once(BASEPATH.'helpers/string_helper.php'); -class String_helper_test extends PHPUnit_Framework_TestCase +class String_helper_test extends CI_TestCase { public function testTrimSlashes() { diff --git a/tests/codeigniter/helpers/text_helper_test.php b/tests/codeigniter/helpers/text_helper_test.php index aa6660ea0..22c834bcf 100644 --- a/tests/codeigniter/helpers/text_helper_test.php +++ b/tests/codeigniter/helpers/text_helper_test.php @@ -2,7 +2,7 @@ require_once(BASEPATH.'helpers/text_helper.php'); -class Text_helper_test extends PHPUnit_Framework_TestCase +class Text_helper_test extends CI_TestCase { private $_long_string; -- cgit v1.2.3-24-g4f1b From a7f9b251b03f7fb17251951d3024cb11fc1f881f Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 14:54:59 -0500 Subject: Parser test. --- tests/codeigniter/libraries/Parser_test.php | 42 +++++++++++------------------ tests/phpunit.xml | 1 + 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/tests/codeigniter/libraries/Parser_test.php b/tests/codeigniter/libraries/Parser_test.php index a8de108f0..3f63bd589 100644 --- a/tests/codeigniter/libraries/Parser_test.php +++ b/tests/codeigniter/libraries/Parser_test.php @@ -2,24 +2,19 @@ // OLD TEST FORMAT: DO NOT COPY -class Parser_test extends PHPUnit_Framework_TestCase -{ - static $cls; - protected $parser; - - public static function setUpBeforeClass() - { - $CI = get_instance(); - $CI->load->library('parser'); - self::$cls = get_class($CI->parser); - } +require BASEPATH.'libraries/Parser.php'; - // -------------------------------------------------------------------- +class Parser_test extends CI_TestCase +{ public function setUp() { - $cls = self::$cls; - $this->parser = new $cls; + $obj = new StdClass; + $obj->parser = new CI_Parser(); + + $this->ci_instance($obj); + + $this->parser = $obj->parser; } // -------------------------------------------------------------------- @@ -61,23 +56,23 @@ class Parser_test extends PHPUnit_Framework_TestCase } // -------------------------------------------------------------------- - + public function testParse() { $this->_parse_no_template(); $this->_parse_var_pair(); $this->_mismatched_var_pair(); } - + // -------------------------------------------------------------------- - + private function _parse_no_template() { $this->assertFalse($this->parser->parse_string('', '', TRUE)); } - + // -------------------------------------------------------------------- - + private function _parse_var_pair() { $data = array( @@ -95,9 +90,9 @@ class Parser_test extends PHPUnit_Framework_TestCase $this->assertEquals($result, $this->parser->parse_string($template, $data, TRUE)); } - + // -------------------------------------------------------------------- - + private function _mismatched_var_pair() { $data = array( @@ -117,9 +112,4 @@ class Parser_test extends PHPUnit_Framework_TestCase } // -------------------------------------------------------------------- - - // -------------------------------------------------------------------- - - // -------------------------------------------------------------------- - } \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 1e712a1bb..e07aa96a7 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -8,6 +8,7 @@ codeigniter/Setup_test.php codeigniter/core codeigniter/helpers + codeigniter/libraries But no!'; + $expect = '

      But no!

    '; + + $this->assertEquals($expect, $this->type->auto_typography($str)); + } + + // -------------------------------------------------------------------- + + private function _protect_pre() + { + $str = '

    My Sentence

    var_dump($this);
    '; + $expect = '

    My Sentence

    var_dump($this);
    '; + + $this->assertEquals($expect, $this->type->auto_typography($str)); + } + + // -------------------------------------------------------------------- + + private function _no_opening_block() + { + $str = 'My Sentence
    var_dump($this);
    '; + $expect = '

    My Sentence

    var_dump($this);
    '; + + $this->assertEquals($expect, $this->type->auto_typography($str)); + } + + // -------------------------------------------------------------------- + + public function _protect_braced_quotes() + { + $this->type->protect_braced_quotes = TRUE; + + $str = 'Test {parse="foobar"}'; + $expect = '

    Test {parse="foobar"}

    '; + + $this->assertEquals($expect, $this->type->auto_typography($str)); + + $this->type->protect_braced_quotes = FALSE; + + $str = 'Test {parse="foobar"}'; + $expect = '

    Test {parse=“foobar”}

    '; + + $this->assertEquals($expect, $this->type->auto_typography($str)); + + + } +} \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 9512ab8a22ff14a3789cba6e5ace03aed4196e23 Mon Sep 17 00:00:00 2001 From: Greg Aker Date: Thu, 21 Apr 2011 15:10:48 -0500 Subject: Adding user agent library test. Needs some work, but is a good start. --- tests/codeigniter/libraries/User_agent_test.php | 91 +++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tests/codeigniter/libraries/User_agent_test.php diff --git a/tests/codeigniter/libraries/User_agent_test.php b/tests/codeigniter/libraries/User_agent_test.php new file mode 100644 index 000000000..d1d950cd9 --- /dev/null +++ b/tests/codeigniter/libraries/User_agent_test.php @@ -0,0 +1,91 @@ +_user_agent; + + $obj = new StdClass; + $obj->agent = new CI_User_agent(); + + $this->ci_instance($obj); + + $this->agent = $obj->agent; + } + + // -------------------------------------------------------------------- + + public function testAcceptLang() + { + $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en'; + + $this->assertEquals('en', $this->agent->accept_lang()); + + unset($_SERVER['HTTP_ACCEPT_LANGUAGE']); + } + + // -------------------------------------------------------------------- + + public function testMobile() + { + // Mobile Not Set + $_SERVER['HTTP_USER_AGENT'] = $this->_mobile_ua; + $this->assertEquals('', $this->agent->mobile()); + unset($_SERVER['HTTP_USER_AGENT']); + } + + // -------------------------------------------------------------------- + + public function testUtilIsFunctions() + { + $this->assertTrue($this->agent->is_browser()); + $this->assertFalse($this->agent->is_robot()); + $this->assertFalse($this->agent->is_mobile()); + $this->assertFalse($this->agent->is_referral()); + } + + // -------------------------------------------------------------------- + + public function testAgentString() + { + $this->assertEquals($this->_user_agent, $this->agent->agent_string()); + } + + // -------------------------------------------------------------------- + + public function testBrowserInfo() + { + $this->assertEquals('Mac OS X', $this->agent->platform()); + $this->assertEquals('Safari', $this->agent->browser()); + $this->assertEquals('533.20.27', $this->agent->version()); + $this->assertEquals('', $this->agent->robot()); + $this->assertEquals('', $this->agent->referrer()); + } + + // -------------------------------------------------------------------- + + public function testCharsets() + { + $_SERVER['HTTP_ACCEPT_CHARSET'] = 'utf8'; + + $charsets = $this->agent->charsets(); + + $this->assertEquals('utf8', $charsets[0]); + + unset($_SERVER['HTTP_ACCEPT_CHARSET']); + + $this->assertFalse($this->agent->accept_charset()); + } + + // -------------------------------------------------------------------- + +} \ No newline at end of file -- cgit v1.2.3-24-g4f1b