diff options
author | Greg Aker <greg.aker@ellislab.com> | 2011-04-21 18:28:27 +0200 |
---|---|---|
committer | Greg Aker <greg.aker@ellislab.com> | 2011-04-21 18:28:27 +0200 |
commit | 8da69039f6d855eb4f88de73702155e6899d2d23 (patch) | |
tree | ba93fc1b3115f76ce3918ccd1f25423766cd8fbc | |
parent | 25a6690724751d1937a8adc867ca630830b2eb6f (diff) |
Working on tests in the loader. Have generic model mocking working with vfsStream.
-rw-r--r-- | tests/codeigniter/core/Loader_test.php | 134 | ||||
-rw-r--r-- | 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 @@ <?php +require_once 'vfsStream/vfsStream.php'; +require_once BASEPATH.'/core/Loader.php'; + +class Extended_Loader extends CI_Loader { + + /** + * Since we use paths to load up models, views, etc, we need the ability to + * mock up the file system so when core tests are run, we aren't mucking + * in the application directory. this will give finer grained control over + * these tests. So yeah, while this looks odd, I need to overwrite protected + * class vars in the loader. So here we go... + * + * @covers CI_Loader::__construct() + */ + public function __construct() + { + vfsStreamWrapper::register(); + vfsStreamWrapper::setRoot(new vfsStreamDirectory('application')); + + $this->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 = '<?php class Unit_test_model extends CI_Model {} '; + + $model = vfsStream::newFile('unit_test_model.php')->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() |