diff --git a/app/config/core.php b/app/config/core.php index 01b8d563d..28ee3f5d6 100644 --- a/app/config/core.php +++ b/app/config/core.php @@ -184,6 +184,11 @@ */ Configure::write('Acl.classname', 'DbAcl'); Configure::write('Acl.database', 'default'); +/** + * If you are on PHP 5.3 uncomment this line and correct your server timezone + * to fix the date & time related errors. + */ + //date_default_timezone_set('UTC'); /** * * Cache Engine Configuration diff --git a/app/webroot/test.php b/app/webroot/test.php index b4ac38340..4cdbd8c28 100644 --- a/app/webroot/test.php +++ b/app/webroot/test.php @@ -24,7 +24,14 @@ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License */ -error_reporting(E_ALL); +/** + * PHP 5.3 raises many notices in bootstrap. + */ +if (!defined('E_DEPRECATED')) { + define('E_DEPRECATED', 8192); +} +error_reporting(E_ALL & ~E_DEPRECATED); + set_time_limit(0); ini_set('memory_limit','128M'); ini_set('display_errors', 1); diff --git a/cake/bootstrap.php b/cake/bootstrap.php index c50974478..1aafb6237 100644 --- a/cake/bootstrap.php +++ b/cake/bootstrap.php @@ -22,6 +22,11 @@ if (!defined('PHP5')) { define('PHP5', (PHP_VERSION >= 5)); } +if (!defined('E_DEPRECATED')) { + define('E_DEPRECATED', 8192); +} +error_reporting(E_ALL & ~E_DEPRECATED); + require CORE_PATH . 'cake' . DS . 'basics.php'; $TIME_START = getMicrotime(); require CORE_PATH . 'cake' . DS . 'config' . DS . 'paths.php'; diff --git a/cake/console/cake.php b/cake/console/cake.php index db5effb85..bdfde9e27 100644 --- a/cake/console/cake.php +++ b/cake/console/cake.php @@ -135,15 +135,21 @@ class ShellDispatcher { /** * Constructor * - * @param array $args the argv. + * The execution of the script is stopped after dispatching the request with + * a status code of either 0 or 1 according to the result of the dispatch. + * + * @param array $args the argv + * @return void + * @access public */ function __construct($args = array()) { set_time_limit(0); + $this->__initConstants(); $this->parseParams($args); $this->_initEnvironment(); $this->__buildPaths(); - $this->_stop($this->dispatch()); + $this->_stop($this->dispatch() === false ? 1 : 0); } /** @@ -305,118 +311,134 @@ class ShellDispatcher { /** * Dispatches a CLI request * + * @return boolean * @access public */ function dispatch() { - if (isset($this->args[0])) { - $plugin = null; - $shell = $this->args[0]; - if (strpos($shell, '.') !== false) { - list($plugin, $shell) = explode('.', $this->args[0]); - } + $arg = $this->shiftArgs(); - $this->shell = $shell; - $this->shiftArgs(); - $this->shellName = Inflector::camelize($this->shell); - $this->shellClass = $this->shellName . 'Shell'; - - if ($this->shell === 'help') { - $this->help(); - } else { - $loaded = false; - foreach ($this->shellPaths as $path) { - $this->shellPath = $path . $this->shell . '.php'; - - $isPlugin = ($plugin && strpos($path, DS . $plugin . DS . 'vendors' . DS . 'shells' . DS) !== false); - if (($isPlugin && file_exists($this->shellPath)) || (!$plugin && file_exists($this->shellPath))) { - $loaded = true; - break; - } - } - - if ($loaded) { - if (!class_exists('Shell')) { - require CONSOLE_LIBS . 'shell.php'; - } - require $this->shellPath; - if (class_exists($this->shellClass)) { - $command = null; - if (isset($this->args[0])) { - $command = $this->args[0]; - } - $this->shellCommand = Inflector::variable($command); - $shell = new $this->shellClass($this); - - if (strtolower(get_parent_class($shell)) == 'shell') { - $shell->initialize(); - $shell->loadTasks(); - - foreach ($shell->taskNames as $task) { - if (strtolower(get_parent_class($shell)) == 'shell') { - $shell->{$task}->initialize(); - $shell->{$task}->loadTasks(); - } - } - - $task = Inflector::camelize($command); - if (in_array($task, $shell->taskNames)) { - $this->shiftArgs(); - $shell->{$task}->startup(); - if (isset($this->args[0]) && $this->args[0] == 'help') { - if (method_exists($shell->{$task}, 'help')) { - $shell->{$task}->help(); - $this->_stop(); - } else { - $this->help(); - } - } - return $shell->{$task}->execute(); - } - } - - $classMethods = get_class_methods($shell); - - $privateMethod = $missingCommand = false; - if ((in_array($command, $classMethods) || in_array(strtolower($command), $classMethods)) && strpos($command, '_', 0) === 0) { - $privateMethod = true; - } - - if (!in_array($command, $classMethods) && !in_array(strtolower($command), $classMethods)) { - $missingCommand = true; - } - - $protectedCommands = array( - 'initialize','in','out','err','hr', - 'createfile', 'isdir','copydir','object','tostring', - 'requestaction','log','cakeerror', 'shelldispatcher', - '__initconstants','__initenvironment','__construct', - 'dispatch','__bootstrap','getinput','stdout','stderr','parseparams','shiftargs' - ); - - if (in_array(strtolower($command), $protectedCommands)) { - $missingCommand = true; - } - - if ($missingCommand && method_exists($shell, 'main')) { - $shell->startup(); - return $shell->main(); - } elseif (!$privateMethod && method_exists($shell, $command)) { - $this->shiftArgs(); - $shell->startup(); - return $shell->{$command}(); - } else { - $this->stderr("Unknown {$this->shellName} command '$command'.\nFor usage, try 'cake {$this->shell} help'.\n\n"); - } - } else { - $this->stderr('Class '.$this->shellClass.' could not be loaded'); - } - } else { - $this->help(); - } - } - } else { + if (!$arg) { $this->help(); + return false; } + if ($arg == 'help') { + $this->help(); + return true; + } + + if (strpos($arg, '.') !== false) { + list($plugin, $shell) = explode('.', $arg); + } else { + $plugin = null; + $shell = $arg; + } + $this->shell = $shell; + $this->shellName = Inflector::camelize($shell); + $this->shellClass = $this->shellName . 'Shell'; + + $arg = null; + + if (isset($this->args[0])) { + $arg = $this->args[0]; + $this->shellCommand = Inflector::variable($arg); + } + + $Shell = $this->_getShell($plugin); + + if (!$Shell) { + $title = sprintf(__('Error: Class %s could not be loaded.', true), $this->shellClass); + $this->stderr($title . "\n"); + return false; + } + + $methods = array(); + + if (is_a($Shell, 'Shell')) { + $Shell->initialize(); + $Shell->loadTasks(); + + foreach ($Shell->taskNames as $task) { + if (is_a($Shell->{$task}, 'Shell')) { + $Shell->{$task}->initialize(); + $Shell->{$task}->loadTasks(); + } + } + + $task = Inflector::camelize($arg); + + if (in_array($task, $Shell->taskNames)) { + $this->shiftArgs(); + $Shell->{$task}->startup(); + + if (isset($this->args[0]) && $this->args[0] == 'help') { + if (method_exists($Shell->{$task}, 'help')) { + $Shell->{$task}->help(); + } else { + $this->help(); + } + return true; + } + return $Shell->{$task}->execute(); + } + $methods = array_diff(get_class_methods('Shell'), array('help')); + } + $methods = array_diff(get_class_methods($Shell), $methods); + $added = in_array(strtolower($arg), array_map('strtolower', $methods)); + $private = $arg[0] == '_' && method_exists($Shell, $arg); + + if (!$private) { + if ($added) { + $this->shiftArgs(); + $Shell->startup(); + return $Shell->{$arg}(); + } + if (method_exists($Shell, 'main')) { + $Shell->startup(); + return $Shell->main(); + } + } + + $title = sprintf(__('Error: Unknown %1$s command %2$s.', true), $this->shellName, $arg); + $message = sprintf(__('For usage try `cake %s help`', true), $this->shell); + $this->stderr($title . "\n" . $message . "\n"); + return false; + } +/** + * Get shell to use, either plugin shell or application shell + * + * All paths in the shellPaths property are searched. + * shell, shellPath and shellClass properties are taken into account. + * + * @param string $plugin Optionally the name of a plugin + * @return mixed False if no shell could be found or an object on success + * @access protected + */ + function _getShell($plugin = null) { + foreach ($this->shellPaths as $path) { + $this->shellPath = $path . $this->shell . '.php'; + $pluginShellPath = DS . $plugin . DS . 'vendors' . DS . 'shells' . DS; + + if ((strpos($path, $pluginShellPath) !== false || !$plugin) && file_exists($this->shellPath)) { + $loaded = true; + break; + } + } + if (!isset($loaded)) { + return false; + } + + if (!class_exists('Shell')) { + require CONSOLE_LIBS . 'shell.php'; + } + + if (!class_exists($this->shellClass)) { + require $this->shellPath; + } + if (!class_exists($this->shellClass)) { + return false; + } + $Shell = new $this->shellClass($this); + return $Shell; } /** @@ -475,7 +497,7 @@ class ShellDispatcher { * @access public */ function stderr($string) { - fwrite($this->stderr, 'Error: '. $string); + fwrite($this->stderr, $string); } /** @@ -486,13 +508,15 @@ class ShellDispatcher { */ function parseParams($params) { $this->__parseParams($params); - $defaults = array('app' => 'app', 'root' => dirname(dirname(dirname(__FILE__))), 'working' => null, 'webroot' => 'webroot'); - $params = array_merge($defaults, array_intersect_key($this->params, $defaults)); - - $isWin = array_filter(array_map('strpos', $params, array('\\'))); - + $isWin = false; + foreach ($defaults as $default => $value) { + if (strpos($params[$default], '\\') !== false) { + $isWin = true; + break; + } + } $params = str_replace('\\', '/', $params); if (!empty($params['working']) && (!isset($this->args[0]) || isset($this->args[0]) && $this->args[0]{0} !== '.')) { @@ -504,7 +528,7 @@ class ShellDispatcher { } } - if ($params['app'][0] == '/' || preg_match('/([a-zA-Z])(:)/i', $params['app'], $matches)) { + if ($params['app'][0] == '/' || preg_match('/([a-z])(:)/i', $params['app'], $matches)) { $params['root'] = dirname($params['app']); } elseif (strpos($params['app'], '/')) { $params['root'] .= '/' . dirname($params['app']); @@ -521,7 +545,7 @@ class ShellDispatcher { } /** - * Helper for recursively paraing params + * Helper for recursively parsing params * * @return array params * @access private @@ -555,16 +579,11 @@ class ShellDispatcher { /** * Removes first argument and shifts other arguments up * - * @return boolean False if there are no arguments + * @return mixed Null if there are no arguments otherwise the shifted argument * @access public */ function shiftArgs() { - if (empty($this->args)) { - return false; - } - unset($this->args[0]); - $this->args = array_values($this->args); - return true; + return array_shift($this->args); } /** @@ -603,6 +622,7 @@ class ShellDispatcher { } else { sort($shells); foreach ($shells as $shell) { + if ($shell !== 'shell.php') { $this->stdout("\t " . str_replace('.php', '', $shell)); } @@ -612,7 +632,6 @@ class ShellDispatcher { } $this->stdout("\nTo run a command, type 'cake shell_name [args]'"); $this->stdout("To get help on a specific command, type 'cake shell_name help'"); - $this->_stop(); } /** diff --git a/cake/console/libs/bake.php b/cake/console/libs/bake.php index 74979eb56..469e952ef 100644 --- a/cake/console/libs/bake.php +++ b/cake/console/libs/bake.php @@ -163,7 +163,7 @@ class BakeShell extends Shell { $object = new $model(); $modelExists = true; } else { - App::import('Model'); + App::import('Model', 'Model', false); $object = new Model(array('name' => $name, 'ds' => $this->connection)); } diff --git a/cake/console/libs/schema.php b/cake/console/libs/schema.php index d5bfb3ff7..60d959721 100644 --- a/cake/console/libs/schema.php +++ b/cake/console/libs/schema.php @@ -27,7 +27,7 @@ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ App::import('File'); -App::import('Model', 'CakeSchema'); +App::import('Model', 'CakeSchema', false); /** * Schema is a command-line database management utility for automating programmer chores. @@ -208,7 +208,7 @@ class SchemaShell extends Shell { } } $db =& ConnectionManager::getDataSource($this->Schema->connection); - $contents = "#". $Schema->name ." sql generated on: " . date('Y-m-d H:i:s') . " : ". time()."\n\n"; + $contents = "#" . $Schema->name . " sql generated on: " . date('Y-m-d H:i:s') . " : " . time() . "\n\n"; $contents .= $db->dropSchema($Schema) . "\n\n". $db->createSchema($Schema); if ($write) { if (strpos($write, '.sql') === false) { diff --git a/cake/console/libs/shell.php b/cake/console/libs/shell.php index 848ba565e..503a63111 100644 --- a/cake/console/libs/shell.php +++ b/cake/console/libs/shell.php @@ -320,7 +320,7 @@ class Shell extends Object { } if (!isset($this->{$taskName})) { - $this->err("Task '".$taskName."' could not be loaded"); + $this->err("Task '" . $taskName . "' could not be loaded"); $this->_stop(); } } @@ -363,69 +363,78 @@ class Shell extends Object { } /** - * Outputs to the stdout filehandle. + * Outputs a single or multiple messages to stdout. * - * @param string $string String to output. - * @param boolean $newline If true, the outputs gets an added newline. + * @param mixed $message A string or a an array of strings to output + * @param mixed $after Appended to message, if true a newline is used * @access public */ - function out($string, $newline = true) { - if (is_array($string)) { - $str = ''; - foreach ($string as $message) { - $str .= $message ."\n"; - } - $string = $str; + function out($message, $after = true) { + if (is_array($message)) { + $message = implode($this->nl(), $message); } - return $this->Dispatch->stdout($string, $newline); + $this->Dispatch->stdout($message . $this->nl($after), false); } /** - * Outputs to the stderr filehandle. + * Outputs a single or multiple error messages to stderr. * - * @param string $string Error text to output. + * @param mixed $message A string or a an array of strings to output + * @param mixed $after Appended to message, if true a newline is used * @access public */ - function err($string) { - if (is_array($string)) { - $str = ''; - foreach ($string as $message) { - $str .= $message ."\n"; - } - $string = $str; + function err($message, $after = true) { + if (is_array($message)) { + $message = implode($this->nl(), $message); } - return $this->Dispatch->stderr($string."\n"); + $this->Dispatch->stderr($message . $this->nl($after)); + } + +/** + * Returns a single or multiple linefeeds sequences. + * + * @param mixed $format If true returns a linefeed sequence, if false null, + * if a string is given that is returned, + * if an integer is given it is used as a multiplier to return multiple linefeed sequences + * @access public + * @return string + */ + function nl($format = true) { + if (is_string($format)) { + return $format . "\n"; + } + if (is_int($format)) { + return str_repeat("\n", $format); + } + return $format ? "\n" : null; } /** * Outputs a series of minus characters to the standard output, acts as a visual separator. * - * @param boolean $newline If true, the outputs gets an added newline. + * @param mixed $surround If true, the outputs gets surrounded by newlines. * @access public */ - function hr($newline = false) { - if ($newline) { - $this->out("\n"); - } + function hr($surround = false) { + $this->out(null, $surround); $this->out('---------------------------------------------------------------'); - if ($newline) { - $this->out("\n"); - } + $this->out(null, $surround); } - /** - * Displays a formatted error message and exits the application + * Displays a formatted error message + * and exits the application with status code 1 * - * @param string $title Title of the error message - * @param string $msg Error message + * @param string $title Title of the error + * @param string $message An optional error message * @access public */ - function error($title, $msg) { - $out = "$title\n"; - $out .= "$msg\n"; - $out .= "\n"; - $this->err($out); - $this->_stop(); + function error($title, $message = null) { + $this->err(sprintf(__('Error: %s', true), $title)); + + if (!empty($message)) { + $this->err($message); + } + $this->_stop(1); } /** diff --git a/cake/console/libs/tasks/fixture.php b/cake/console/libs/tasks/fixture.php index eca3b9da6..58a5455d0 100644 --- a/cake/console/libs/tasks/fixture.php +++ b/cake/console/libs/tasks/fixture.php @@ -74,7 +74,7 @@ class FixtureTask extends Shell { parent::__construct($dispatch); $this->path = $this->params['working'] . DS . 'tests' . DS . 'fixtures' . DS; if (!class_exists('CakeSchema')) { - App::import('Model', 'CakeSchema'); + App::import('Model', 'CakeSchema', false); } } @@ -384,7 +384,7 @@ class FixtureTask extends Shell { while (!$condition) { $condition = $this->in($prompt, null, 'WHERE 1=1 LIMIT 10'); } - App::import('Core', 'Model'); + App::import('Model', 'Model', false); $modelObject =& new Model(array('name' => $modelName, 'table' => $useTable, 'ds' => $this->connection)); $records = $modelObject->find('all', array( 'conditions' => $condition, diff --git a/cake/console/libs/tasks/model.php b/cake/console/libs/tasks/model.php index ceaec8277..6dfb2c081 100644 --- a/cake/console/libs/tasks/model.php +++ b/cake/console/libs/tasks/model.php @@ -20,6 +20,7 @@ * @since CakePHP(tm) v 1.2 * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ + /** * Task class for creating and updating model files. * @@ -80,7 +81,7 @@ class ModelTask extends Shell { * @return void **/ function startup() { - App::import('Core', 'Model', false, App::core('models')); + App::import('Model', 'Model', false); parent::startup(); } @@ -910,4 +911,4 @@ class ModelTask extends Shell { $this->Fixture->bake($className, $useTable); } } -?> \ No newline at end of file +?> diff --git a/cake/console/libs/tasks/project.php b/cake/console/libs/tasks/project.php index 6c11406dd..4b54a29d5 100644 --- a/cake/console/libs/tasks/project.php +++ b/cake/console/libs/tasks/project.php @@ -154,7 +154,7 @@ class ProjectTask extends Shell { $this->out(sprintf(__("Created: %s in %s", true), $app, $path)); $this->hr(); } else { - $this->err(" '".$app."' could not be created properly"); + $this->err(" '" . $app . "' could not be created properly"); return false; } @@ -224,7 +224,7 @@ class ProjectTask extends Shell { $File =& new File($path . 'webroot' . DS . 'index.php'); $contents = $File->read(); if (preg_match('/([\\t\\x20]*define\\(\\\'CAKE_CORE_INCLUDE_PATH\\\',[\\t\\x20\'A-z0-9]*\\);)/', $contents, $match)) { - $result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '".CAKE_CORE_INCLUDE_PATH."');", $contents); + $result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '" . CAKE_CORE_INCLUDE_PATH . "');", $contents); if (!$File->write($result)) { return false; } @@ -235,7 +235,7 @@ class ProjectTask extends Shell { $File =& new File($path . 'webroot' . DS . 'test.php'); $contents = $File->read(); if (preg_match('/([\\t\\x20]*define\\(\\\'CAKE_CORE_INCLUDE_PATH\\\',[\\t\\x20\'A-z0-9]*\\);)/', $contents, $match)) { - $result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '".CAKE_CORE_INCLUDE_PATH."');", $contents); + $result = str_replace($match[0], "\t\tdefine('CAKE_CORE_INCLUDE_PATH', '" . CAKE_CORE_INCLUDE_PATH . "');", $contents); if (!$File->write($result)) { return false; } diff --git a/cake/console/libs/tasks/view.php b/cake/console/libs/tasks/view.php index 4b0104a50..4e8e34403 100644 --- a/cake/console/libs/tasks/view.php +++ b/cake/console/libs/tasks/view.php @@ -20,7 +20,7 @@ * @since CakePHP(tm) v 1.2 * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ -App::import('Core', 'Controller'); +App::import('Controller', 'Controller', false); /** * Task class for creating and updating view files. diff --git a/cake/console/templates/default/views/form.ctp b/cake/console/templates/default/views/form.ctp index 6a451dc91..264221c3d 100644 --- a/cake/console/templates/default/views/form.ctp +++ b/cake/console/templates/default/views/form.ctp @@ -26,7 +26,7 @@
create('{$modelClass}');?>\n";?>
- ";?> + ";?> $data) { foreach ($data as $alias => $details) { if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { - echo "\t\t
  • link(__('List ".Inflector::humanize($details['controller'])."', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; - echo "\t\t
  • link(__('New ".Inflector::humanize(Inflector::underscore($alias))."', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + echo "\t\t
  • link(__('List " . Inflector::humanize($details['controller']) . "', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; $done[] = $details['controller']; } } diff --git a/cake/console/templates/default/views/home.ctp b/cake/console/templates/default/views/home.ctp index 82eb03b87..f97a8a4ef 100644 --- a/cake/console/templates/default/views/home.ctp +++ b/cake/console/templates/default/views/home.ctp @@ -1,5 +1,5 @@ Sweet, \"".Inflector::humanize($app)."\" got Baked by CakePHP!\n"; +$output = "

    Sweet, \"" . Inflector::humanize($app) . "\" got Baked by CakePHP!

    \n"; $output .=" 0): diff --git a/cake/console/templates/default/views/index.ctp b/cake/console/templates/default/views/index.ctp index a3f467cbb..e68fea588 100644 --- a/cake/console/templates/default/views/index.ctp +++ b/cake/console/templates/default/views/index.ctp @@ -89,8 +89,8 @@ echo "\n"; foreach ($associations as $type => $data) { foreach ($data as $alias => $details) { if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { - echo "\t\t
  • link(__('List ".Inflector::humanize($details['controller'])."', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; - echo "\t\t
  • link(__('New ".Inflector::humanize(Inflector::underscore($alias))."', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + echo "\t\t
  • link(__('List " . Inflector::humanize($details['controller']) . "', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; $done[] = $details['controller']; } } diff --git a/cake/console/templates/default/views/view.ctp b/cake/console/templates/default/views/view.ctp index 8f12ede99..e79f06d81 100644 --- a/cake/console/templates/default/views/view.ctp +++ b/cake/console/templates/default/views/view.ctp @@ -33,14 +33,14 @@ foreach ($fields as $field) { foreach ($associations['belongsTo'] as $alias => $details) { if ($field === $details['foreignKey']) { $isKey = true; - echo "\t\t>\n"; + echo "\t\t>\n"; echo "\t\t>\n\t\t\tlink(\${$singularVar}['{$alias}']['{$details['displayField']}'], array('controller' => '{$details['controller']}', 'action' => 'view', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?>\n\t\t\t \n\t\t\n"; break; } } } if ($isKey !== true) { - echo "\t\t>\n"; + echo "\t\t>\n"; echo "\t\t>\n\t\t\t\n\t\t\t \n\t\t\n"; } } @@ -59,8 +59,8 @@ foreach ($fields as $field) { foreach ($associations as $type => $data) { foreach ($data as $alias => $details) { if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) { - echo "\t\t
  • link(__('List ".Inflector::humanize($details['controller'])."', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; - echo "\t\t
  • link(__('New ".Inflector::humanize(Inflector::underscore($alias))."', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; + echo "\t\t
  • link(__('List " . Inflector::humanize($details['controller']) . "', true), array('controller' => '{$details['controller']}', 'action' => 'index')); ?>
  • \n"; + echo "\t\t
  • link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "', true), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>
  • \n"; $done[] = $details['controller']; } } @@ -72,12 +72,12 @@ foreach ($fields as $field) { if (!empty($associations['hasOne'])) : foreach ($associations['hasOne'] as $alias => $details): ?> @@ -111,7 +111,7 @@ foreach ($relations as $alias => $details): \n"; + echo "\t\t\n"; } ?> ";?> @@ -144,7 +144,7 @@ echo "\t\n"; \n\n";?>
      -
    • link(__('New ".Inflector::humanize(Inflector::underscore($alias))."', true), array('controller' => '{$details['controller']}', 'action' => 'add'));?>";?>
    • +
    • link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "', true), array('controller' => '{$details['controller']}', 'action' => 'add'));?>";?>
    diff --git a/cake/console/templates/skel/app_helper.php b/cake/console/templates/skel/app_helper.php index 05b94944d..66762cb58 100644 --- a/cake/console/templates/skel/app_helper.php +++ b/cake/console/templates/skel/app_helper.php @@ -26,7 +26,7 @@ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ -App::import('Core', 'Helper'); +App::import('Helper', 'Helper', false); /** * This is a placeholder class. diff --git a/cake/console/templates/skel/config/core.php b/cake/console/templates/skel/config/core.php index 5956b0f92..8108c1999 100644 --- a/cake/console/templates/skel/config/core.php +++ b/cake/console/templates/skel/config/core.php @@ -190,6 +190,11 @@ Configure::write('Acl.classname', 'DbAcl'); Configure::write('Acl.database', 'default'); +/** + * If you are on PHP 5.3 uncomment this line and correct your server timezone + * to fix the date & time related errors. + */ + //date_default_timezone_set('UTC'); /** * * Cache Engine Configuration diff --git a/cake/console/templates/skel/webroot/test.php b/cake/console/templates/skel/webroot/test.php index e0ca3a7fa..c64220950 100644 --- a/cake/console/templates/skel/webroot/test.php +++ b/cake/console/templates/skel/webroot/test.php @@ -25,7 +25,14 @@ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License */ -error_reporting(E_ALL); +/** + * PHP 5.3 raises many notices in bootstrap. + */ +if (!defined('E_DEPRECATED')) { + define('E_DEPRECATED', 8192); +} +error_reporting(E_ALL & ~E_DEPRECATED); + set_time_limit(0); ini_set('memory_limit','128M'); ini_set('display_errors', 1); diff --git a/cake/dispatcher.php b/cake/dispatcher.php index 838151861..1d1dca562 100644 --- a/cake/dispatcher.php +++ b/cake/dispatcher.php @@ -226,7 +226,7 @@ class Dispatcher extends Object { if (!isset($methods[strtolower($params['action'])])) { if ($controller->scaffold !== false) { - App::import('Core', 'Scaffold'); + App::import('Controller', 'Scaffold', false); return new Scaffold($controller, $params); } return $this->cakeError('missingAction', array(array( diff --git a/cake/libs/configure.php b/cake/libs/configure.php index ccf6e4a48..02f49bc9b 100644 --- a/cake/libs/configure.php +++ b/cake/libs/configure.php @@ -107,7 +107,7 @@ class Configure extends Object { if (isset($config['debug'])) { if ($_this->debug) { - error_reporting(E_ALL); + error_reporting(E_ALL & ~E_DEPRECATED); if (function_exists('ini_set')) { ini_set('display_errors', 1); @@ -844,7 +844,7 @@ class App extends Object { } } - if (!App::import($tempType, $plugin . $class)) { + if (!App::import($tempType, $plugin . $class, $parent)) { return false; } } @@ -866,7 +866,7 @@ class App extends Object { if ($name != null && !class_exists($name . $ext['class'])) { if ($load = $_this->__mapped($name . $ext['class'], $type, $plugin)) { if ($_this->__load($load)) { - $_this->__overload($type, $name . $ext['class']); + $_this->__overload($type, $name . $ext['class'], $parent); if ($_this->return) { $value = include $load; @@ -908,7 +908,7 @@ class App extends Object { if ($directory !== null) { $_this->__cache = true; $_this->__map($directory . $file, $name . $ext['class'], $type, $plugin); - $_this->__overload($type, $name . $ext['class']); + $_this->__overload($type, $name . $ext['class'], $parent); if ($_this->return) { $value = include $directory . $file; @@ -1058,8 +1058,8 @@ class App extends Object { * @param string $name Class name to overload * @access private */ - function __overload($type, $name) { - if (($type === 'Model' || $type === 'Helper') && strtolower($name) != 'schema') { + function __overload($type, $name, $parent) { + if (($type === 'Model' || $type === 'Helper') && $parent !== false) { Overloadable::overload($name); } } @@ -1088,10 +1088,10 @@ class App extends Object { switch ($load) { case 'model': if (!class_exists('Model')) { - App::import('Model', 'Model', false, App::core('models')); + require LIBS . 'model' . DS . 'model.php'; } if (!class_exists('AppModel')) { - App::import($type, 'AppModel', false, App::path('models')); + App::import($type, 'AppModel', false); } if ($plugin) { if (!class_exists($plugin . 'AppModel')) { diff --git a/cake/libs/controller/components/cookie.php b/cake/libs/controller/components/cookie.php index c52dd2220..3067da9d9 100644 --- a/cake/libs/controller/components/cookie.php +++ b/cake/libs/controller/components/cookie.php @@ -219,10 +219,10 @@ class CookieComponent extends Object { if (count($name) > 1) { $this->__values[$name[0]][$name[1]] = $value; - $this->__write("[".$name[0]."][".$name[1]."]", $value); + $this->__write("[" . $name[0] . "][" . $name[1] . "]", $value); } else { $this->__values[$name[0]] = $value; - $this->__write("[".$name[0]."]", $value); + $this->__write("[" . $name[0] . "]", $value); } } else { foreach ($key as $names => $value) { @@ -230,10 +230,10 @@ class CookieComponent extends Object { if (count($name) > 1) { $this->__values[$name[0]][$name[1]] = $value; - $this->__write("[".$name[0]."][".$name[1]."]", $value); + $this->__write("[" . $name[0] . "][" . $name[1] . "]", $value); } else { $this->__values[$name[0]] = $value; - $this->__write("[".$name[0]."]", $value); + $this->__write("[" . $name[0] . "]", $value); } } } @@ -296,17 +296,17 @@ class CookieComponent extends Object { $name = $this->__cookieVarNames($key); if (count($name) > 1) { if (isset($this->__values[$name[0]])) { - $this->__delete("[".$name[0]."][".$name[1]."]"); + $this->__delete("[" . $name[0] . "][" . $name[1] . "]"); unset($this->__values[$name[0]][$name[1]]); } } else { if (isset($this->__values[$name[0]])) { if (is_array($this->__values[$name[0]])) { foreach ($this->__values[$name[0]] as $key => $value) { - $this->__delete("[".$name[0]."][".$key."]"); + $this->__delete("[" . $name[0] . "][" . $key . "]"); } } - $this->__delete("[".$name[0]."]"); + $this->__delete("[" . $name[0] . "]"); unset($this->__values[$name[0]]); } } diff --git a/cake/libs/debugger.php b/cake/libs/debugger.php index 41bf616c9..46ab2c322 100644 --- a/cake/libs/debugger.php +++ b/cake/libs/debugger.php @@ -254,7 +254,7 @@ class Debugger extends Object { * @access public */ function handleError($code, $description, $file = null, $line = null, $context = null) { - if (error_reporting() == 0 || $code === 2048) { + if (error_reporting() == 0 || $code === 2048 || $code === 8192) { return; } diff --git a/cake/libs/http_socket.php b/cake/libs/http_socket.php index abe856dee..58e5bc152 100644 --- a/cake/libs/http_socket.php +++ b/cake/libs/http_socket.php @@ -212,10 +212,10 @@ class HttpSocket extends CakeSocket { } if (isset($this->request['auth']['user']) && isset($this->request['auth']['pass'])) { - $this->request['header']['Authorization'] = $this->request['auth']['method'] ." ". base64_encode($this->request['auth']['user'] .":".$this->request['auth']['pass']); + $this->request['header']['Authorization'] = $this->request['auth']['method'] . " " . base64_encode($this->request['auth']['user'] . ":" . $this->request['auth']['pass']); } if (isset($this->request['uri']['user']) && isset($this->request['uri']['pass'])) { - $this->request['header']['Authorization'] = $this->request['auth']['method'] ." ". base64_encode($this->request['uri']['user'] .":".$this->request['uri']['pass']); + $this->request['header']['Authorization'] = $this->request['auth']['method'] . " " . base64_encode($this->request['uri']['user'] . ":" . $this->request['uri']['pass']); } if (is_array($this->request['body'])) { @@ -836,7 +836,7 @@ class HttpSocket extends CakeSocket { return false; } - preg_match_all("/(.+):(.+)(?:(?lineBreak."|\$)/Uis", $header, $matches, PREG_SET_ORDER); + preg_match_all("/(.+):(.+)(?:(?lineBreak . "|\$)/Uis", $header, $matches, PREG_SET_ORDER); $header = array(); foreach ($matches as $match) { diff --git a/cake/libs/model/cake_schema.php b/cake/libs/model/cake_schema.php index deed6c838..0718895ba 100644 --- a/cake/libs/model/cake_schema.php +++ b/cake/libs/model/cake_schema.php @@ -352,7 +352,7 @@ class CakeSchema extends Object { $col = "\t\t'indexes' => array("; $props = array(); foreach ((array)$value as $key => $index) { - $props[] = "'{$key}' => array(".join(', ', $this->__values($index)).")"; + $props[] = "'{$key}' => array(" . join(', ', $this->__values($index)) . ")"; } $col .= join(', ', $props); } @@ -462,7 +462,7 @@ class CakeSchema extends Object { if (is_array($values)) { foreach ($values as $key => $val) { if (is_array($val)) { - $vals[] = "'{$key}' => array('".join("', '", $val)."')"; + $vals[] = "'{$key}' => array('" . join("', '", $val) . "')"; } else if (!is_numeric($key)) { $val = var_export($val, true); $vals[] = "'{$key}' => {$val}"; diff --git a/cake/libs/model/datasources/dbo/dbo_mysqli.php b/cake/libs/model/datasources/dbo/dbo_mysqli.php index 2115dee85..ec5f05fb3 100644 --- a/cake/libs/model/datasources/dbo/dbo_mysqli.php +++ b/cake/libs/model/datasources/dbo/dbo_mysqli.php @@ -112,9 +112,8 @@ class DboMysqli extends DboMysqlBase { function _execute($sql) { if (preg_match('/^\s*call/i', $sql)) { return $this->_executeProcedure($sql); - } else { - return mysqli_query($this->connection, $sql); } + return mysqli_query($this->connection, $sql); } /** @@ -149,15 +148,15 @@ class DboMysqli extends DboMysqlBase { if (!$result) { return array(); - } else { - $tables = array(); - - while ($line = mysqli_fetch_array($result)) { - $tables[] = $line[0]; - } - parent::listSources($tables); - return $tables; } + + $tables = array(); + + while ($line = mysqli_fetch_array($result)) { + $tables[] = $line[0]; + } + parent::listSources($tables); + return $tables; } /** @@ -212,18 +211,19 @@ class DboMysqli extends DboMysqlBase { if ($parent != null) { return $parent; } - - if ($data === null) { + if ($data === null || (is_array($data) && empty($data))) { return 'NULL'; } - if ($data === '' && $column !== 'integer' && $column !== 'float' && $column !== 'boolean') { - return "''"; + return "''"; + } + if (empty($column)) { + $column = $this->introspectType($data); } switch ($column) { case 'boolean': - $data = $this->boolean((bool)$data); + return $this->boolean((bool)$data); break; case 'integer' : case 'float' : @@ -293,7 +293,6 @@ class DboMysqli extends DboMysqlBase { if ($id !== false && !empty($id) && !empty($id[0]) && isset($id[0]['insertID'])) { return $id[0]['insertID']; } - return null; } @@ -354,11 +353,11 @@ class DboMysqli extends DboMysqlBase { function length($real) { $col = str_replace(array(')', 'unsigned'), '', $real); $limit = null; - + if (strpos($col, '(') !== false) { list($col, $limit) = explode('(', $col); } - + if ($limit != null) { return intval($limit); } @@ -408,9 +407,8 @@ class DboMysqli extends DboMysqlBase { $i++; } return $resultRow; - } else { - return false; } + return false; } /** diff --git a/cake/libs/router.php b/cake/libs/router.php index 2246d6300..9f0ae7b63 100644 --- a/cake/libs/router.php +++ b/cake/libs/router.php @@ -334,9 +334,9 @@ class Router extends Object { /** * Builds a route regular expression * - * @param string $route An empty string, or a route string "/" - * @param array $default NULL or an array describing the default route - * @param array $params An array matching the named elements in the route to regular expressions which that element should match. + * @param string $route An empty string, or a route string "/" + * @param array $default NULL or an array describing the default route + * @param array $params An array matching the named elements in the route to regular expressions which that element should match. * @return array * @see routes * @access public @@ -560,10 +560,7 @@ class Router extends Object { function compile($i) { $route = $this->routes[$i]; - if (!list($pattern, $names) = $this->writeRoute($route[0], $route[1], $route[2])) { - unset($this->routes[$i]); - return array(); - } + list($pattern, $names) = $this->writeRoute($route[0], $route[1], $route[2]); $this->routes[$i] = array( $route[0], $pattern, $names, array_merge(array('plugin' => null, 'controller' => null), (array)$route[1]), @@ -1317,9 +1314,9 @@ class Router extends Object { return $param; } - $return = preg_replace('/^(?:[\\t ]*(?:-!)+)/', '', $param); - return $return; + return preg_replace('/^(?:[\\t ]*(?:-!)+)/', '', $param); } + foreach ($param as $key => $value) { if (is_string($value)) { $return[$key] = preg_replace('/^(?:[\\t ]*(?:-!)+)/', '', $value); @@ -1394,7 +1391,9 @@ class Router extends Object { continue; } $param = $_this->stripEscape($param); - if ((!isset($options['named']) || !empty($options['named'])) && strpos($param, $_this->named['separator']) !== false) { + + $separatorIsPresent = strpos($param, $_this->named['separator']) !== false; + if ((!isset($options['named']) || !empty($options['named'])) && $separatorIsPresent) { list($key, $val) = explode($_this->named['separator'], $param, 2); $hasRule = isset($rules[$key]); $passIt = (!$hasRule && !$greedy) || ($hasRule && !Router::matchNamed($key, $val, $rules[$key], $context)); diff --git a/cake/libs/view/errors/missing_action.ctp b/cake/libs/view/errors/missing_action.ctp index 53bb01b15..787e8e089 100644 --- a/cake/libs/view/errors/missing_action.ctp +++ b/cake/libs/view/errors/missing_action.ctp @@ -26,11 +26,11 @@

    : - ".$action."", "".$controller."");?> + " . $action . "", "" . $controller . "");?>

    : - ".$controller."::", "".$action."()", APP_DIR.DS."controllers".DS.Inflector::underscore($controller).".php");?> + " . $controller . "::", "" . $action . "()", APP_DIR . DS . "controllers" . DS . Inflector::underscore($controller) . ".php");?>

     <?php
    @@ -48,5 +48,5 @@ class  extends AppController {
     

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_component_class.ctp b/cake/libs/view/errors/missing_component_class.ctp index eec14a1fc..e83b4f75b 100644 --- a/cake/libs/view/errors/missing_component_class.ctp +++ b/cake/libs/view/errors/missing_component_class.ctp @@ -26,11 +26,11 @@

    : - ". $component ."Component", "". $controller ."Controller");?> + " . $component . "Component", "" . $controller . "Controller");?>

    : - ". $component ."Component", APP_DIR.DS."controllers".DS."components".DS.$file);?> + " . $component . "Component", APP_DIR . DS . "controllers" . DS . "components" . DS . $file);?>

     <?php
    @@ -41,5 +41,5 @@ class Component extends Object {

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_component_file.ctp b/cake/libs/view/errors/missing_component_file.ctp index 5816985e8..ac8e4fce4 100644 --- a/cake/libs/view/errors/missing_component_file.ctp +++ b/cake/libs/view/errors/missing_component_file.ctp @@ -30,7 +30,7 @@

    : - ". $component ."Component", APP_DIR.DS."controllers".DS."components".DS.$file);?> + " . $component . "Component", APP_DIR . DS . "controllers" . DS . "components" . DS . $file);?>

     <?php
    @@ -41,5 +41,5 @@ class Component extends Object {

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_controller.ctp b/cake/libs/view/errors/missing_controller.ctp index 9cff61dc6..bb837a833 100644 --- a/cake/libs/view/errors/missing_controller.ctp +++ b/cake/libs/view/errors/missing_controller.ctp @@ -26,11 +26,11 @@

    : - ".$controller."");?> + " . $controller . "");?>

    : - ".$controller."", APP_DIR.DS."controllers".DS.Inflector::underscore($controller).".php");?> + " . $controller . "", APP_DIR . DS . "controllers" . DS . Inflector::underscore($controller) . ".php");?>

     <?php
    @@ -42,5 +42,5 @@ class  extends AppController {
     

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_helper_class.ctp b/cake/libs/view/errors/missing_helper_class.ctp index d26b760b2..17cb1b2df 100644 --- a/cake/libs/view/errors/missing_helper_class.ctp +++ b/cake/libs/view/errors/missing_helper_class.ctp @@ -30,7 +30,7 @@

    : - +

     <?php
    @@ -41,5 +41,5 @@ class  extends AppHelper {
     

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_helper_file.ctp b/cake/libs/view/errors/missing_helper_file.ctp index d443927d2..34d6d5dc7 100644 --- a/cake/libs/view/errors/missing_helper_file.ctp +++ b/cake/libs/view/errors/missing_helper_file.ctp @@ -1,6 +1,5 @@

    : - +

    : - +

     <?php
    @@ -41,5 +40,5 @@ class  extends AppHelper {
     

    : - -

    \ No newline at end of file + +

    diff --git a/cake/libs/view/errors/missing_layout.ctp b/cake/libs/view/errors/missing_layout.ctp index 245187cd1..d6660624b 100644 --- a/cake/libs/view/errors/missing_layout.ctp +++ b/cake/libs/view/errors/missing_layout.ctp @@ -26,13 +26,13 @@

    : - ". $file ."");?> + " . $file . "");?>

    : - ". $file ."");?> + " . $file . "");?>

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_model.ctp b/cake/libs/view/errors/missing_model.ctp index aad2e2139..76fd10498 100644 --- a/cake/libs/view/errors/missing_model.ctp +++ b/cake/libs/view/errors/missing_model.ctp @@ -30,7 +30,7 @@

    : - ". $model . "", APP_DIR.DS."models".DS.Inflector::underscore($model).".php");?> + " . $model . "", APP_DIR . DS . "models" . DS . Inflector::underscore($model) . ".php");?>

     <?php
    @@ -43,5 +43,5 @@ class  extends AppModel {
     

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_scaffolddb.ctp b/cake/libs/view/errors/missing_scaffolddb.ctp index 56635a528..1f568dfdf 100644 --- a/cake/libs/view/errors/missing_scaffolddb.ctp +++ b/cake/libs/view/errors/missing_scaffolddb.ctp @@ -30,9 +30,9 @@

    : - +

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_table.ctp b/cake/libs/view/errors/missing_table.ctp index f0c8d6757..88e3666d0 100644 --- a/cake/libs/view/errors/missing_table.ctp +++ b/cake/libs/view/errors/missing_table.ctp @@ -26,9 +26,9 @@

    : - ". $table ."", "". $model ."");?> + " . $table . "", "" . $model . "");?>

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/missing_view.ctp b/cake/libs/view/errors/missing_view.ctp index cab8ab87f..676f69253 100644 --- a/cake/libs/view/errors/missing_view.ctp +++ b/cake/libs/view/errors/missing_view.ctp @@ -26,7 +26,7 @@

    : - ". $controller."Controller::", "". $action ."()");?> + " . $controller . "Controller::", "". $action . "()");?>

    : @@ -34,5 +34,5 @@

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/private_action.ctp b/cake/libs/view/errors/private_action.ctp index 7dbf7ccc6..93d857fa0 100644 --- a/cake/libs/view/errors/private_action.ctp +++ b/cake/libs/view/errors/private_action.ctp @@ -26,9 +26,9 @@

    : - ". $controller ."::", "". $action ."()");?> + " . $controller . "::", "" . $action . "()");?>

    : - +

    \ No newline at end of file diff --git a/cake/libs/view/errors/scaffold_error.ctp b/cake/libs/view/errors/scaffold_error.ctp index dee0501e2..146aaf438 100644 --- a/cake/libs/view/errors/scaffold_error.ctp +++ b/cake/libs/view/errors/scaffold_error.ctp @@ -30,7 +30,7 @@

    : - +

     <?php
    diff --git a/cake/libs/view/helpers/paginator.php b/cake/libs/view/helpers/paginator.php
    index c1a92996c..cb9a48e31 100644
    --- a/cake/libs/view/helpers/paginator.php
    +++ b/cake/libs/view/helpers/paginator.php
    @@ -514,15 +514,12 @@ class PaginatorHelper extends AppHelper {
     				$end = $params['page'] + ($modulus  - $params['page']) + 1;
     			}
     
    -			if ($first) {
    -				if ($start > (int)$first) {
    -					if ($start == $first + 1) {
    -						$out .= $this->first($first, array('tag' => $tag, 'after' => $separator, 'separator' => $separator));
    -					} else {
    -						$out .= $this->first($first, array('tag' => $tag, 'separator' => $separator));
    -					}
    -				} elseif ($start == 2) {
    -					$out .= $this->Html->tag($tag, $this->link(1, array('page' => 1), $options)) . $separator;
    +			if ($first && $start > 1) {
    +				$offset = ($start <= (int)$first) ? $start - 1 : $first;
    +				if ($offset < $start - 1) {
    +					$out .= $this->first($offset, array('tag' => $tag, 'separator' => $separator));
    +				} else {
    +					$out .= $this->first($offset, array('tag' => $tag, 'after' => $separator, 'separator' => $separator));
     				}
     			}
     
    @@ -550,15 +547,12 @@ class PaginatorHelper extends AppHelper {
     
     			$out .= $after;
     
    -			if ($last) {
    -				if ($end <= $params['pageCount'] - (int)$last) {
    -					if ($end + 1 == $params['pageCount']) {
    -						$out .= $this->last($last, array('tag' => $tag, 'before' => $separator, 'separator' => $separator));
    -					} else {
    -						$out .= $this->last($last, array('tag' => $tag, 'separator' => $separator));
    -					}
    -				} elseif ($end == $params['pageCount'] - 1) {
    -					$out .= $separator . $this->Html->tag($tag, $this->link($params['pageCount'], array('page' => $params['pageCount']), $options));
    +			if ($last && $end < $params['pageCount']) {
    +				$offset = ($params['pageCount'] < $end + (int)$last) ? $params['pageCount'] - $end : $last;
    +				if ($offset <= $last && $params['pageCount'] - $end > $offset) {
    +					$out .= $this->last($offset, array('tag' => $tag, 'separator' => $separator));
    +				} else {
    +					$out .= $this->last($offset, array('tag' => $tag, 'before' => $separator, 'separator' => $separator));
     				}
     			}
     
    diff --git a/cake/libs/view/scaffolds/edit.ctp b/cake/libs/view/scaffolds/edit.ctp
    index faa4ec440..2ff4171bd 100644
    --- a/cake/libs/view/scaffolds/edit.ctp
    +++ b/cake/libs/view/scaffolds/edit.ctp
    @@ -41,8 +41,8 @@
     		foreach ($associations as $_type => $_data) {
     			foreach ($_data as $_alias => $_details) {
     				if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) {
    -					echo "\t\t
  • ".$html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' =>'index'))."
  • \n"; - echo "\t\t
  • ".$html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' =>'add'))."
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' =>'index')) . "
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' =>'add')) . "
  • \n"; $done[] = $_details['controller']; } } diff --git a/cake/libs/view/scaffolds/index.ctp b/cake/libs/view/scaffolds/index.ctp index 5f2220ee8..004efccf1 100644 --- a/cake/libs/view/scaffolds/index.ctp +++ b/cake/libs/view/scaffolds/index.ctp @@ -87,8 +87,8 @@ echo "\n"; foreach ($associations as $_type => $_data) { foreach ($_data as $_alias => $_details) { if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { - echo "\t\t
  • ".$html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index'))."
  • \n"; - echo "\t\t
  • ".$html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add'))."
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
  • \n"; $done[] = $_details['controller']; } } diff --git a/cake/libs/view/scaffolds/view.ctp b/cake/libs/view/scaffolds/view.ctp index ef17dbc5c..3b3de10dd 100644 --- a/cake/libs/view/scaffolds/view.ctp +++ b/cake/libs/view/scaffolds/view.ctp @@ -38,14 +38,14 @@ foreach ($scaffoldFields as $_field) { foreach ($associations['belongsTo'] as $_alias => $_details) { if ($_field === $_details['foreignKey']) { $isKey = true; - echo "\t\t".Inflector::humanize($_alias)."\n"; + echo "\t\t" . Inflector::humanize($_alias) . "\n"; echo "\t\t\n\t\t\t" . $html->link(${$singularVar}[$_alias][$_details['displayField']], array('controller' => $_details['controller'], 'action' => 'view', ${$singularVar}[$_alias][$_details['primaryKey']])) . "\n\t\t \n"; break; } } } if ($isKey !== true) { - echo "\t\t".Inflector::humanize($_field)."\n"; + echo "\t\t" . Inflector::humanize($_field) . "\n"; echo "\t\t\n\t\t\t{${$singularVar}[$modelClass][$_field]}\n \t\t\n"; } } @@ -64,8 +64,8 @@ foreach ($scaffoldFields as $_field) { foreach ($associations as $_type => $_data) { foreach ($_data as $_alias => $_details) { if ($_details['controller'] != $this->name && !in_array($_details['controller'], $done)) { - echo "\t\t
  • ".$html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index'))."
  • \n"; - echo "\t\t
  • ".$html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add'))."
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('List %s', true), Inflector::humanize($_details['controller'])), array('controller' => $_details['controller'], 'action' => 'index')) . "
  • \n"; + echo "\t\t
  • " . $html->link(sprintf(__('New %s', true), Inflector::humanize(Inflector::underscore($_alias))), array('controller' => $_details['controller'], 'action' => 'add')) . "
  • \n"; $done[] = $_details['controller']; } } @@ -88,8 +88,8 @@ foreach ($associations['hasOne'] as $_alias => $_details): ?> if ($i++ % 2 == 0) { $class = ' class="altrow"'; } - echo "\t\t".Inflector::humanize($_field)."\n"; - echo "\t\t\n\t" .${$singularVar}[$_alias][$_field] ."\n \n"; + echo "\t\t" . Inflector::humanize($_field) . "\n"; + echo "\t\t\n\t" . ${$singularVar}[$_alias][$_field] . "\n \n"; } ?> @@ -123,7 +123,7 @@ $otherSingularVar = Inflector::variable($_alias); ".Inflector::humanize($_field)."\n"; + echo "\t\t" . Inflector::humanize($_field) . "\n"; } ?> Actions @@ -138,7 +138,7 @@ $otherSingularVar = Inflector::variable($_alias); echo "\t\t\n"; foreach ($otherFields as $_field) { - echo "\t\t\t".${$otherSingularVar}[$_field]."\n"; + echo "\t\t\t" . ${$otherSingularVar}[$_field] . "\n"; } echo "\t\t\t\n"; diff --git a/cake/tests/cases/console/cake.test.php b/cake/tests/cases/console/cake.test.php index 2baede3a8..04900aa9f 100644 --- a/cake/tests/cases/console/cake.test.php +++ b/cake/tests/cases/console/cake.test.php @@ -36,6 +36,8 @@ if (!class_exists('ShellDispatcher')) { ob_end_clean(); } + +require_once CONSOLE_LIBS . 'shell.php'; /** * TestShellDispatcher class * @@ -76,6 +78,13 @@ class TestShellDispatcher extends ShellDispatcher { */ var $stopped = null; +/** + * TestShell + * + * @var mixed + * @access public + */ + var $TestShell; /** * _initEnvironment method * @@ -127,6 +136,30 @@ class TestShellDispatcher extends ShellDispatcher { */ function _stop($status = 0) { $this->stopped = 'Stopped with status: ' . $status; + return $status; + } +/** + * getShell + * + * @param mixed $plugin + * @access public + * @return mixed + */ + function getShell($plugin = null) { + return $this->_getShell($plugin); + } +/** + * _getShell + * + * @param mixed $plugin + * @access protected + * @return mixed + */ + function _getShell($plugin = null) { + if (isset($this->TestShell)) { + return $this->TestShell; + } + return parent::_getShell($plugin); } } @@ -136,7 +169,7 @@ class TestShellDispatcher extends ShellDispatcher { * @package cake * @subpackage cake.tests.cases.libs */ -class ShellDispatcherTest extends UnitTestCase { +class ShellDispatcherTest extends CakeTestCase { /** * setUp method @@ -418,6 +451,25 @@ class ShellDispatcherTest extends UnitTestCase { $Dispatcher->params = $Dispatcher->args = array(); $Dispatcher->parseParams($params); $this->assertEqual($expected, $Dispatcher->params); + + + $params = array( + 'cake.php', + '-working', + 'D:\www', + 'bake', + 'my_app', + ); + $expected = array( + 'working' => 'D:\www', + 'app' => 'www', + 'root' => 'D:', + 'webroot' => 'webroot' + ); + + $Dispatcher->params = $Dispatcher->args = array(); + $Dispatcher->parseParams($params); + $this->assertEqual($expected, $Dispatcher->params); } /** @@ -444,20 +496,418 @@ class ShellDispatcherTest extends UnitTestCase { } /** - * testDispatch method + * Verify loading of (plugin-) shells * * @access public * @return void */ - function testDispatch() { - $Dispatcher =& new TestShellDispatcher(array('sample')); - $this->assertPattern('/This is the main method called from SampleShell/', $Dispatcher->stdout); + function testGetShell() { + $this->skipIf(class_exists('SampleShell'), '%s SampleShell Class already loaded'); + $this->skipIf(class_exists('ExampleShell'), '%s ExampleShell Class already loaded'); - $Dispatcher =& new TestShellDispatcher(array('test_plugin_two.example')); - $this->assertPattern('/This is the main method called from TestPluginTwo.ExampleShell/', $Dispatcher->stdout); + $Dispatcher =& new TestShellDispatcher(); - $Dispatcher =& new TestShellDispatcher(array('test_plugin_two.welcome', 'say_hello')); - $this->assertPattern('/This is the say_hello method called from TestPluginTwo.WelcomeShell/', $Dispatcher->stdout); + $Dispatcher->shell = 'sample'; + $Dispatcher->shellName = 'Sample'; + $Dispatcher->shellClass = 'SampleShell'; + + $result = $Dispatcher->getShell(); + $this->assertIsA($result, 'SampleShell'); + + $Dispatcher =& new TestShellDispatcher(); + + $Dispatcher->shell = 'example'; + $Dispatcher->shellName = 'Example'; + $Dispatcher->shellClass = 'ExampleShell'; + + $result = $Dispatcher->getShell('test_plugin'); + $this->assertIsA($result, 'ExampleShell'); + } +/** + * Verify correct dispatch of Shell subclasses with a main method + * + * @access public + * @return void + */ + function testDispatchShellWithMain() { + Mock::generate('Shell', 'MockWithMainShell', array('main', '_secret')); + + $Dispatcher =& new TestShellDispatcher(); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('initialize'); + $Shell->expectOnce('loadTasks'); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', 'initdb'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('initdb')); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('help'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', 'help'); + $result = $Dispatcher->dispatch(); + $this->assertNull($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectNever('hr'); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', 'hr'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('hr')); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', 'dispatch'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('dispatch')); + + $Shell = new MockWithMainShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', 'idontexist'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('idontexist')); + + $Shell = new MockWithMainShell(); + $Shell->expectNever('startup'); + $Shell->expectNever('main'); + $Shell->expectNever('_secret'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main', '_secret'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + } +/** + * Verify correct dispatch of Shell subclasses without a main method + * + * @access public + * @return void + */ + function testDispatchShellWithoutMain() { + Mock::generate('Shell', 'MockWithoutMainShell', array('initDb', '_secret')); + + $Dispatcher =& new TestShellDispatcher(); + + $Shell = new MockWithoutMainShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectOnce('initialize'); + $Shell->expectOnce('loadTasks'); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithoutMainShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('initDb'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main', 'initdb'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithoutMainShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectNever('startup'); + $Shell->expectNever('hr'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main', 'hr'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + $this->assertEqual($Dispatcher->args, array('hr')); + + $Shell = new MockWithoutMainShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main', 'dispatch'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainShell(); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main', 'idontexist'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainShell(); + $Shell->expectNever('startup'); + $Shell->expectNever('_secret'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main', '_secret'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + } +/** + * Verify correct dispatch of custom classes with a main method + * + * @access public + * @return void + */ + function testDispatchNotAShellWithMain() { + Mock::generate('Object', 'MockWithMainNotAShell', + array('main', 'initialize', 'loadTasks', 'startup', '_secret')); + + $Dispatcher =& new TestShellDispatcher(); + + $Shell = new MockWithMainNotAShell(); + $Shell->setReturnValue('main', true); + $Shell->expectNever('initialize'); + $Shell->expectNever('loadTasks'); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithMainNotAShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a', 'initdb'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('initdb')); + + $Shell = new MockWithMainNotAShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a', 'hr'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('hr')); + + $Shell = new MockWithMainNotAShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a', 'dispatch'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('dispatch')); + + $Shell = new MockWithMainNotAShell(); + $Shell->setReturnValue('main', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('main'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a', 'idontexist'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array('idontexist')); + + $Shell = new MockWithMainNotAShell(); + $Shell->expectNever('startup'); + $Shell->expectNever('main'); + $Shell->expectNever('_secret'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_with_main_not_a', '_secret'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + } +/** + * Verify correct dispatch of custom classes without a main method + * + * @access public + * @return void + */ + function testDispatchNotAShellWithoutMain() { + Mock::generate('Object', 'MockWithoutMainNotAShell', + array('initDb', 'initialize', 'loadTasks', 'startup', '_secret')); + + $Dispatcher =& new TestShellDispatcher(); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectNever('initialize'); + $Shell->expectNever('loadTasks'); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectOnce('startup'); + $Shell->expectOnce('initDb'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a', 'initdb'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a', 'hr'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->setReturnValue('initDb', true); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a', 'dispatch'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->expectNever('startup'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a', 'idontexist'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + + $Shell = new MockWithoutMainNotAShell(); + $Shell->expectNever('startup'); + $Shell->expectNever('_secret'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_without_main_not_a', '_secret'); + $result = $Dispatcher->dispatch(); + $this->assertFalse($result); + } +/** + * Verify that a task is called instead of the shell if the first arg equals + * the name of the task + * + * @access public + * @return void + */ + function testDispatchTask() { + Mock::generate('Shell', 'MockWeekShell', array('main')); + Mock::generate('Shell', 'MockOnSundayTask', array('execute')); + + $Dispatcher =& new TestShellDispatcher(); + + $Shell = new MockWeekShell(); + $Shell->expectOnce('initialize'); + $Shell->expectOnce('loadTasks'); + $Shell->expectNever('startup'); + $Shell->expectNever('main'); + + $Task = new MockOnSundayTask(); + $Task->setReturnValue('execute', true); + $Task->expectOnce('initialize'); + $Task->expectOnce('loadTasks'); + $Task->expectOnce('startup'); + $Task->expectOnce('execute'); + + $Shell->MockOnSunday =& $Task; + $Shell->taskNames = array('MockOnSunday'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_week', 'mock_on_sunday'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + $this->assertEqual($Dispatcher->args, array()); + + $Shell = new MockWeekShell(); + $Task = new MockOnSundayTask(); + $Task->expectNever('execute'); + $Task->expectOnce('help'); + + $Shell->MockOnSunday =& $Task; + $Shell->taskNames = array('MockOnSunday'); + $Dispatcher->TestShell =& $Shell; + + $Dispatcher->args = array('mock_week', 'mock_on_sunday', 'help'); + $result = $Dispatcher->dispatch(); + $this->assertTrue($result); + } +/** + * Verify shifting of arguments + * + * @access public + * @return void + */ + function testShiftArgs() { + $Dispatcher =& new TestShellDispatcher(); + + $Dispatcher->args = array('a', 'b', 'c'); + $this->assertEqual($Dispatcher->shiftArgs(), 'a'); + $this->assertIdentical($Dispatcher->args, array('b', 'c')); + + $Dispatcher->args = array('a' => 'b', 'c', 'd'); + $this->assertEqual($Dispatcher->shiftArgs(), 'b'); + $this->assertIdentical($Dispatcher->args, array('c', 'd')); + + $Dispatcher->args = array('a', 'b' => 'c', 'd'); + $this->assertEqual($Dispatcher->shiftArgs(), 'a'); + $this->assertIdentical($Dispatcher->args, array('b' => 'c', 'd')); + + $Dispatcher->args = array(0 => 'a', 2 => 'b', 30 => 'c'); + $this->assertEqual($Dispatcher->shiftArgs(), 'a'); + $this->assertIdentical($Dispatcher->args, array(0 => 'b', 1 => 'c')); + + $Dispatcher->args = array(); + $this->assertNull($Dispatcher->shiftArgs()); + $this->assertIdentical($Dispatcher->args, array()); } /** @@ -502,7 +952,7 @@ class ShellDispatcherTest extends UnitTestCase { $expected = "/ CORE(\\\|\/)tests(\\\|\/)test_app(\\\|\/)vendors(\\\|\/)shells:"; $expected .= "\n\t sample"; $expected .= "\n/"; - $this->assertPattern($expected, $Dispatcher->stdout); + $this->assertPattern($expected, $Dispatcher->stdout); } } ?> \ No newline at end of file diff --git a/cake/tests/cases/console/libs/shell.test.php b/cake/tests/cases/console/libs/shell.test.php index 9672c9cd1..5acf7d6fa 100644 --- a/cake/tests/cases/console/libs/shell.test.php +++ b/cake/tests/cases/console/libs/shell.test.php @@ -52,6 +52,23 @@ Mock::generatePartial( * @subpackage cake.tests.cases.console.libs */ class TestShell extends Shell { +/** + * stopped property + * + * @var integer + * @access public + */ + var $stopped; +/** + * stop method + * + * @param integer $status + * @access protected + * @return void + */ + function _stop($status = 0) { + $this->stopped = $status; + } } /** @@ -157,20 +174,6 @@ class ShellTest extends CakeTestCase { App::build(); } -/** - * testOut method - * - * @return void - * @access public - */ - function testOut() { - $this->Shell->Dispatch->expectAt(0, 'stdout', array('Just a test', true)); - $this->Shell->out('Just a test'); - - $this->Shell->Dispatch->expectAt(1, 'stdout', array("Just\na\ntest\n", true)); - $this->Shell->out(array('Just', 'a', 'test')); - } - /** * testIn method * @@ -209,6 +212,94 @@ class ShellTest extends CakeTestCase { $this->assertEqual($result, 'n'); } +/** + * testOut method + * + * @return void + * @access public + */ + function testOut() { + $this->Shell->Dispatch->expectAt(0, 'stdout', array("Just a test\n", false)); + $this->Shell->out('Just a test'); + + $this->Shell->Dispatch->expectAt(1, 'stdout', array("Just\na\ntest\n", false)); + $this->Shell->out(array('Just', 'a', 'test')); + + $this->Shell->Dispatch->expectAt(2, 'stdout', array("Just\na\ntest\n\n", false)); + $this->Shell->out(array('Just', 'a', 'test'), 2); + } +/** + * testErr method + * + * @return void + * @access public + */ + function testErr() { + $this->Shell->Dispatch->expectAt(0, 'stderr', array("Just a test\n")); + $this->Shell->err('Just a test'); + + $this->Shell->Dispatch->expectAt(1, 'stderr', array("Just\na\ntest\n")); + $this->Shell->err(array('Just', 'a', 'test')); + + $this->Shell->Dispatch->expectAt(2, 'stderr', array("Just\na\ntest\n\n")); + $this->Shell->err(array('Just', 'a', 'test'), 2); + } +/** + * testNl + * + * @access public + * @return void + */ + function testNl() { + $this->assertEqual($this->Shell->nl(), "\n"); + $this->assertEqual($this->Shell->nl(true), "\n"); + $this->assertEqual($this->Shell->nl(false), ""); + $this->assertEqual($this->Shell->nl(2), "\n\n"); + $this->assertEqual($this->Shell->nl(1), "\n"); + $this->assertEqual($this->Shell->nl("custom"), "custom\n"); + } +/** + * testHr + * + * @access public + * @return void + */ + function testHr() { + $bar = '---------------------------------------------------------------'; + + $this->Shell->Dispatch->expectAt(0, 'stdout', array('', false)); + $this->Shell->Dispatch->expectAt(1, 'stdout', array($bar . "\n", false)); + $this->Shell->Dispatch->expectAt(2, 'stdout', array('', false)); + $this->Shell->hr(); + + $this->Shell->Dispatch->expectAt(3, 'stdout', array("\n", false)); + $this->Shell->Dispatch->expectAt(4, 'stdout', array($bar . "\n", false)); + $this->Shell->Dispatch->expectAt(5, 'stdout', array("\n", false)); + $this->Shell->hr(true); + + $this->Shell->Dispatch->expectAt(3, 'stdout', array("\n\n", false)); + $this->Shell->Dispatch->expectAt(4, 'stdout', array($bar . "\n", false)); + $this->Shell->Dispatch->expectAt(5, 'stdout', array("\n\n", false)); + $this->Shell->hr(2); + } +/** + * testError + * + * @access public + * @return void + */ + function testError() { + $this->Shell->Dispatch->expectAt(0, 'stderr', array("Error: Foo Not Found\n")); + $this->Shell->error('Foo Not Found'); + $this->assertIdentical($this->Shell->stopped, 1); + + $this->Shell->stopped = null; + + $this->Shell->Dispatch->expectAt(1, 'stderr', array("Error: Foo Not Found\n")); + $this->Shell->Dispatch->expectAt(2, 'stderr', array("Searched all...\n")); + $this->Shell->error('Foo Not Found', 'Searched all...'); + $this->assertIdentical($this->Shell->stopped, 1); + } /** * testLoadTasks method * diff --git a/cake/tests/cases/libs/http_socket.test.php b/cake/tests/cases/libs/http_socket.test.php index 4dcaabb3c..6389823d4 100644 --- a/cake/tests/cases/libs/http_socket.test.php +++ b/cake/tests/cases/libs/http_socket.test.php @@ -539,12 +539,12 @@ class HttpSocketTest extends CakeTestCase { $this->Socket->setReturnValue('read', false); $this->Socket->_mock->_call_counts['read'] = 0; $number = mt_rand(0, 9999999); - $serverResponse = "HTTP/1.x 200 OK\r\nDate: Mon, 16 Apr 2007 04:14:16 GMT\r\nServer: CakeHttp Server\r\nContent-Type: text/html\r\n\r\n

    Hello, your lucky number is ".$number."

    "; + $serverResponse = "HTTP/1.x 200 OK\r\nDate: Mon, 16 Apr 2007 04:14:16 GMT\r\nServer: CakeHttp Server\r\nContent-Type: text/html\r\n\r\n

    Hello, your lucky number is " . $number . "

    "; $this->Socket->setReturnValueAt(0, 'read', $serverResponse); $this->Socket->expect('write', array("GET / HTTP/1.1\r\nHost: www.cakephp.org\r\nConnection: close\r\nUser-Agent: CakePHP\r\n\r\n")); $this->Socket->expectCallCount('read', 2); $response = $this->Socket->request($request); - $this->assertIdentical($response, "

    Hello, your lucky number is ".$number."

    "); + $this->assertIdentical($response, "

    Hello, your lucky number is " . $number . "

    "); $this->Socket->reset(); $serverResponse = "HTTP/1.x 200 OK\r\nSet-Cookie: foo=bar\r\nDate: Mon, 16 Apr 2007 04:14:16 GMT\r\nServer: CakeHttp Server\r\nContent-Type: text/html\r\n\r\n

    This is a cookie test!

    "; diff --git a/cake/tests/cases/libs/router.test.php b/cake/tests/cases/libs/router.test.php index 54b6fa3c3..7780a4448 100644 --- a/cake/tests/cases/libs/router.test.php +++ b/cake/tests/cases/libs/router.test.php @@ -1705,5 +1705,74 @@ class RouterTest extends CakeTestCase { $this->assertEqual(Router::stripPlugin($url), $url); $this->assertEqual(Router::stripPlugin($url, null), $url); } +/** + * testCurentRoute + * + * This test needs some improvement and actual requestAction() usage + * + * @return void + * @access public + */ + function testCurentRoute() { + $url = array('controller' => 'pages', 'action' => 'display', 'government'); + Router::connect('/government', $url); + Router::parse('/government'); + $route = Router::currentRoute(); + $this->assertEqual(array_merge($url, array('plugin' => false)), $route[3]); + } +/** + * testRequestRoute + * + * @return void + * @access public + */ + function testRequestRoute() { + $url = array('controller' => 'products', 'action' => 'display', 5); + Router::connect('/government', $url); + Router::parse('/government'); + $route = Router::requestRoute(); + $this->assertEqual(array_merge($url, array('plugin' => false)), $route[3]); + + // test that the first route is matched + $newUrl = array('controller' => 'products', 'action' => 'display', 6); + Router::connect('/government', $url); + Router::parse('/government'); + $route = Router::requestRoute(); + $this->assertEqual(array_merge($url, array('plugin' => false)), $route[3]); + + // test that an unmatched route does not change the current route + $newUrl = array('controller' => 'products', 'action' => 'display', 6); + Router::connect('/actor', $url); + Router::parse('/government'); + $route = Router::requestRoute(); + $this->assertEqual(array_merge($url, array('plugin' => false)), $route[3]); + } +/** + * testGetParams + * + * @return void + * @access public + */ + function testGetParams() { + $paths = array('base' => '/', 'here' => '/products/display/5', 'webroot' => '/webroot'); + $params = array('param1' => '1', 'param2' => '2'); + Router::setRequestInfo(array($params, $paths)); + $expected = array( + 'plugin' => false, 'controller' => false, 'action' => false, + 'param1' => '1', 'param2' => '2' + ); + $this->assertEqual(Router::getparams(), $expected); + $this->assertEqual(Router::getparam('controller'), false); + $this->assertEqual(Router::getparam('param1'), '1'); + $this->assertEqual(Router::getparam('param2'), '2'); + + Router::reload(); + + $params = array('controller' => 'pages', 'action' => 'display'); + Router::setRequestInfo(array($params, $paths)); + $expected = array('plugin' => false, 'controller' => 'pages', 'action' => 'display'); + $this->assertEqual(Router::getparams(), $expected); + $this->assertEqual(Router::getparams(true), $expected); + } } ?> \ No newline at end of file diff --git a/cake/tests/cases/libs/sanitize.test.php b/cake/tests/cases/libs/sanitize.test.php index 16dc92e18..32d15a68e 100644 --- a/cake/tests/cases/libs/sanitize.test.php +++ b/cake/tests/cases/libs/sanitize.test.php @@ -311,8 +311,8 @@ class SanitizeTest extends CakeTestCase { $result = Sanitize::stripScripts($string); $this->assertEqual($result, $expected); - $string = ''."\n".''."\n".''."\n".''; - $expected = "\n".''."\n".''."\n".''; + $string = '' . "\n" . '' . "\n" . '' . "\n" . ''; + $expected = "\n" . '' . "\n" . ''."\n".''; $result = Sanitize::stripScripts($string); $this->assertEqual($result, $expected); diff --git a/cake/tests/cases/libs/view/helpers/paginator.test.php b/cake/tests/cases/libs/view/helpers/paginator.test.php index 7b7c93523..329328ae8 100644 --- a/cake/tests/cases/libs/view/helpers/paginator.test.php +++ b/cake/tests/cases/libs/view/helpers/paginator.test.php @@ -765,29 +765,116 @@ class PaginatorHelperTest extends CakeTestCase { 'options' => array('page' => 1, 'limit' => 3, 'order' => array('Client.name' => 'DESC'), 'conditions' => array())) ); $result = $this->Paginator->numbers(); - $expected = '4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '8', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/span', + ); + $this->assertTags($result, $expected); $result = $this->Paginator->numbers(array('tag' => 'li')); - $expected = '
  • 4
  • |
  • 5
  • |
  • 6
  • |
  • 7
  • |
  • 8
  • |
  • 9
  • |
  • 10
  • |
  • 11
  • |
  • 12
  • '; - $this->assertEqual($result, $expected); + $expected = array( + array('li' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/li', + ' | ', + array('li' => array('class' => 'current')), '8', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/li', + ' | ', + array('li' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/li', + ); + $this->assertTags($result, $expected); $result = $this->Paginator->numbers(array('tag' => 'li', 'separator' => false)); - $expected = '
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • '; - $this->assertEqual($result, $expected); + $expected = array( + array('li' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/li', + array('li' => array('class' => 'current')), '8', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/li', + array('li' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/li', + ); + $this->assertTags($result, $expected); $result = $this->Paginator->numbers(true); - $expected = 'first | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | last'; - $this->assertEqual($result, $expected); - + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), 'first', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '8', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:15')), 'last', '/a', '/span', + ); + $this->assertTags($result, $expected); + $this->Paginator->params['paging'] = array('Client' => array( 'page' => 1, 'current' => 3, 'count' => 30, 'prevPage' => false, 'nextPage' => 2, 'pageCount' => 15, 'defaults' => array('limit' => 3, 'step' => 1, 'order' => array('Client.name' => 'DESC'), 'conditions' => array()), 'options' => array('page' => 1, 'limit' => 3, 'order' => array('Client.name' => 'DESC'), 'conditions' => array())) ); $result = $this->Paginator->numbers(); - $expected = '1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array('class' => 'current')), '1', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ); + $this->assertTags($result, $expected); + $this->Paginator->params['paging'] = array('Client' => array( 'page' => 14, 'current' => 3, 'count' => 30, 'prevPage' => false, 'nextPage' => 2, 'pageCount' => 15, @@ -795,8 +882,26 @@ class PaginatorHelperTest extends CakeTestCase { 'options' => array('page' => 1, 'limit' => 3, 'order' => array('Client.name' => 'DESC'), 'conditions' => array())) ); $result = $this->Paginator->numbers(); - $expected = '7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:13')), '13', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '14', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:15')), '15', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 2, 'current' => 3, 'count' => 27, 'prevPage' => false, 'nextPage' => 2, 'pageCount' => 9, @@ -805,12 +910,48 @@ class PaginatorHelperTest extends CakeTestCase { ); $result = $this->Paginator->numbers(array('first' => 1)); - $expected = '1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '2', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ); + $this->assertTags($result, $expected); $result = $this->Paginator->numbers(array('last' => 1)); - $expected = '1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '2', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 15, 'current' => 3, 'count' => 30, 'prevPage' => false, 'nextPage' => 2, 'pageCount' => 15, @@ -819,8 +960,29 @@ class PaginatorHelperTest extends CakeTestCase { ); $result = $this->Paginator->numbers(array('first' => 1)); - $expected = '1...7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:13')), '13', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:14')), '14', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '15', '/span', + + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 10, 'current' => 3, 'count' => 30, 'prevPage' => false, 'nextPage' => 2, 'pageCount' => 15, @@ -829,8 +991,30 @@ class PaginatorHelperTest extends CakeTestCase { ); $result = $this->Paginator->numbers(array('first' => 1, 'last' => 1)); - $expected = '1...6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '10', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:11')), '11', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:12')), '12', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:13')), '13', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:14')), '14', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:15')), '15', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 6, 'current' => 15, 'count' => 623, 'prevPage' => 1, 'nextPage' => 1, 'pageCount' => 42, @@ -839,8 +1023,30 @@ class PaginatorHelperTest extends CakeTestCase { ); $result = $this->Paginator->numbers(array('first' => 1, 'last' => 1)); - $expected = '1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10...42'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '6', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:8')), '8', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:9')), '9', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:10')), '10', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:42')), '42', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 37, 'current' => 15, 'count' => 623, 'prevPage' => 1, 'nextPage' => 1, 'pageCount' => 42, @@ -849,8 +1055,30 @@ class PaginatorHelperTest extends CakeTestCase { ); $result = $this->Paginator->numbers(array('first' => 1, 'last' => 1)); - $expected = '1...33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:33')), '33', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:34')), '34', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:35')), '35', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:36')), '36', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '37', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:38')), '38', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:39')), '39', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:40')), '40', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:41')), '41', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:42')), '42', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array( 'Client' => array( @@ -876,8 +1104,14 @@ class PaginatorHelperTest extends CakeTestCase { ); $options = array('modulus' => 10); $result = $this->Paginator->numbers($options); - $expected = '1 | 2 | 3'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array('class' => 'current')), '1', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ); + $this->assertTags($result, $expected); $this->Paginator->params['paging'] = array('Client' => array( 'page' => 2, 'current' => 10, 'count' => 31, 'prevPage' => true, 'nextPage' => true, 'pageCount' => 4, @@ -885,8 +1119,17 @@ class PaginatorHelperTest extends CakeTestCase { 'options' => array('page' => 1, 'order' => array('Client.name' => 'DESC'), 'conditions' => array())) ); $result = $this->Paginator->numbers(); - $expected = '1 | 2 | 3 | 4'; - $this->assertEqual($result, $expected); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1/sort:Client.name/direction:DESC')), '1', '/a', '/span', + ' | ', + array('span' => array('class' => 'current')), '2', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:3/sort:Client.name/direction:DESC')), '3', '/a', '/span', + ' | ', + array('span' => array()), array('a' => array('href' => '/index/page:4/sort:Client.name/direction:DESC')), '4', '/a', '/span', + ); + $this->assertTags($result, $expected); + $this->Paginator->params['paging'] = array('Client' => array( 'page' => 4895, 'current' => 10, 'count' => 48962, 'prevPage' => 1, 'nextPage' => 1, 'pageCount' => 4897, @@ -910,11 +1153,7 @@ class PaginatorHelperTest extends CakeTestCase { ); $this->assertTags($result, $expected); - $this->Paginator->params['paging'] = array('Client' => array( - 'page' => 3, 'current' => 10, 'count' => 48962, 'prevPage' => 1, 'nextPage' => 1, 'pageCount' => 4897, - 'defaults' => array('limit' => 10), - 'options' => array('page' => 4894, 'limit' => 10, 'order' => 'Client.name DESC', 'conditions' => array())) - ); + $this->Paginator->params['paging']['Client']['page'] = 3; $result = $this->Paginator->numbers(array('first' => 2, 'modulus' => 2, 'last' => 2)); $expected = array( @@ -947,6 +1186,125 @@ class PaginatorHelperTest extends CakeTestCase { array('span' => array()), array('a' => array('href' => '/index/page:4897')), '4897', '/a', '/span', ); $this->assertTags($result, $expected); + + $result = $this->Paginator->numbers(array('first' => 5, 'modulus' => 5, 'last' => 5, 'separator' => ' - ')); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' - ', + array('span' => array('class' => 'current')), '3', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:4893')), '4893', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4894')), '4894', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4895')), '4895', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4896')), '4896', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4897')), '4897', '/a', '/span', + ); + $this->assertTags($result, $expected); + + $this->Paginator->params['paging']['Client']['page'] = 4893; + $result = $this->Paginator->numbers(array('first' => 5, 'modulus' => 4, 'last' => 5, 'separator' => ' - ')); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:4891')), '4891', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4892')), '4892', '/a', '/span', + ' - ', + array('span' => array('class' => 'current')), '4893', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4894')), '4894', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4895')), '4895', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4896')), '4896', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4897')), '4897', '/a', '/span', + ); + $this->assertTags($result, $expected); + + $this->Paginator->params['paging']['Client']['page'] = 58; + $result = $this->Paginator->numbers(array('first' => 5, 'modulus' => 4, 'last' => 5, 'separator' => ' - ')); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:5')), '5', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:56')), '56', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:57')), '57', '/a', '/span', + ' - ', + array('span' => array('class' => 'current')), '58', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:59')), '59', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:60')), '60', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:4893')), '4893', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4894')), '4894', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4895')), '4895', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4896')), '4896', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4897')), '4897', '/a', '/span', + ); + $this->assertTags($result, $expected); + + $this->Paginator->params['paging']['Client']['page'] = 5; + $result = $this->Paginator->numbers(array('first' => 5, 'modulus' => 4, 'last' => 5, 'separator' => ' - ')); + $expected = array( + array('span' => array()), array('a' => array('href' => '/index/page:1')), '1', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:2')), '2', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:3')), '3', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4')), '4', '/a', '/span', + ' - ', + array('span' => array('class' => 'current')), '5', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:6')), '6', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:7')), '7', '/a', '/span', + '...', + array('span' => array()), array('a' => array('href' => '/index/page:4893')), '4893', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4894')), '4894', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4895')), '4895', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4896')), '4896', '/a', '/span', + ' - ', + array('span' => array()), array('a' => array('href' => '/index/page:4897')), '4897', '/a', '/span', + ); + $this->assertTags($result, $expected); } /** diff --git a/cake/tests/lib/cake_reporter.php b/cake/tests/lib/cake_reporter.php index 18ab5f762..0dd954898 100644 --- a/cake/tests/lib/cake_reporter.php +++ b/cake/tests/lib/cake_reporter.php @@ -97,7 +97,6 @@ class CakeHtmlReporter extends SimpleReporter { echo "" . $this->getFailCount() . " fails and "; echo "" . $this->getExceptionCount() . " exceptions."; echo "\n"; - echo "\n\n"; } /**