diff --git a/.gitignore b/.gitignore index aa44e5e..d475fd1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Icon? code_coverage *~ *.swp +coverage diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..019104e --- /dev/null +++ b/TESTING.md @@ -0,0 +1,30 @@ +Unit Testing Kohana +=== + +Guidelines for writing unit tests +--- + + * Use @covers - This helps provide proper code coverage + * Use providers when appropriate - This helps keep your tests simple and makes it easy to add new test cases. + * When a new feature of bug fix is applied, create a test for it. This may only consist of adding a provider. + +How to use the tests +--- + +Simply run `phpunit` from this directory. PHPUnit will grab the config settings stored in phpunit.xml and run +the tests for kohana. If everything goes ok phpunit should print a series of dots (each dot represents a test that's passed) +followed by something along the lines of `OK (520 tests, 1939 assertions)`. + +If the result is instead something like `Ok but skipped or incomplete tests` then this just means that some tests were unable to run +on your system or their implementation is not quite finished. + +By default code coverage is not calculated, if you want to collect it then you need to run `./phpunitcc` which will +run phpunit with the config in `code_coverage.xml`. Once the tests have finished running open `code_coverage/index.html` +in your browser. + +Known failing tests +--- + +NONE + + * If any other tests fail for your system, please [file a bug](http://dev.kohanaframework.org/projects/kohana3/issues/new) diff --git a/application/test_bootstrap.php b/application/test_bootstrap.php new file mode 100644 index 0000000..a20ac6b --- /dev/null +++ b/application/test_bootstrap.php @@ -0,0 +1,183 @@ += 5.3, it is recommended to disable + * deprecated notices. Disable with: E_ALL & ~E_DEPRECATED + */ +error_reporting(E_ALL | E_STRICT); + +/** + * End of standard configuration! Changing any of the code below should only be + * attempted by those with a working knowledge of Kohana internals. + * + * @see http://kohanaframework.org/guide/using.configuration + */ + +// Set the full path to the docroot +define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR); + +// Make the application relative to the docroot +if ( ! is_dir($application) AND is_dir(DOCROOT.$application)) + $application = DOCROOT.$application; + +// Make the modules relative to the docroot +if ( ! is_dir($modules) AND is_dir(DOCROOT.$modules)) + $modules = DOCROOT.$modules; + +// Make the system relative to the docroot +if ( ! is_dir($system) AND is_dir(DOCROOT.$system)) + $system = DOCROOT.$system; + +// Define the absolute paths for configured directories +define('APPPATH', realpath($application).DIRECTORY_SEPARATOR); +define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR); +define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR); + +// Clean up the configuration vars +unset($application, $modules, $system); + +// Load the base, low-level functions +require SYSPATH.'base'.EXT; + +// Load the core Kohana class +require SYSPATH.'classes/kohana/core'.EXT; + +if (is_file(APPPATH.'classes/kohana'.EXT)) +{ + // Application extends the core + require APPPATH.'classes/kohana'.EXT; +} +else +{ + // Load empty core extension + require SYSPATH.'classes/kohana'.EXT; +} + +//-- Environment setup -------------------------------------------------------- + +/** + * Set the default time zone. + * + * @see http://kohanaframework.org/guide/using.configuration + * @see http://php.net/timezones + */ +date_default_timezone_set('America/Chicago'); + +/** + * Set the default locale. + * + * @see http://kohanaframework.org/guide/using.configuration + * @see http://php.net/setlocale + */ +setlocale(LC_ALL, 'en_US.utf-8'); + +/** + * Enable the Kohana auto-loader. + * + * @see http://kohanaframework.org/guide/using.autoloading + * @see http://php.net/spl_autoload_register + */ +spl_autoload_register(array('Kohana', 'auto_load')); + +/** + * Enable the Kohana auto-loader for unserialization. + * + * @see http://php.net/spl_autoload_call + * @see http://php.net/manual/var.configuration.php#unserialize-callback-func + */ +ini_set('unserialize_callback_func', 'spl_autoload_call'); + +//-- Configuration and initialization ----------------------------------------- + +/** + * Initialize Kohana, setting the default options. + * + * The following options are available: + * + * - string base_url path, and optionally domain, of your application NULL + * - string index_file name of your index file, usually "index.php" index.php + * - string charset internal character set used for input and output utf-8 + * - string cache_dir set the internal cache directory APPPATH/cache + * - boolean errors enable or disable error handling TRUE + * - boolean profile enable or disable internal profiling TRUE + * - boolean caching enable or disable internal caching FALSE + */ +Kohana::init(array( + 'base_url' => '/', +)); + +/** + * Attach the file write to logging. Multiple writers are supported. + */ +Kohana::$log->attach(new Kohana_Log_File(APPPATH.'logs')); + +/** + * Attach a file reader to config. Multiple readers are supported. + */ +Kohana::$config->attach(new Kohana_Config_File); + +/** + * Enable modules. Modules are referenced by a relative or absolute path. + */ +Kohana::modules(array( + // 'auth' => MODPATH.'auth', // Basic authentication + // 'cache' => MODPATH.'cache', // Caching with multiple backends + // 'codebench' => MODPATH.'codebench', // Benchmarking tool + // 'database' => MODPATH.'database', // Database access + // 'image' => MODPATH.'image', // Image manipulation + // 'orm' => MODPATH.'orm', // Object Relationship Mapping + // 'oauth' => MODPATH.'oauth', // OAuth authentication + // 'pagination' => MODPATH.'pagination', // Paging of results + 'unittest' => MODPATH.'unittest', // Unit testing + // 'userguide' => MODPATH.'userguide', // User guide and API documentation + )); + +/** + * Set the routes. Each route must have a minimum of a name, a URI and a set of + * defaults for the URI. + */ +Route::set('default', '((/(/)))') + ->defaults(array( + 'controller' => 'welcome', + 'action' => 'index', + )); diff --git a/code_coverage.xml b/code_coverage.xml new file mode 100644 index 0000000..cd9a0e5 --- /dev/null +++ b/code_coverage.xml @@ -0,0 +1,18 @@ + + + + + ./system/classes/kohana/ + + + + + + + + ./system/tests/kohana/ + + + diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..254ebd2 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,13 @@ + + + + + ./system/classes/kohana/ + + + + + ./system/tests/kohana/ + + + diff --git a/phpunitcc b/phpunitcc new file mode 100755 index 0000000..8a32501 --- /dev/null +++ b/phpunitcc @@ -0,0 +1,3 @@ +#!/bin/bash + +echo -e "`phpunit --configuration code_coverage.xml $@`"