Merge branch '2.0' into 2.1

Conflicts:
	lib/Cake/Config/config.php
	lib/Cake/VERSION.txt
This commit is contained in:
mark_story 2011-11-03 22:04:00 -04:00
commit 0304bb8796
105 changed files with 896 additions and 469 deletions

View file

@ -368,7 +368,7 @@ form .submit input[type=submit]:hover {
/* Form errors */
form .error {
background: #FFDACC;
-moz-order-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
font-weight: normal;

View file

@ -498,7 +498,7 @@ class SchemaShell extends Shell {
))->addSubcommand('dump', array(
'help' => __d('cake_console', 'Dump database SQL based on a schema file to stdout.'),
'parser' => array(
'options' => compact('plugin', 'path', 'file', 'name', 'connection'),
'options' => compact('plugin', 'path', 'file', 'name', 'connection', 'write'),
'arguments' => compact('name')
)
))->addSubcommand('create', array(

View file

@ -283,7 +283,7 @@ class DbConfigTask extends Shell {
$oldConfigs[] = array(
'name' => $configName,
'driver' => $info['driver'],
'datasource' => $info['datasource'],
'persistent' => $info['persistent'],
'host' => $info['host'],
'port' => $info['port'],

View file

@ -606,7 +606,7 @@ class ExtractTask extends Shell {
if (!empty($this->_exclude)) {
$exclude = array();
foreach ($this->_exclude as $e) {
if ($e[0] !== DS) {
if (DS !== '\\' && $e[0] !== DS) {
$e = DS . $e;
}
$exclude[] = preg_quote($e, '/');

View file

@ -145,7 +145,7 @@ class TestTask extends BakeTask {
$this->Template->set('fixtures', $this->_fixtures);
$this->Template->set('plugin', $plugin);
$this->Template->set(compact(
'className', 'methods', 'type', 'fullClassName', 'mock',
'className', 'methods', 'type', 'fullClassName', 'mock',
'construction', 'realType'
));
$out = $this->Template->generate('classes', 'test');

View file

@ -178,7 +178,8 @@ class ConsoleOutput {
return $text;
}
if ($this->_outputAs == self::PLAIN) {
return strip_tags($text);
$tags = implode('|', array_keys(self::$_styles));
return preg_replace('#</?(?:' . $tags . ')>#', '', $text);
}
return preg_replace_callback(
'/<(?<tag>[a-z0-9-_]+)>(?<text>.*?)<\/(\1)>/ims', array($this, '_replaceTags'), $text

View file

@ -24,7 +24,7 @@ App::uses('<?php echo $fullClassName; ?>', '<?php echo $realType; ?>');
<?php if ($mock and strtolower($type) == 'controller'): ?>
/**
* Test<?php echo $fullClassName; ?>
* Test<?php echo $fullClassName; ?>
*
*/
class Test<?php echo $fullClassName; ?> extends <?php echo $fullClassName; ?> {

View file

@ -66,7 +66,7 @@
<div class="paging">
<?php
echo "<?php\n";
echo "<?php\n";
echo "\t\techo \$this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));\n";
echo "\t\techo \$this->Paginator->numbers(array('separator' => ''));\n";
echo "\t\techo \$this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled'));\n";

View file

@ -2,7 +2,7 @@
/**
* This file is loaded automatically by the app/webroot/index.php file after core.php
*
* This file should load/create any application wide configuration settings, such as
* This file should load/create any application wide configuration settings, such as
* Caching, Logging, loading additional configuration files.
*
* You should also use this file to include any files that provide global functions/constants

View file

@ -32,7 +32,7 @@
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
/**
* Load all plugin routes. See the CakePlugin documentation on
* Load all plugin routes. See the CakePlugin documentation on
* how to customize the loading of plugin routes.
*/
CakePlugin::routes();

View file

@ -1,2 +1 @@
<?php echo '<?xml version="1.0" encoding="' . Configure::read('App.encoding') . '"?>'; ?>
<?php echo $content_for_layout; ?>

View file

@ -368,7 +368,7 @@ form .submit input[type=submit]:hover {
/* Form errors */
form .error {
background: #FFDACC;
-moz-order-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
font-weight: normal;
@ -611,7 +611,7 @@ pre {
overflow: auto;
position: relative;
-moz-border-radius: 4px;
-wekbkit-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.cake-stack-trace a {

View file

@ -131,7 +131,7 @@ abstract class BaseAuthorize {
* }}}
*
* You can use the custom CRUD operations to create additional generic permissions
* that behave like CRUD operations. Doing this will require additional columns on the
* that behave like CRUD operations. Doing this will require additional columns on the
* permissions lookup. When using with DbAcl, you'll have to add additional _admin type columns
* to the `aros_acos` table.
*

View file

@ -425,6 +425,7 @@ class AuthComponent extends Component {
*
* `$this->Auth->allow(array('edit', 'add'));` or
* `$this->Auth->allow('edit', 'add');`
* `$this->Auth->allow();` to allow all actions.
*
* allow() also supports '*' as a wildcard to mean all actions.
*
@ -452,7 +453,8 @@ class AuthComponent extends Component {
* You can use deny with either an array, or var args.
*
* `$this->Auth->deny(array('edit', 'add'));` or
* `$this->Auth->deny('edit', 'add');`
* `$this->Auth->deny('edit', 'add');` or
* `$this->Auth->deny();` to remove all items from the allowed list
*
* @param mixed $action,... Controller action name or array of actions
* @return void
@ -461,16 +463,20 @@ class AuthComponent extends Component {
*/
public function deny($action = null) {
$args = func_get_args();
if (isset($args[0]) && is_array($args[0])) {
$args = $args[0];
}
foreach ($args as $arg) {
$i = array_search($arg, $this->allowedActions);
if (is_int($i)) {
unset($this->allowedActions[$i]);
if (empty($args)) {
$this->allowedActions = array();
} else {
if (isset($args[0]) && is_array($args[0])) {
$args = $args[0];
}
foreach ($args as $arg) {
$i = array_search($arg, $this->allowedActions);
if (is_int($i)) {
unset($this->allowedActions[$i]);
}
}
$this->allowedActions = array_values($this->allowedActions);
}
$this->allowedActions = array_values($this->allowedActions);
}
/**
@ -519,7 +525,7 @@ class AuthComponent extends Component {
* Logs a user out, and returns the login action to redirect to.
* Triggers the logout() method of all the authenticate objects, so they can perform
* custom logout logic. AuthComponent will remove the session data, so
* there is no need to do that in an authentication object. Logging out
* there is no need to do that in an authentication object. Logging out
* will also renew the session id. This helps mitigate issues with session replays.
*
* @return string AuthComponent::$logoutRedirect

View file

@ -91,14 +91,18 @@ class RequestHandlerComponent extends Component {
* @param array $settings Array of settings.
*/
public function __construct(ComponentCollection $collection, $settings = array()) {
$this->addInputType('xml', array(array($this, 'convertXml')));
parent::__construct($collection, $settings);
$this->addInputType('xml', array(array($this, 'convertXml')));
$Controller = $collection->getController();
$this->request = $Controller->request;
$this->response = $Controller->response;
}
/**
* Checks to see if a file extension has been parsed by the Router, or if the
* HTTP_ACCEPT_TYPE has matches only one content type with the supported extensions.
* If there is only one matching type between the supported content types & extensions,
* If there is only one matching type between the supported content types & extensions,
* and the requested mime-types, RequestHandler::$ext is set to that value.
*
* @param Controller $controller A reference to the controller
@ -107,8 +111,6 @@ class RequestHandlerComponent extends Component {
* @see Router::parseExtensions()
*/
public function initialize($controller, $settings = array()) {
$this->request = $controller->request;
$this->response = $controller->response;
if (isset($this->request->params['ext'])) {
$this->ext = $this->request->params['ext'];
}

View file

@ -805,6 +805,7 @@ class Controller extends Object {
*/
public function setAction($action) {
$this->request->action = $action;
$this->view = $action;
$args = func_get_args();
unset($args[0]);
return call_user_func_array(array(&$this, $action), $args);
@ -878,7 +879,8 @@ class Controller extends Object {
list($plugin, $className) = pluginSplit($model);
$this->request->params['models'][$className] = compact('plugin', 'className');
}
} if (!empty($this->modelClass) && ($this->uses === false || $this->uses === array())) {
}
if (!empty($this->modelClass) && ($this->uses === false || $this->uses === array())) {
$this->request->params['models'][$this->modelClass] = array('plugin' => $this->plugin, 'className' => $this->modelClass);
}

View file

@ -119,12 +119,7 @@ class ExceptionRenderer {
}
if (Configure::read('debug') == 0) {
$parentClass = get_parent_class($this);
if ($parentClass != __CLASS__) {
$method = 'error400';
}
$parentMethods = (array)get_class_methods($parentClass);
if (in_array($method, $parentMethods)) {
if ($method == '_cakeError') {
$method = 'error400';
}
if ($code == 500) {
@ -223,11 +218,15 @@ class ExceptionRenderer {
* @return void
*/
public function error500($error) {
$message = $error->getMessage();
if (Configure::read('debug') == 0) {
$message = __d('cake', 'An Internal Error Has Occurred');
}
$url = $this->controller->request->here();
$code = ($error->getCode() > 500 && $error->getCode() < 506) ? $error->getCode() : 500;
$this->controller->response->statusCode($code);
$this->controller->set(array(
'name' => __d('cake', 'An Internal Error Has Occurred'),
'name' => $message,
'message' => h($url),
'error' => $error,
));

View file

@ -18,6 +18,7 @@
*/
App::uses('DboSource', 'Model/Datasource');
App::uses('String', 'Utility');
/**
* DBO implementation for the SQLite3 DBMS.
@ -249,7 +250,7 @@ class Sqlite extends DboSource {
if (in_array($col, array('text', 'integer', 'float', 'boolean', 'timestamp', 'date', 'datetime', 'time'))) {
return $col;
}
if (strpos($col, 'varchar') !== false) {
if (strpos($col, 'varchar') !== false || strpos($col, 'char') !== false) {
return 'string';
}
if (in_array($col, array('blob', 'clob'))) {
@ -281,7 +282,7 @@ class Sqlite extends DboSource {
$last = strripos($querystring, 'FROM');
if ($last !== false) {
$selectpart = substr($querystring, 7, $last - 8);
$selects = explode(',', $selectpart);
$selects = String::tokenize($selectpart, ',', '(', ')');
}
} elseif (strpos($querystring, 'PRAGMA table_info') === 0) {
$selects = array('cid', 'name', 'type', 'notnull', 'dflt_value', 'pk');

View file

@ -990,7 +990,7 @@ class DboSource extends DataSource {
$queryData = $this->_scrubQueryData($queryData);
$null = null;
$array = array();
$array = array('callbacks' => $queryData['callbacks']);
$linkedModels = array();
$bypass = false;
@ -1043,7 +1043,11 @@ class DboSource extends DataSource {
return false;
}
$filtered = $this->_filterResults($resultSet, $model);
$filtered = array();
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$filtered = $this->_filterResults($resultSet, $model);
}
if ($model->recursive > -1) {
foreach ($_associations as $type) {
@ -1071,7 +1075,9 @@ class DboSource extends DataSource {
}
}
}
$this->_filterResults($resultSet, $model, $filtered);
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$this->_filterResults($resultSet, $model, $filtered);
}
}
if (!is_null($recursive)) {
@ -1162,7 +1168,9 @@ class DboSource extends DataSource {
}
}
}
$this->_filterResults($fetch, $model);
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$this->_filterResults($fetch, $model);
}
return $this->_mergeHasMany($resultSet, $fetch, $association, $model, $linkModel);
} elseif ($type === 'hasAndBelongsToMany') {
$ins = $fetch = array();
@ -2093,6 +2101,7 @@ class DboSource extends DataSource {
static $base = null;
if ($base === null) {
$base = array_fill_keys(array('conditions', 'fields', 'joins', 'order', 'limit', 'offset', 'group'), array());
$base['callbacks'] = null;
}
return (array)$data + $base;
}

View file

@ -16,6 +16,7 @@
* @since CakePHP(tm) v 2.0
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
/**
* CakeResponse is responsible for managing the response text, status and headers of a HTTP response.
*
@ -185,6 +186,7 @@ class CakeResponse {
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'mpga' => 'audio/mpeg',
'ogg' => 'audio/ogg',
'ra' => 'audio/x-realaudio',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
@ -347,7 +349,14 @@ class CakeResponse {
$codeMessage = $this->_statusCodes[$this->_status];
$this->_sendHeader("{$this->_protocol} {$this->_status} {$codeMessage}");
$this->_sendHeader('Content-Type', "{$this->_contentType}; charset={$this->_charset}");
$shouldSetLength = empty($this->_headers['Content-Length']) && !in_array($this->_status, range(301, 307));
if ($shouldSetLength && !$this->outputCompressed()) {
if (ini_get('mbstring.func_overload') & 2 && function_exists('mb_strlen')) {
$this->_headers['Content-Length'] = mb_strlen($this->_body, '8bit');
} else {
$this->_headers['Content-Length'] = strlen($this->_body);
}
}
foreach ($this->_headers as $header => $value) {
$this->_sendHeader($header, $value);
}
@ -643,6 +652,15 @@ class CakeResponse {
return $compressionEnabled && ob_start('ob_gzhandler');
}
/**
* Returns whether the resulting output will be compressed by PHP
*
* @return boolean
*/
public function outputCompressed() {
return ini_get("zlib.output_compression") === '1' || in_array('ob_gzhandler', ob_list_handlers());
}
/**
* Sets the correct headers to instruct the browser to dowload the response as a file.
*

View file

@ -315,6 +315,9 @@ class Dispatcher {
}
$response->type($contentType);
}
if (!$compressionEnabled) {
$response->header('Content-Length', filesize($assetFile));
}
$response->cache(filemtime($assetFile));
$response->send();
ob_clean();

View file

@ -280,11 +280,11 @@ class CakeRoute {
$separatorIsPresent = strpos($param, $namedConfig['separator']) !== false;
if ((!isset($this->options['named']) || !empty($this->options['named'])) && $separatorIsPresent) {
list($key, $val) = explode($namedConfig['separator'], $param, 2);
$val = urldecode($val);
$val = rawurldecode($val);
$hasRule = isset($rules[$key]);
$passIt = (!$hasRule && !$greedy) || ($hasRule && !$this->_matchNamed($val, $rules[$key], $context));
if ($passIt) {
$pass[] = $param;
$pass[] = rawurldecode($param);
} else {
if (preg_match_all('/\[([A-Za-z0-9_-]+)?\]/', $key, $matches, PREG_SET_ORDER)) {
$matches = array_reverse($matches);
@ -305,7 +305,7 @@ class CakeRoute {
$named = array_merge_recursive($named, array($key => $val));
}
} else {
$pass[] = $param;
$pass[] = rawurldecode($param);
}
}
return array($pass, $named);
@ -471,7 +471,7 @@ class CakeRoute {
}
if (is_array($params['pass'])) {
$params['pass'] = implode('/', $params['pass']);
$params['pass'] = implode('/', array_map('rawurlencode', $params['pass']));
}
$namedConfig = Router::namedConfig();
@ -482,10 +482,10 @@ class CakeRoute {
foreach ($params['named'] as $key => $value) {
if (is_array($value)) {
foreach ($value as $namedKey => $namedValue) {
$named[] = $key . "[$namedKey]" . $separator . $namedValue;
$named[] = $key . "[$namedKey]" . $separator . rawurlencode($namedValue);
}
} else {
$named[] = $key . $separator . $value;
$named[] = $key . $separator . rawurlencode($value);
}
}
$params['pass'] = $params['pass'] . '/' . implode('/', $named);

View file

@ -433,7 +433,7 @@ class Router {
Router::connect($url,
array(
'plugin' => $plugin,
'controller' => $urlName,
'controller' => $urlName,
'action' => $params['action'],
'[method]' => $params['method']
),

View file

@ -19,6 +19,7 @@
require_once CAKE . 'basics.php';
App::uses('Folder', 'Utility');
App::uses('CakeResponse', 'Network');
/**
* BasicsTest class
@ -234,6 +235,14 @@ class BasicsTest extends CakeTestCase {
'n' => '&nbsp;'
);
$this->assertEqual($expected, $result);
$obj = new stdClass();
$result = h($obj);
$this->assertEquals('(object)stdClass', $result);
$obj = new CakeResponse(array('body' => 'Body content'));
$result = h($obj);
$this->assertEquals('Body content', $result);
}
/**

View file

@ -157,7 +157,7 @@ class ApcEngineTest extends CakeTestCase {
$result = Cache::read('test_decrement', 'apc');
$this->assertEqual(2, $result);
}
/**

View file

@ -352,7 +352,7 @@ class FileEngineTest extends CakeTestCase {
/**
* Testing the mask setting in FileEngine
*
*
* @return void
*/
public function testMaskSetting() {

View file

@ -24,13 +24,13 @@ class TestMemcacheEngine extends MemcacheEngine {
/**
* public accessor to _parseServerString
*
* @param string $server
* @param string $server
* @return array
*/
public function parseServerString($server) {
return $this->_parseServerString($server);
}
public function setMemcache($memcache) {
$this->_Memcache = $memcache;
}

View file

@ -145,7 +145,7 @@ class WincacheEngineTest extends CakeTestCase {
$result = Cache::read('test_decrement', 'wincache');
$this->assertEqual(2, $result);
}
/**

View file

@ -81,7 +81,7 @@ class AclShellTest extends CakeTestCase {
$this->Task->expects($this->at(4))->method('out')
->with($this->stringContains('[3] Gandalf'));
$this->Task->expects($this->at(6))->method('out')
->with($this->stringContains('[5] MyModel.2'));
@ -217,7 +217,7 @@ class AclShellTest extends CakeTestCase {
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create');
$this->Task->expects($this->at(0))->method('out')
->with($this->stringContains('Permission denied'), true);
$this->Task->deny();
$node = $this->Task->Acl->Aro->node(array('model' => 'AuthUser', 'foreign_key' => 2));
@ -264,7 +264,7 @@ class AclShellTest extends CakeTestCase {
->with($this->matchesRegularExpression('/Permission .*granted/'), true);
$this->Task->expects($this->at(1))->method('out')
->with($this->matchesRegularExpression('/Permission .*inherited/'), true);
$this->Task->args = array('AuthUser.2', 'ROOT/Controller1', 'create');
$this->Task->grant();
@ -302,7 +302,7 @@ class AclShellTest extends CakeTestCase {
public function testInitDb() {
$this->Task->expects($this->once())->method('dispatchShell')
->with('schema create DbAcl');
$this->Task->initdb();
}
}

View file

@ -84,10 +84,10 @@ class BakeShellTest extends CakeTestCase {
$this->Shell->DbConfig = $this->getMock('DbConfigTask', array(), array(&$this->Dispatcher));
$this->Shell->DbConfig->expects($this->once())->method('getConfig')->will($this->returnValue('test'));
$this->Shell->Model->expects($this->never())->method('getName');
$this->Shell->Model->expects($this->once())->method('bake')->will($this->returnValue(true));
$this->Shell->Controller->expects($this->once())->method('bake')->will($this->returnValue(true));
$this->Shell->View->expects($this->once())->method('execute');

View file

@ -146,7 +146,7 @@ class CommandListShellTest extends CakeTestCase {
$output = $this->Shell->stdout->output;
$find = '<shell name="sample" call_as="sample" provider="app" help="sample -h"/>';
$find = '<shell name="sample" call_as="sample" provider="app" help="sample -h"/>';
$this->assertContains($find, $output);
$find = '<shell name="bake" call_as="bake" provider="CORE" help="bake -h"/>';

View file

@ -184,7 +184,7 @@ class ShellTest extends CakeTestCase {
$this->assertTrue(isset($this->Shell->Comment));
$this->assertInstanceOf('Comment', $this->Shell->Comment);
$this->assertEqual($this->Shell->modelClass, 'Comment');
App::build();
}
@ -832,7 +832,7 @@ TEXT;
/**
* Testing camel cased naming of tasks
*
*
* @return void
*/
public function testShellNaming() {

View file

@ -40,7 +40,7 @@ class DbConfigTaskTest extends CakeTestCase {
$out = $this->getMock('ConsoleOutput', array(), array(), '', false);
$in = $this->getMock('ConsoleInput', array(), array(), '', false);
$this->Task = $this->getMock('DbConfigTask',
$this->Task = $this->getMock('DbConfigTask',
array('in', 'out', 'err', 'hr', 'createFile', '_stop', '_checkUnitTest', '_verify'),
array($out, $out, $in)
);

View file

@ -188,7 +188,7 @@ class FixtureTaskTest extends CakeTestCase {
$this->Task->connection = 'test';
$this->Task->path = '/my/path/';
$result = $this->Task->bake('Article', false, array(
'fromTable' => true,
'fromTable' => true,
'schema' => 'Article',
'records' => false
));
@ -209,7 +209,7 @@ class FixtureTaskTest extends CakeTestCase {
$this->Task->expects($this->at(0))->method('createFile')
->with($filename, $this->stringContains('class ArticleFixture'));
$this->Task->execute();
}

View file

@ -45,12 +45,12 @@ class PluginTaskTest extends CakeTestCase {
$this->out = $this->getMock('ConsoleOutput', array(), array(), '', false);
$this->in = $this->getMock('ConsoleInput', array(), array(), '', false);
$this->Task = $this->getMock('PluginTask',
$this->Task = $this->getMock('PluginTask',
array('in', 'err', 'createFile', '_stop', 'clear'),
array($this->out, $this->out, $this->in)
);
$this->Task->path = TMP . 'tests' . DS;
$this->_paths = $paths = App::path('plugins');
foreach ($paths as $i => $p) {
if (!is_dir($p)) {
@ -84,7 +84,7 @@ class PluginTaskTest extends CakeTestCase {
$path = $this->Task->path . 'BakeTestPlugin';
$this->assertTrue(is_dir($path), 'No plugin dir %s');
$directories = array(
'Config' . DS . 'Schema',
'Model' . DS . 'Behavior',
@ -155,7 +155,7 @@ class PluginTaskTest extends CakeTestCase {
$file = $path . DS . 'Model' . DS . 'BakeTestPluginAppModel.php';
$this->Task->expects($this->at(3))->method('createFile')
->with($file, new PHPUnit_Framework_Constraint_IsAnything());
$this->Task->args = array('BakeTestPlugin');
$this->Task->execute();
@ -174,7 +174,7 @@ class PluginTaskTest extends CakeTestCase {
$last = count($paths);
$paths[] = '/fake/path';
$this->Task = $this->getMock('PluginTask',
$this->Task = $this->getMock('PluginTask',
array('in', 'out', 'err', 'createFile', '_stop'),
array($this->out, $this->out, $this->in)
);
@ -183,7 +183,7 @@ class PluginTaskTest extends CakeTestCase {
// Make sure the added path is filtered out.
$this->Task->expects($this->exactly($last))
->method('out');
$this->Task->expects($this->once())
->method('in')
->will($this->returnValue($last));

View file

@ -130,7 +130,7 @@ class ProjectTaskTest extends CakeTestCase {
}
/**
* test bake with CakePHP on the include path. The constants should remain commented out.
* test bake with CakePHP on the include path. The constants should remain commented out.
*
* @return void
*/

View file

@ -613,7 +613,7 @@ class ViewTaskTest extends CakeTestCase {
TMP . 'ViewTaskComments' . DS . 'index.ctp',
$this->stringContains('ViewTaskComment')
);
$this->Task->expects($this->at(4))->method('createFile')
->with(
TMP . 'ViewTaskComments' . DS . 'view.ctp',
@ -631,7 +631,7 @@ class ViewTaskTest extends CakeTestCase {
TMP . 'ViewTaskComments' . DS . 'edit.ctp',
$this->stringContains('Edit View Task Comment')
);
$this->Task->expects($this->exactly(4))->method('createFile');
$this->Task->execute();
}
@ -678,7 +678,7 @@ class ViewTaskTest extends CakeTestCase {
TMP . 'ViewTaskComments' . DS . 'admin_index.ctp',
$this->stringContains('ViewTaskComment')
);
$this->Task->expects($this->at(4))->method('createFile')
->with(
TMP . 'ViewTaskComments' . DS . 'admin_view.ctp',
@ -696,7 +696,7 @@ class ViewTaskTest extends CakeTestCase {
TMP . 'ViewTaskComments' . DS . 'admin_edit.ctp',
$this->stringContains('Edit View Task Comment')
);
$this->Task->expects($this->exactly(4))->method('createFile');
$this->Task->execute();
}

View file

@ -87,7 +87,7 @@ class ConsoleErrorHandlerTest extends CakeTestCase {
ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
->with($this->stringContains('Too many parameters.'));
$this->Error->expects($this->once())
->method('_stop')
->with(1);
@ -102,7 +102,7 @@ class ConsoleErrorHandlerTest extends CakeTestCase {
*/
public function testError404Exception() {
$exception = new NotFoundException('dont use me in cli.');
ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
->with($this->stringContains('dont use me in cli.'));

View file

@ -48,7 +48,7 @@ class ConsoleOptionParserTest extends CakeTestCase {
$this->assertEquals($parser, $result, 'Setting epilog is not chainable');
$this->assertEquals('A test', $parser->epilog(), 'getting value is wrong.');
$result = $parser->epilog(array('A test', 'something'));
$this->assertEquals("A test\nsomething", $parser->epilog(), 'getting value is wrong.');
}
@ -116,7 +116,7 @@ class ConsoleOptionParserTest extends CakeTestCase {
));
$result = $parser->parse(array('--test'));
$this->assertEquals(array('test' => 'default value', 'help' => false), $result[0], 'Default value did not parse out');
$parser = new ConsoleOptionParser('test', false);
$parser->addOption('test', array(
'default' => 'default value',
@ -165,7 +165,7 @@ class ConsoleOptionParserTest extends CakeTestCase {
$result = $parser->parse(array('--test', 'value'));
$expected = array(array('test' => true, 'help' => false), array('value'));
$this->assertEquals($expected, $result);
$result = $parser->parse(array('value'));
$expected = array(array('test' => false, 'help' => false), array('value'));
$this->assertEquals($expected, $result);
@ -249,7 +249,7 @@ class ConsoleOptionParserTest extends CakeTestCase {
$result = $parser->parse(array('--fail', 'other'));
}
/**
* test parsing short options that do not exist.
*
@ -271,7 +271,7 @@ class ConsoleOptionParserTest extends CakeTestCase {
public function testOptionWithChoices() {
$parser = new ConsoleOptionParser('test', false);
$parser->addOption('name', array('choices' => array('mark', 'jose')));
$result = $parser->parse(array('--name', 'mark'));
$expected = array('name' => 'mark', 'help' => false);
$this->assertEquals($expected, $result[0], 'Got the correct value.');
@ -519,7 +519,7 @@ TEXT;
$args = $parser->arguments();
$this->assertEquals(2, count($args));
$commands = $parser->subcommands();
$this->assertEquals(1, count($commands));
}
@ -567,7 +567,7 @@ TEXT;
)
)
));
$result = $parser->parse(array('--secondary', '--fourth', '4', 'c'), 'sub');
$expected = array(array(
'secondary' => true,

View file

@ -225,4 +225,17 @@ class ConsoleOutputTest extends CakeTestCase {
$this->output->write('<error>Bad</error> Regular', false);
}
/**
* test plain output only strips tags used for formatting.
*
* @return void
*/
public function testOutputAsPlainSelectiveTagRemoval() {
$this->output->outputAs(ConsoleOutput::PLAIN);
$this->output->expects($this->once())->method('_write')
->with('Bad Regular <b>Left</b> <i>behind</i> <name>');
$this->output->write('<error>Bad</error> Regular <b>Left</b> <i>behind</i> <name>', false);
}
}

View file

@ -3,7 +3,7 @@
* ActionsAuthorizeTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
@ -77,7 +77,7 @@ class ActionsAuthorizeTest extends CakeTestCase {
->method('check')
->with($user, '/controllers/Posts/index')
->will($this->returnValue(false));
$this->assertFalse($this->auth->authorize($user['User'], $request));
}
@ -106,7 +106,7 @@ class ActionsAuthorizeTest extends CakeTestCase {
->method('check')
->with($user, '/controllers/Posts/index')
->will($this->returnValue(true));
$this->assertTrue($this->auth->authorize($user['User'], $request));
}

View file

@ -3,7 +3,7 @@
* BasicAuthenticateTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*

View file

@ -3,7 +3,7 @@
* ControllerAuthorizeTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
@ -36,12 +36,12 @@ class ControllerAuthorizeTest extends CakeTestCase {
$this->components->expects($this->any())
->method('getController')
->will($this->returnValue($this->controller));
$this->auth = new ControllerAuthorize($this->components);
}
/**
*
*
* @expectedException CakeException
*/
public function testControllerTypeError() {
@ -74,7 +74,7 @@ class ControllerAuthorizeTest extends CakeTestCase {
public function testAuthorizeSuccess() {
$user = array('User' => array('username' => 'mark'));
$request = new CakeRequest('/posts/index', false);
$this->controller->expects($this->once())
->method('isAuthorized')
->with($user)

View file

@ -3,7 +3,7 @@
* CrudAuthorizeTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
@ -179,7 +179,7 @@ class CrudAuthorizeTest extends CakeTestCase {
public function testAutoPrefixMapActions() {
Configure::write('Routing.prefixes', array('admin', 'manager'));
Router::reload();
$auth = new CrudAuthorize($this->Components);
$this->assertTrue(isset($auth->settings['actionMap']['admin_index']));
}

View file

@ -3,7 +3,7 @@
* DigestAuthenticateTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*

View file

@ -3,7 +3,7 @@
* FormAuthenticateTest file
*
* PHP 5
*
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*

View file

@ -636,6 +636,24 @@ class AuthComponentTest extends CakeTestCase {
$this->Controller->request['action'] = 'camelCase';
$this->assertFalse($this->Controller->Auth->startup($this->Controller));
$this->Controller->Auth->allow('*');
$this->Controller->Auth->deny();
$this->Controller->request['action'] = 'camelCase';
$this->assertFalse($this->Controller->Auth->startup($this->Controller));
$this->Controller->request['action'] = 'add';
$this->assertFalse($this->Controller->Auth->startup($this->Controller));
$this->Controller->Auth->allow('camelCase');
$this->Controller->Auth->deny();
$this->Controller->request['action'] = 'camelCase';
$this->assertFalse($this->Controller->Auth->startup($this->Controller));
$this->Controller->request['action'] = 'login';
$this->assertFalse($this->Controller->Auth->startup($this->Controller));
}
/**

View file

@ -76,7 +76,7 @@ class CookieComponentTest extends CakeTestCase {
$this->Cookie = $this->getMock('CookieComponent', array('_setcookie'), array($Collection));
$this->Controller = new CookieComponentTestController();
$this->Cookie->initialize($this->Controller);
$this->Cookie->name = 'CakeTestCookie';
$this->Cookie->time = 10;
$this->Cookie->path = '/';

View file

@ -453,7 +453,7 @@ class PaginatorComponentTest extends CakeTestCase {
$Controller->params['url'] = array();
$Controller->constructClasses();
$Controller->Paginator->settings = array(
'order' => 'PaginatorControllerPost.id DESC',
'order' => 'PaginatorControllerPost.id DESC',
'maxLimit' => 10,
'paramType' => 'named'
);
@ -502,7 +502,7 @@ class PaginatorComponentTest extends CakeTestCase {
}
/**
* test that option merging prefers specific models
* test that option merging prefers specific models
*
* @return void
*/
@ -671,7 +671,7 @@ class PaginatorComponentTest extends CakeTestCase {
->method('hasField')
->with('something')
->will($this->returnValue(false));
$model->expects($this->at(1))
->method('hasField')
->with('something', true)

View file

@ -29,13 +29,6 @@ App::uses('Router', 'Routing');
*/
class RequestHandlerTestController extends Controller {
/**
* name property
*
* @var string
*/
public $name = 'RequestHandlerTest';
/**
* uses property
*
@ -117,9 +110,8 @@ class RequestHandlerComponentTest extends CakeTestCase {
$request = new CakeRequest('controller_posts/index');
$response = new CakeResponse();
$this->Controller = new RequestHandlerTestController($request, $response);
$this->Controller->constructClasses();
$this->RequestHandler = new RequestHandlerComponent($this->Controller->Components);
$this->RequestHandler->request = $request;
$this->RequestHandler->response = $response;
$this->_extensions = Router::extensions();
}
@ -148,6 +140,7 @@ class RequestHandlerComponentTest extends CakeTestCase {
'ajaxLayout' => 'test_ajax'
);
$Collection = new ComponentCollection();
$Collection->init($this->Controller);
$RequestHandler = new RequestHandlerComponent($Collection, $settings);
$this->assertEqual($RequestHandler->ajaxLayout, 'test_ajax');
}

View file

@ -135,7 +135,7 @@ class SecurityComponentTest extends CakeTestCase {
*/
public function setUp() {
parent::setUp();
$request = new CakeRequest('posts/index', false);
$request->addParams(array('controller' => 'posts', 'action' => 'index'));
$this->Controller = new SecurityTestController($request);
@ -492,7 +492,7 @@ class SecurityComponentTest extends CakeTestCase {
}
/**
* Test that objects can't be passed into the serialized string. This was a vector for RFI and LFI
* Test that objects can't be passed into the serialized string. This was a vector for RFI and LFI
* attacks. Thanks to Felix Wilhelm
*
* @return void
@ -641,7 +641,7 @@ class SecurityComponentTest extends CakeTestCase {
$fields = '19464422eafe977ee729c59222af07f983010c5f%3A';
$this->Controller->request->data = array(
'User.password' => 'bar', 'User.name' => 'foo', 'User.is_valid' => '1',
'Tag' => array('Tag' => array(1)),
'Tag' => array('Tag' => array(1)),
'_Token' => compact('key', 'fields', 'unlocked'),
);
$result = $this->Controller->Security->validatePost($this->Controller);
@ -1056,7 +1056,7 @@ class SecurityComponentTest extends CakeTestCase {
}
/**
* test that csrf checks are skipped for request action.
* test that csrf checks are skipped for request action.
*
* @return void
*/
@ -1073,7 +1073,7 @@ class SecurityComponentTest extends CakeTestCase {
}
/**
* test setting
* test setting
*
* @return void
*/
@ -1117,9 +1117,9 @@ class SecurityComponentTest extends CakeTestCase {
$this->Security->validatePost = false;
$this->Security->csrfCheck = true;
$this->Security->csrfExpires = '+10 minutes';
$this->Security->Session->write('_Token.csrfTokens', array('nonce1' => strtotime('+10 minutes')));
$this->Controller->request = $this->getMock('CakeRequest', array('is'));
$this->Controller->request->expects($this->once())->method('is')
->with('post')
@ -1148,7 +1148,7 @@ class SecurityComponentTest extends CakeTestCase {
$this->Security->validatePost = false;
$this->Security->csrfCheck = true;
$this->Security->csrfExpires = '+10 minutes';
$this->Security->Session->write('_Token.csrfTokens', array(
'valid' => strtotime('+30 minutes'),
'poof' => strtotime('-11 minutes'),
@ -1158,7 +1158,7 @@ class SecurityComponentTest extends CakeTestCase {
$tokens = $this->Security->Session->read('_Token.csrfTokens');
$this->assertEquals(2, count($tokens), 'Too many tokens left behind');
$this->assertNotEmpty('valid', $tokens, 'Valid token was removed.');
}
/**
@ -1170,9 +1170,9 @@ class SecurityComponentTest extends CakeTestCase {
$this->Security->validatePost = false;
$this->Security->csrfCheck = true;
$this->Security->csrfExpires = '+10 minutes';
$this->Security->Session->write('_Token.csrfTokens', array('nonce1' => strtotime('+10 minutes')));
$this->Controller->request = $this->getMock('CakeRequest', array('is'));
$this->Controller->request->expects($this->once())->method('is')
->with('post')

View file

@ -274,21 +274,21 @@ class TestController extends ControllerTestAppController {
public function returner() {
return 'I am from the controller.';
}
protected function protected_m() {
}
private function private_m() {
}
public function _hidden() {
}
public function admin_add() {
}
}
@ -967,7 +967,8 @@ class ControllerTest extends CakeTestCase {
$TestController = new TestController($request);
$TestController->setAction('index', 1, 2);
$expected = array('testId' => 1, 'test2Id' => 2);
$this->assertidentical($TestController->data, $expected);
$this->assertSame($expected, $TestController->request->data);
$this->assertSame('index', $TestController->view);
}
/**
@ -1319,5 +1320,5 @@ class ControllerTest extends CakeTestCase {
$this->assertEquals('I am from the controller.', $result);
}
}

View file

@ -819,4 +819,20 @@ class AppTest extends CakeTestCase {
$this->assertArrayHasKey('Controller', $result);
$this->assertArrayHasKey('Controller/Component', $result);
}
/**
* Proves that it is possible to load plugin libraries in top
* level Lib dir for plugins
*
* @return void
*/
public function testPluginLibClasses() {
App::build(array(
'plugins' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
), App::RESET);
CakePlugin::loadAll();
$this->assertFalse(class_exists('TestPluginOtherLibrary', false));
App::uses('TestPluginOtherLibrary', 'TestPlugin.Lib');
$this->assertTrue(class_exists('TestPluginOtherLibrary'));
}
}

View file

@ -287,10 +287,11 @@ class ExceptionRendererTest extends CakeTestCase {
ob_start();
$ExceptionRenderer->render();
$results = ob_get_clean();
$result = ob_get_clean();
$this->assertFalse(method_exists($ExceptionRenderer, 'missingWidgetThing'), 'no method should exist.');
$this->assertEquals('error400', $ExceptionRenderer->method, 'incorrect method coercion.');
$this->assertContains('coding fail', $result, 'Text should show up.');
}
/**
@ -302,13 +303,40 @@ class ExceptionRendererTest extends CakeTestCase {
$exception = new OutOfBoundsException('foul ball.');
$ExceptionRenderer = new ExceptionRenderer($exception);
$ExceptionRenderer->controller->response = $this->getMock('CakeResponse', array('statusCode', '_sendHeader'));
$ExceptionRenderer->controller->response->expects($this->once())->method('statusCode')->with(500);
$ExceptionRenderer->controller->response->expects($this->once())
->method('statusCode')
->with(500);
ob_start();
$ExceptionRenderer->render();
$results = ob_get_clean();
$result = ob_get_clean();
$this->assertEquals('error500', $ExceptionRenderer->method, 'incorrect method coercion.');
$this->assertContains('foul ball.', $result, 'Text should show up as its debug mode.');
}
/**
* test that unknown exceptions have messages ignored.
*
* @return void
*/
public function testUnknownExceptionInProduction() {
Configure::write('debug', 0);
$exception = new OutOfBoundsException('foul ball.');
$ExceptionRenderer = new ExceptionRenderer($exception);
$ExceptionRenderer->controller->response = $this->getMock('CakeResponse', array('statusCode', '_sendHeader'));
$ExceptionRenderer->controller->response->expects($this->once())
->method('statusCode')
->with(500);
ob_start();
$ExceptionRenderer->render();
$result = ob_get_clean();
$this->assertEquals('error500', $ExceptionRenderer->method, 'incorrect method coercion.');
$this->assertNotContains('foul ball.', $result, 'Text should no show up.');
$this->assertContains('Internal Error', $result, 'Generic message only.');
}
/**
@ -324,9 +352,10 @@ class ExceptionRendererTest extends CakeTestCase {
ob_start();
$ExceptionRenderer->render();
$results = ob_get_clean();
$result = ob_get_clean();
$this->assertEquals('error500', $ExceptionRenderer->method, 'incorrect method coercion.');
$this->assertContains('foul ball.', $result, 'Text should show up as its debug mode.');
}
/**

View file

@ -238,7 +238,7 @@ class ContainableBehaviorTest extends CakeTestCase {
/**
* testBeforeFindWithNonExistingBinding method
*
*
* @expectedException PHPUnit_Framework_Error_Warning
* @return void
*/
@ -3304,15 +3304,15 @@ class ContainableBehaviorTest extends CakeTestCase {
$this->assertEqual($expected, array_keys($result));
$this->assertTrue(empty($this->Article->hasMany['ArticlesTag']));
$this->JoinA =& ClassRegistry::init('JoinA');
$this->JoinB =& ClassRegistry::init('JoinB');
$this->JoinC =& ClassRegistry::init('JoinC');
$this->JoinA->Behaviors->attach('Containable');
$this->JoinB->Behaviors->attach('Containable');
$this->JoinC->Behaviors->attach('Containable');
$this->JoinA->JoinB->find('all', array('contain' => array('JoinA')));
$this->JoinA->bindModel(array('hasOne' => array('JoinAsJoinC' => array('joinTable' => 'as_cs'))), false);
$result = $this->JoinA->hasOne;

View file

@ -566,7 +566,7 @@ class CakeSchemaTest extends CakeTestCase {
));
$this->assertFalse(isset($read['tables']['missing']['posts_tags']), 'Join table marked as missing');
}
/**
* testSchemaReadWithAppModel method
*
@ -575,7 +575,7 @@ class CakeSchemaTest extends CakeTestCase {
*/
public function testSchemaReadWithAppModel() {
$connections = ConnectionManager::enumConnectionObjects();
ConnectionManager::drop('default');
ConnectionManager::drop('default');
ConnectionManager::create('default', $connections['test']);
try {
$read = $this->Schema->read(array(

View file

@ -1002,7 +1002,8 @@ class MysqlTest extends CakeTestCase {
'order' => array(),
'limit' => array(),
'offset' => array(),
'group' => array()
'group' => array(),
'callbacks' => null
);
$queryData['joins'][0]['table'] = $this->Dbo->fullTableName($queryData['joins'][0]['table']);
$this->assertEqual($queryData, $expected);
@ -2554,7 +2555,7 @@ class MysqlTest extends CakeTestCase {
*/
public function testDropSchemaNoSchema() {
$result = $this->Dbo->dropSchema(null);
}
}
/**
* testOrderParsing method

View file

@ -20,6 +20,8 @@ App::uses('Model', 'Model');
App::uses('AppModel', 'Model');
App::uses('Sqlite', 'Model/Datasource/Database');
require_once dirname(dirname(dirname(__FILE__))) . DS . 'models.php';
/**
* DboSqliteTestDb class
*
@ -74,7 +76,7 @@ class SqliteTest extends CakeTestCase {
*
* @var object
*/
public $fixtures = array('core.user');
public $fixtures = array('core.user', 'core.uuid');
/**
* Actual DB connection used in testing
@ -88,6 +90,7 @@ class SqliteTest extends CakeTestCase {
*
*/
public function setUp() {
parent::setUp();
Configure::write('Cache.disable', true);
$this->Dbo = ConnectionManager::getDataSource('test');
if (!$this->Dbo instanceof Sqlite) {
@ -100,6 +103,7 @@ class SqliteTest extends CakeTestCase {
*
*/
public function tearDown() {
parent::tearDown();
Configure::write('Cache.disable', false);
}
@ -317,5 +321,58 @@ class SqliteTest extends CakeTestCase {
);
$this->assertEqual($result['id'], $expected);
$this->Dbo->query('DROP TABLE ' . $tableName);
$tableName = 'uuid_tests';
$this->Dbo->query("CREATE TABLE {$tableName} (id CHAR(36) PRIMARY KEY, name VARCHAR, created DATETIME, modified DATETIME)");
$Model = new Model(array('name' => 'UuidTest', 'ds' => 'test', 'table' => 'uuid_tests'));
$result = $this->Dbo->describe($Model);
$expected = array(
'type' => 'string',
'length' => 36,
'null' => false,
'default' => null,
'key' => 'primary',
);
$this->assertEqual($result['id'], $expected);
$this->Dbo->query('DROP TABLE ' . $tableName);
}
/**
* Test virtualFields with functions.
*
* @return void
*/
public function testVirtualFieldWithFunction() {
$this->loadFixtures('User');
$User = ClassRegistry::init('User');
$User->virtualFields = array('name' => 'SUBSTR(User.user, 5)');
$result = $User->find('first', array(
'conditions' => array('User.user' => 'garrett')
));
$this->assertEquals('ett', $result['User']['name']);
}
/**
* Test that records can be inserted with uuid primary keys, and
* that the primary key is not blank
*
* @return void
*/
public function testUuidPrimaryKeyInsertion() {
$this->loadFixtures('Uuid');
$Model = ClassRegistry::init('Uuid');
$data = array(
'title' => 'A uuid should work',
'count' => 10
);
$Model->create($data);
$this->assertTrue((bool)$Model->save());
$result = $Model->read();
$this->assertEquals($data['title'], $result['Uuid']['title']);
$this->assertTrue(Validation::uuid($result['Uuid']['id']), 'Not a uuid');
}
}

View file

@ -92,7 +92,7 @@ class SqlserverTestDb extends Sqlserver {
public function clearFieldMappings() {
$this->_fieldMappings = array();
}
/**
* describe method
*
@ -568,11 +568,11 @@ class SqlserverTest extends CakeTestCase {
*/
public function testGetPrimaryKey() {
$schema = $this->model->schema();
$this->db->describe = $schema;
$result = $this->db->getPrimaryKey($this->model);
$this->assertEqual($result, 'id');
unset($schema['id']['key']);
$this->db->describe = $schema;
$result = $this->db->getPrimaryKey($this->model);
@ -586,7 +586,7 @@ class SqlserverTest extends CakeTestCase {
*/
public function testInsertMulti() {
$this->db->describe = $this->model->schema();
$fields = array('id', 'name', 'login');
$values = array(
array(1, 'Larry', 'PhpNut'),

View file

@ -612,7 +612,7 @@ class DboSourceTest extends CakeTestCase {
$result = Set::extract($log['log'], '/query');
$expected = array('Query 1', 'Query 2');
$this->assertEqual($expected, $result);
$oldDebug = Configure::read('debug');
Configure::write('debug', 2);
ob_start();

View file

@ -146,7 +146,7 @@ class DatabaseSessionTest extends CakeTestCase {
$result = $this->storage->read('foo');
$expected = 'Some value';
$this->assertEquals($expected, $result);
$result = $this->storage->read('made up value');
$this->assertFalse($result);
}
@ -158,7 +158,7 @@ class DatabaseSessionTest extends CakeTestCase {
*/
public function testDestroy() {
$this->storage->write('foo', 'Some value');
$this->assertTrue($this->storage->destroy('foo'), 'Destroy failed');
$this->assertFalse($this->storage->read('foo'), 'Value still present.');
}

View file

@ -4933,6 +4933,95 @@ class ModelReadTest extends BaseModelTest {
$this->assertEqual($expected, $result);
}
/**
* testAssociationAfterFindCallbacksDisabled method
*
* @return void
*/
public function testAssociationAfterFindCalbacksDisabled() {
$this->loadFixtures('Post', 'Author', 'Comment');
$TestModel = new Post();
$result = $TestModel->find('all', array('callbacks' => false));
$expected = array(
array(
'Post' => array(
'id' => '1',
'author_id' => '1',
'title' => 'First Post',
'body' => 'First Post Body',
'published' => 'Y',
'created' => '2007-03-18 10:39:23',
'updated' => '2007-03-18 10:41:31'
),
'Author' => array(
'id' => '1',
'user' => 'mariano',
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
'created' => '2007-03-17 01:16:23',
'updated' => '2007-03-17 01:18:31'
)),
array(
'Post' => array(
'id' => '2',
'author_id' => '3',
'title' => 'Second Post',
'body' => 'Second Post Body',
'published' => 'Y',
'created' => '2007-03-18 10:41:23',
'updated' => '2007-03-18 10:43:31'
),
'Author' => array(
'id' => '3',
'user' => 'larry',
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
'created' => '2007-03-17 01:20:23',
'updated' => '2007-03-17 01:22:31'
)),
array(
'Post' => array(
'id' => '3',
'author_id' => '1',
'title' => 'Third Post',
'body' => 'Third Post Body',
'published' => 'Y',
'created' => '2007-03-18 10:43:23',
'updated' => '2007-03-18 10:45:31'
),
'Author' => array(
'id' => '1',
'user' => 'mariano',
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
'created' => '2007-03-17 01:16:23',
'updated' => '2007-03-17 01:18:31'
)));
$this->assertEqual($expected, $result);
unset($TestModel);
$Author = new Author();
$Author->Post->bindModel(array(
'hasMany' => array(
'Comment' => array(
'className' => 'ModifiedComment',
'foreignKey' => 'article_id',
)
)));
$result = $Author->find('all', array(
'conditions' => array('Author.id' => 1),
'recursive' => 2,
'callbacks' => false
));
$expected = array(
'id' => 1,
'article_id' => 1,
'user_id' => 2,
'comment' => 'First Comment for First Article',
'published' => 'Y',
'created' => '2007-03-18 10:45:23',
'updated' => '2007-03-18 10:47:31'
);
$this->assertEqual($result[0]['Post'][0]['Comment'][0], $expected);
}
/**
* Tests that the database configuration assigned to the model can be changed using
* (before|after)Find callbacks

View file

@ -3457,7 +3457,7 @@ class ModelWriteTest extends BaseModelTest {
)
)
);
$this->assertTrue($result[0]['Post']['updated'] >= $newTs);
$this->assertTrue($result[1]['Post']['updated'] >= $newTs);
$this->assertTrue($result[3]['Post']['updated'] >= $newTs);
@ -4372,7 +4372,7 @@ class ModelWriteTest extends BaseModelTest {
$mock = $this->getMock(
'DboSource',
array('connect', 'rollback', 'describe', 'create', 'begin'),
array('connect', 'rollback', 'describe', 'create', 'begin'),
array(),
'MockAssociatedTransactionDboSource',
false
@ -4754,7 +4754,7 @@ class ModelWriteTest extends BaseModelTest {
$result = $TestModel->find('all', array(
'fields' => array('id', 'author_id', 'title', 'body', 'published'),
'recursive' => -1,
'recursive' => -1,
'order' => 'Post.id ASC'
));
$errors = array(1 => array('title' => array('This field cannot be left blank')));
@ -4810,7 +4810,7 @@ class ModelWriteTest extends BaseModelTest {
$result = $TestModel->find('all', array(
'fields' => array('id', 'author_id', 'title', 'body', 'published'),
'recursive' => -1,
'recursive' => -1,
'order' => 'Post.id ASC'
));
$this->assertEqual($expected, $result);

View file

@ -85,7 +85,7 @@ class CakeRequestTest extends CakeTestCase {
);
$request = new CakeRequest('some/path');
$this->assertEqual($request->query, $_GET);
$_GET = array(
'one' => 'param',
'two' => 'banana',
@ -106,7 +106,7 @@ class CakeRequestTest extends CakeTestCase {
$expected = array('one' => 'something', 'two' => 'else');
$this->assertEqual($request->query, $expected);
$this->assertEquals('some/path?one=something&two=else', $request->url);
}
/**
@ -553,7 +553,7 @@ class CakeRequestTest extends CakeTestCase {
public function testHost() {
$_SERVER['HTTP_HOST'] = 'localhost';
$request = new CakeRequest('some/path');
$this->assertEquals('localhost', $request->host());
}
@ -617,7 +617,7 @@ class CakeRequestTest extends CakeTestCase {
$_SERVER['HTTP_USER_AGENT'] = 'Android 2.0';
$this->assertTrue($request->is('mobile'));
$this->assertTrue($request->isMobile());
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 5.1; rv:2.0b6pre) Gecko/20100902 Firefox/4.0b6pre Fennec/2.0b1pre';
$this->assertTrue($request->is('mobile'));
$this->assertTrue($request->isMobile());
@ -789,7 +789,7 @@ class CakeRequestTest extends CakeTestCase {
public function testAccepts() {
$_SERVER['HTTP_ACCEPT'] = 'text/xml,application/xml;q=0.9,application/xhtml+xml,text/html,text/plain,image/png';
$request = new CakeRequest('/', false);
$result = $request->accepts();
$expected = array(
'text/xml', 'application/xhtml+xml', 'text/html', 'text/plain', 'image/png', 'application/xml'
@ -1054,7 +1054,7 @@ class CakeRequestTest extends CakeTestCase {
'IIS - No rewrite base path',
array(
'App' => array(
'base' => false,
'base' => false,
'baseUrl' => '/index.php',
'dir' => 'app',
'webroot' => 'webroot'
@ -1083,7 +1083,7 @@ class CakeRequestTest extends CakeTestCase {
'IIS - No rewrite with path, no PHP_SELF',
array(
'App' => array(
'base' => false,
'base' => false,
'baseUrl' => '/index.php?',
'dir' => 'app',
'webroot' => 'webroot'
@ -1108,21 +1108,21 @@ class CakeRequestTest extends CakeTestCase {
'IIS - No rewrite sub dir 2',
array(
'App' => array(
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot',
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot',
),
'SERVER' => array(
'SCRIPT_NAME' => '/site/index.php',
'PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot',
'QUERY_STRING' => '',
'REQUEST_URI' => '/site/index.php',
'URL' => '/site/index.php',
'SCRIPT_FILENAME' => 'C:\\Inetpub\\wwwroot\\site\\index.php',
'DOCUMENT_ROOT' => 'C:\\Inetpub\\wwwroot',
'PHP_SELF' => '/site/index.php',
'argv' => array(),
'SCRIPT_NAME' => '/site/index.php',
'PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot',
'QUERY_STRING' => '',
'REQUEST_URI' => '/site/index.php',
'URL' => '/site/index.php',
'SCRIPT_FILENAME' => 'C:\\Inetpub\\wwwroot\\site\\index.php',
'DOCUMENT_ROOT' => 'C:\\Inetpub\\wwwroot',
'PHP_SELF' => '/site/index.php',
'argv' => array(),
'argc' => 0
),
),
@ -1136,22 +1136,22 @@ class CakeRequestTest extends CakeTestCase {
'IIS - No rewrite sub dir 2 with path',
array(
'App' => array(
'base' => false,
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'GET' => array('/posts/add' => ''),
'SERVER' => array(
'SCRIPT_NAME' => '/site/index.php',
'PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot',
'QUERY_STRING' => '/posts/add',
'REQUEST_URI' => '/site/index.php/posts/add',
'URL' => '/site/index.php/posts/add',
'ORIG_PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot\\site\\index.php',
'DOCUMENT_ROOT' => 'C:\\Inetpub\\wwwroot',
'PHP_SELF' => '/site/index.php/posts/add',
'argv' => array('/posts/add'),
'SCRIPT_NAME' => '/site/index.php',
'PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot',
'QUERY_STRING' => '/posts/add',
'REQUEST_URI' => '/site/index.php/posts/add',
'URL' => '/site/index.php/posts/add',
'ORIG_PATH_TRANSLATED' => 'C:\\Inetpub\\wwwroot\\site\\index.php',
'DOCUMENT_ROOT' => 'C:\\Inetpub\\wwwroot',
'PHP_SELF' => '/site/index.php/posts/add',
'argv' => array('/posts/add'),
'argc' => 1
),
),
@ -1165,16 +1165,16 @@ class CakeRequestTest extends CakeTestCase {
'Apache - No rewrite, document root set to webroot, requesting path',
array(
'App' => array(
'base' => false,
'baseUrl' => '/index.php',
'dir' => 'app',
'base' => false,
'baseUrl' => '/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'SERVER' => array(
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'QUERY_STRING' => '',
'REQUEST_URI' => '/index.php/posts/index',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'QUERY_STRING' => '',
'REQUEST_URI' => '/index.php/posts/index',
'SCRIPT_NAME' => '/index.php',
'PATH_INFO' => '/posts/index',
'PHP_SELF' => '/index.php/posts/index',
@ -1190,19 +1190,19 @@ class CakeRequestTest extends CakeTestCase {
'Apache - No rewrite, document root set to webroot, requesting root',
array(
'App' => array(
'base' => false,
'baseUrl' => '/index.php',
'dir' => 'app',
'base' => false,
'baseUrl' => '/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'SERVER' => array(
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'QUERY_STRING' => '',
'REQUEST_URI' => '/index.php',
'SCRIPT_NAME' => '/index.php',
'PATH_INFO' => '',
'PHP_SELF' => '/index.php',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'QUERY_STRING' => '',
'REQUEST_URI' => '/index.php',
'SCRIPT_NAME' => '/index.php',
'PATH_INFO' => '',
'PHP_SELF' => '/index.php',
),
),
array(
@ -1215,16 +1215,16 @@ class CakeRequestTest extends CakeTestCase {
'Apache - No rewrite, document root set above top level cake dir, requesting path',
array(
'App' => array(
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/index.php/posts/index',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/index.php/posts/index',
'SCRIPT_NAME' => '/site/index.php',
'PATH_INFO' => '/posts/index',
'PHP_SELF' => '/site/index.php/posts/index',
@ -1240,15 +1240,15 @@ class CakeRequestTest extends CakeTestCase {
'Apache - No rewrite, document root set above top level cake dir, request root, no PATH_INFO',
array(
'App' => array(
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/index.php/',
'SCRIPT_NAME' => '/site/index.php',
'PHP_SELF' => '/site/index.php/',
@ -1264,17 +1264,17 @@ class CakeRequestTest extends CakeTestCase {
'Apache - No rewrite, document root set above top level cake dir, request path, with GET',
array(
'App' => array(
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'base' => false,
'baseUrl' => '/site/index.php',
'dir' => 'app',
'webroot' => 'webroot'
),
'GET' => array('a' => 'b', 'c' => 'd'),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/index.php/posts/index?a=b&c=d',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/index.php/posts/index?a=b&c=d',
'SCRIPT_NAME' => '/site/index.php',
'PATH_INFO' => '/posts/index',
'PHP_SELF' => '/site/index.php/posts/index',
@ -1298,9 +1298,9 @@ class CakeRequestTest extends CakeTestCase {
'webroot' => 'webroot'
),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'REQUEST_URI' => '/site/',
'SCRIPT_NAME' => '/site/app/webroot/index.php',
'PHP_SELF' => '/site/app/webroot/index.php',
@ -1322,9 +1322,9 @@ class CakeRequestTest extends CakeTestCase {
'webroot' => 'webroot'
),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/index.php',
'SCRIPT_NAME' => '/site/app/webroot/index.php',
'PHP_SELF' => '/site/app/webroot/index.php',
'PATH_INFO' => null,
@ -1347,9 +1347,9 @@ class CakeRequestTest extends CakeTestCase {
'webroot' => 'webroot'
),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'SCRIPT_NAME' => '/index.php',
'PHP_SELF' => '/index.php',
'PATH_INFO' => null,
@ -1373,9 +1373,9 @@ class CakeRequestTest extends CakeTestCase {
),
'GET' => array('/posts/add' => ''),
'SERVER' => array(
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'SERVER_NAME' => 'localhost',
'DOCUMENT_ROOT' => '/Library/WebServer/Documents/site/app/webroot',
'SCRIPT_FILENAME' => '/Library/WebServer/Documents/site/app/webroot/index.php',
'SCRIPT_NAME' => '/index.php',
'QUERY_STRING' => '/posts/add&',
'PHP_SELF' => '/index.php',
@ -1445,7 +1445,7 @@ class CakeRequestTest extends CakeTestCase {
$request = new CakeRequest('posts/index');
$result = $request->data('Model.new_value', 'new value');
$this->assertSame($result, $request, 'Return was not $this');
$this->assertEquals($request->data['Model']['new_value'], 'new value');
$request->data('Post.title', 'New post')->data('Comment.1.author', 'Mark');
@ -1463,13 +1463,13 @@ class CakeRequestTest extends CakeTestCase {
$request->data('Post.null', null);
$this->assertNull($request->data['Post']['null']);
$request->data('Post.false', false);
$this->assertFalse($request->data['Post']['false']);
$request->data('Post.zero', 0);
$this->assertSame(0, $request->data['Post']['zero']);
$request->data('Post.empty', '');
$this->assertSame('', $request->data['Post']['empty']);
}
@ -1487,7 +1487,7 @@ class CakeRequestTest extends CakeTestCase {
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'es_mx;en_ca';
$result = CakeRequest::acceptLanguage();
$this->assertEquals(array('es-mx', 'en-ca'), $result, 'Languages do not match');
$result = CakeRequest::acceptLanguage('en-ca');
$this->assertTrue($result);
@ -1496,7 +1496,7 @@ class CakeRequestTest extends CakeTestCase {
}
/**
* test the here() method
* test the here() method
*
* @return void
*/
@ -1528,7 +1528,7 @@ class CakeRequestTest extends CakeTestCase {
$request = $this->getMock('CakeRequest', array('_readInput'));
$request->expects($this->once())->method('_readInput')
->will($this->returnValue('I came from stdin'));
$result = $request->input();
$this->assertEquals('I came from stdin', $result);
}
@ -1547,7 +1547,7 @@ class CakeRequestTest extends CakeTestCase {
$this->assertEquals(array('name' => 'value'), (array)$result);
}
/**
/**
* Test input() decoding with additional arguments.
*
* @return void
@ -1567,7 +1567,7 @@ XML;
$result = $request->input('Xml::build', array('return' => 'domdocument'));
$this->assertInstanceOf('DOMDocument', $result);
$this->assertEquals(
'Test',
'Test',
$result->getElementsByTagName('title')->item(0)->childNodes->item(0)->wholeText
);
}

View file

@ -370,4 +370,59 @@ class CakeResponseTest extends CakeTestCase {
$result = $response->mapType(array('application/json', 'application/xhtml+xml', 'text/css'));
$this->assertEquals($expected, $result);
}
/**
* Tests the send and setting of Content-Length
*
*/
public function testSendContentLength() {
$response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent'));
$response->body('the response body');
$response->expects($this->once())->method('_sendContent')->with('the response body');
$response->expects($this->at(0))
->method('_sendHeader')->with('HTTP/1.1 200 OK');
$response->expects($this->at(1))
->method('_sendHeader')->with('Content-Type', 'text/html; charset=UTF-8');
$response->expects($this->at(2))
->method('_sendHeader')->with('Content-Length', strlen('the response body'));
$response->send();
$response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent'));
$body = '長い長い長いSubjectの場合はfoldingするのが正しいんだけどいったいどうなるんだろう';
$response->body($body);
$response->expects($this->once())->method('_sendContent')->with($body);
$response->expects($this->at(0))
->method('_sendHeader')->with('HTTP/1.1 200 OK');
$response->expects($this->at(1))
->method('_sendHeader')->with('Content-Type', 'text/html; charset=UTF-8');
$response->expects($this->at(2))
->method('_sendHeader')->with('Content-Length', 116);
$response->send();
$response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent', 'outputCompressed'));
$body = '長い長い長いSubjectの場合はfoldingするのが正しいんだけどいったいどうなるんだろう';
$response->body($body);
$response->expects($this->once())->method('outputCompressed')->will($this->returnValue(true));
$response->expects($this->once())->method('_sendContent')->with($body);
$response->expects($this->exactly(2))->method('_sendHeader');
$response->send();
$response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent', 'outputCompressed'));
$body = 'hwy';
$response->body($body);
$response->header('Content-Length', 1);
$response->expects($this->never())->method('outputCompressed');
$response->expects($this->once())->method('_sendContent')->with($body);
$response->expects($this->at(2))
->method('_sendHeader')->with('Content-Length', 1);
$response->send();
$response = $this->getMock('CakeResponse', array('_sendHeader', '_sendContent'));
$body = 'content';
$response->statusCode(301);
$response->body($body);
$response->expects($this->once())->method('_sendContent')->with($body);
$response->expects($this->exactly(2))->method('_sendHeader');
$response->send();
}
}

View file

@ -1291,6 +1291,14 @@ class DispatcherTest extends CakeTestCase {
$result = ob_get_clean();
$this->assertEqual('htc file', $result);
$response = $this->getMock('CakeResponse', array('_sendHeader'));
ob_start();
$Dispatcher->asset('test_plugin/css/unknown.extension', $response);
ob_end_clean();
$expected = filesize(CakePlugin::path('TestPlugin') . 'webroot' . DS . 'css' . DS . 'unknown.extension');
$headers = $response->header();
$this->assertEqual($expected, $headers['Content-Length']);
if (php_sapi_name() == 'cli') {
while (ob_get_level()) {
ob_get_clean();

View file

@ -369,6 +369,8 @@ class CakeRouteTest extends CakeTestCase {
$result = $route->match(array('controller' => 'posts', 'action' => 'view', 'plugin' => null, 5, 'page' => 1, 'limit' => 20, 'order' => 'title'));
$this->assertEqual($result, '/posts/view/5/page:1/limit:20/order:title');
$result = $route->match(array('controller' => 'posts', 'action' => 'view', 'plugin' => null, 'word space', 'order' => 'Θ'));
$this->assertEqual($result, '/posts/view/word%20space/order:%CE%98');
$route = new CakeRoute('/test2/*', array('controller' => 'pages', 'action' => 'display', 2));
$result = $route->match(array('controller' => 'pages', 'action' => 'display', 1));
@ -395,6 +397,10 @@ class CakeRouteTest extends CakeTestCase {
$result = $route->parse('/posts/index/page[]:%CE%98');
$this->assertEquals('Θ', $result['named']['page'][0]);
$result = $route->parse('/posts/index/something%20else/page[]:%CE%98');
$this->assertEquals('Θ', $result['named']['page'][0]);
$this->assertEquals('something else', $result['pass'][0]);
}
/**

View file

@ -146,7 +146,7 @@ class RouterTest extends CakeTestCase {
'named' => array(),
'plugin' => 'test_plugin',
'controller' => 'test_plugin',
'action' => 'index',
'action' => 'index',
'[method]' => 'GET'
);
$this->assertEqual($result, $expected);
@ -186,7 +186,7 @@ class RouterTest extends CakeTestCase {
'named' => array(),
'plugin' => 'test_plugin',
'controller' => 'test_plugin',
'action' => 'index',
'action' => 'index',
'[method]' => 'GET'
);
$this->assertEqual($result, $expected);

View file

@ -419,9 +419,9 @@ class CakeTestFixtureTest extends CakeTestCase {
/**
* Helper function to be used as callback and store the parameters of an insertMulti call
*
* @param string $table
* @param string $fields
* @param string $values
* @param string $table
* @param string $fields
* @param string $values
* @return boolean true
*/
function _insertCallback($table, $fields, $values) {

View file

@ -423,7 +423,7 @@ TEXT;
*
* @return void
*/
function testNoDbCredentials() {
public function testNoDbCredentials() {
$config = array(
'driver' => 'mysql',
'persistent' => false,
@ -449,4 +449,19 @@ TEXT;
$this->assertEqual($expected, $output);
}
/**
* test trace exclude
*
* @return void
*/
public function testTraceExclude() {
$result = Debugger::trace();
$this->assertPattern('/^DebuggerTest::testTraceExclude/', $result);
$result = Debugger::trace(array(
'exclude' => array('DebuggerTest::testTraceExclude')
));
$this->assertNoPattern('/^DebuggerTest::testTraceExclude/', $result);
}
}

View file

@ -257,7 +257,7 @@ class ObjectCollectionTest extends CakeTestCase {
$this->Objects->TriggerMockSecond->expects($this->once())
->method('callback')
->will($this->returnValue(array('three', 'four')));
$result = $this->Objects->trigger('callback', array(), array('collectReturn' => true));
$expected = array(
array('one', 'two'),
@ -402,7 +402,7 @@ class ObjectCollectionTest extends CakeTestCase {
'Apple' => array('class' => 'Banana.Apple', 'settings' => array('foo' => 'bar')),
);
$this->assertEquals($expected, $result);
// This is the result after Controller::_mergeVars
$components = array(
'Html' => null,

View file

@ -134,7 +134,7 @@ class SecurityTest extends CakeTestCase {
$key = 'my_key';
$result = Security::cipher($txt, $key);
$this->assertEqual(Security::cipher($result, $key), $txt);
$txt = 123456;
$key = 'my_key';
$result = Security::cipher($txt, $key);

View file

@ -104,6 +104,7 @@ class Contact extends CakeTestModel {
'non_existing' => array(),
'idontexist' => array(),
'imrequired' => array('rule' => array('between', 5, 30), 'allowEmpty' => false),
'string_required' => 'notEmpty',
'imalsorequired' => array('rule' => 'alphaNumeric', 'allowEmpty' => false),
'imrequiredtoo' => array('rule' => 'notEmpty'),
'required_one' => array('required' => array('rule' => array('notEmpty'))),
@ -845,7 +846,7 @@ class FormHelperTest extends CakeTestCase {
);
$this->assertTags($result, $expected);
}
/**
* Tests correct generation of number fields for integer fields
*
@ -1610,7 +1611,7 @@ class FormHelperTest extends CakeTestCase {
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->error(
'ValidateUser.email', 'Invalid email', array('wrap' => false)
);
@ -6584,6 +6585,141 @@ class FormHelperTest extends CakeTestCase {
$this->assertTags($result, $expected);
}
/**
* Test that required fields are created for various types of validation.
*
* @return void
*/
function testFormInputRequiredDetection() {
$this->Form->create('Contact');
$result = $this->Form->input('Contact.non_existing');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactNonExisting'),
'Non Existing',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][non_existing]',
'id' => 'ContactNonExisting'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imrequired');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImrequired'),
'Imrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imrequired]',
'id' => 'ContactImrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imalsorequired');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImalsorequired'),
'Imalsorequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imalsorequired]',
'id' => 'ContactImalsorequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imrequiredtoo');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImrequiredtoo'),
'Imrequiredtoo',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imrequiredtoo]',
'id' => 'ContactImrequiredtoo'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.required_one');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactRequiredOne'),
'Required One',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][required_one]',
'id' => 'ContactRequiredOne'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.string_required');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactStringRequired'),
'String Required',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][string_required]',
'id' => 'ContactStringRequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imnotrequired');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImnotrequired'),
'Imnotrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imnotrequired]',
'id' => 'ContactImnotrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imalsonotrequired');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImalsonotrequired'),
'Imalsonotrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imalsonotrequired]',
'id' => 'ContactImalsonotrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imnotrequiredeither');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImnotrequiredeither'),
'Imnotrequiredeither',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imnotrequiredeither]',
'id' => 'ContactImnotrequiredeither'
),
'/div'
);
$this->assertTags($result, $expected);
}
/**
* testFormMagicInput method
*
@ -6671,117 +6807,6 @@ class FormHelperTest extends CakeTestCase {
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.non_existing');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactNonExisting'),
'Non Existing',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][non_existing]',
'id' => 'ContactNonExisting'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imrequired');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImrequired'),
'Imrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imrequired]',
'id' => 'ContactImrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imalsorequired');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImalsorequired'),
'Imalsorequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imalsorequired]',
'id' => 'ContactImalsorequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imrequiredtoo');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactImrequiredtoo'),
'Imrequiredtoo',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imrequiredtoo]',
'id' => 'ContactImrequiredtoo'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.required_one');
$expected = array(
'div' => array('class' => 'input text required'),
'label' => array('for' => 'ContactRequiredOne'),
'Required One',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][required_one]',
'id' => 'ContactRequiredOne'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imnotrequired');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImnotrequired'),
'Imnotrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imnotrequired]',
'id' => 'ContactImnotrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imalsonotrequired');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImalsonotrequired'),
'Imalsonotrequired',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imalsonotrequired]',
'id' => 'ContactImalsonotrequired'
),
'/div'
);
$this->assertTags($result, $expected);
$result = $this->Form->input('Contact.imnotrequiredeither');
$expected = array(
'div' => array('class' => 'input text'),
'label' => array('for' => 'ContactImnotrequiredeither'),
'Imnotrequiredeither',
'/label',
'input' => array(
'type' => 'text', 'name' => 'data[Contact][imnotrequiredeither]',
'id' => 'ContactImnotrequiredeither'
),
'/div'
);
$this->assertTags($result, $expected);
extract($this->dateRegex);
$now = strtotime('now');
@ -7479,7 +7504,7 @@ class FormHelperTest extends CakeTestCase {
'input' => array('type' => 'text', 'name' => 'data[User][query]', 'id' => 'UserQuery', 'value' => 'test')
);
$this->assertTags($result, $expected);
$result = $this->Form->input('User.website', array('type' => 'url', 'value' => 'http://domain.tld', 'div' => false, 'label' => false));
$expected = array(
'input' => array('type' => 'url', 'name' => 'data[User][website]', 'id' => 'UserWebsite', 'value' => 'http://domain.tld')

View file

@ -798,7 +798,7 @@ class HtmlHelperTest extends CakeTestCase {
*/
public function testBreadcrumb() {
$this->assertNull($this->Html->getCrumbs());
$this->Html->addCrumb('First', '#first');
$this->Html->addCrumb('Second', '#second');
$this->Html->addCrumb('Third', '#third');

View file

@ -576,7 +576,7 @@ class RssHelperTest extends CakeTestCase {
$File = new File($tmpFile, true, '0777');
$this->assertTrue($File->write('123'), 'Could not write to ' . $tmpFile);
clearstatcache(true, $tmpFile);
$item = array(
'title' => array(
'value' => 'My Title',

View file

@ -403,8 +403,8 @@ class TimeHelperTest extends CakeTestCase {
$yourTimezone = new DateTimeZone($timezone);
$yourTime = new DateTime('now', $yourTimezone);
$userOffset = $yourTimezone->getOffset($yourTime) / HOUR;
$this->assertEqual($yourTime->format('r'), $this->Time->toRss(time(), $userOffset));
}
$this->assertEqual($yourTime->format('r'), $this->Time->toRss(time(), $userOffset));
}
}
}

View file

@ -255,7 +255,7 @@ class HelperTest extends CakeTestCase {
*/
public function testSetEntityScoped() {
$this->Helper->setEntity('HelperTestPost', true);
$this->assertEquals(array('HelperTestPost'), $this->Helper->entity());
$this->assertEquals(array('HelperTestPost'), $this->Helper->entity());
$this->Helper->setEntity('id');
$expected = array('HelperTestPost', 'id');
@ -310,6 +310,19 @@ class HelperTest extends CakeTestCase {
$this->assertEquals('HelperTestComment', $this->Helper->model());
}
/**
* Test creating saveMany() compatible entities
*
* @return void
*/
public function testSetEntitySaveMany() {
$this->Helper->setEntity('HelperTestPost', true);
$this->Helper->setEntity('0.HelperTestPost.id');
$expected = array('0', 'HelperTestPost', 'id');
$this->assertEquals($expected, $this->Helper->entity());
}
/**
* Test that setEntity doesn't make CamelCase fields that are not associations an
* associated model.

View file

@ -11,7 +11,7 @@ class FixturizedTestCase extends CakeTestCase {
/**
* Fixtures to use in this thes
* @var array
* @var array
*/
public $fixtures = array('core.category');

View file

@ -18,7 +18,7 @@
*/
class TestAppCacheEngine extends CacheEngine {
public function write($key, $value, $duration) {
public function write($key, $value, $duration) {
if ($key == 'fail') {
return false;
}

View file

@ -22,6 +22,6 @@ App::uses('CakeLogInterface', 'Log');
class TestAppLog implements CakeLogInterface {
public function write($type, $message) {
}
}

View file

@ -23,7 +23,7 @@ mon "<U0031><U6708>";"<U0032><U6708>";/
"<U0039><U6708>";"<U0031><U0030><U6708>";/
"<U0031><U0031><U6708>";"<U0031><U0032><U6708>"
% Appropriate date and time representation (%c)
%
%
d_t_fmt "<U0025><U0059><U5E74><U0025><U006D><U6708><U0025><U0064><U65E5><U0020><U0025><U0048><U6642><U0025><U004D><U5206><U0025><U0053><U79D2>"
%
% Appropriate date representation (%x)
@ -31,18 +31,18 @@ d_t_fmt "<U0025><U0059><U5E74><U0025><U006D><U6708><U0025><U0064><U65E5><U0020><
d_fmt "<U0025><U0059><U5E74><U0025><U006D><U6708><U0025><U0064><U65E5>"
%
% Appropriate time representation (%X)
%
%
t_fmt "<U0025><U0048><U6642><U0025><U004D><U5206><U0025><U0053><U79D2>"
%
% Appropriate AM/PM time representation (%r)
%
%
t_fmt_ampm "<U0025><U0070><U0025><U0049><U6642><U0025><U004D><U5206><U0025><U0053><U79D2>"
%
% Strings for AM/PM
%
am_pm "<U5348><U524D>";"<U5348><U5F8C>"
%
% Appropriate date representation (date(1))
% Appropriate date representation (date(1))
date_fmt "<U0025><U0059><U5E74><U0020><U0025><U0062><U0020><U0025>/
<U0065><U65E5><U0020><U0025><U0041><U0020><U0025><U0048><U003A><U0025>/
<U004D><U003A><U0025><U0053><U0020><U0025><U005A>"

View file

@ -10,22 +10,22 @@ class TestAppLibSession implements CakeSessionHandlerInterface {
}
public function close() {
}
public function read($id) {
}
public function write($id, $data) {
}
public function destroy($id) {
}
public function gc($expires = null) {
}
}

View file

@ -17,5 +17,5 @@
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
class OtherTaskTask extends Shell {
}

View file

@ -18,7 +18,7 @@
*/
class TestPluginController extends TestPluginAppController {
public $uses = array();
public function index() {
$this->autoRender = false;
}

View file

@ -29,5 +29,5 @@ class TestPluginCacheEngine extends CacheEngine {
public function delete($key) { }
public function clear($check) { }
}

View file

@ -19,6 +19,6 @@
class TestPluginLog implements CakeLogInterface {
public function write($type, $message) {
}
}

View file

@ -0,0 +1,19 @@
<?php
/**
* Test Suite TestPlugin Other Library
*
* PHP 5
*
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
* @package Cake.Test.test_app.Plugin.TestPlugin.Lib
* @since CakePHP(tm) v 2.0.1
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
class TestPluginOtherLibrary {}

View file

@ -9,22 +9,22 @@ class TestPluginSession implements CakeSessionHandlerInterface {
}
public function close() {
}
public function read($id) {
}
public function write($id, $data) {
}
public function destroy($id) {
}
public function gc($expires = null) {
}
}

View file

@ -1,5 +1,5 @@
<?php
class TestPluginAppHelper extends AppHelper {
}

View file

@ -1,4 +1,4 @@
<?php
<?php
echo $html;
echo $this->Html->link('Test link', '#');
?>

View file

@ -387,8 +387,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertEqual($result, $expected, $message = '') {
return $this->assertEquals($expected, $result, $message);
protected static function assertEqual($result, $expected, $message = '') {
return self::assertEquals($expected, $result, $message);
}
/**
@ -399,8 +399,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertNotEqual($result, $expected, $message = '') {
return $this->assertNotEquals($expected, $result, $message);
protected static function assertNotEqual($result, $expected, $message = '') {
return self::assertNotEquals($expected, $result, $message);
}
/**
@ -411,8 +411,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertPattern($pattern, $string, $message = '') {
return $this->assertRegExp($pattern, $string, $message);
protected static function assertPattern($pattern, $string, $message = '') {
return self::assertRegExp($pattern, $string, $message);
}
/**
@ -423,8 +423,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertIdentical($actual, $expected, $message = '') {
return $this->assertSame($expected, $actual, $message);
protected static function assertIdentical($actual, $expected, $message = '') {
return self::assertSame($expected, $actual, $message);
}
/**
@ -435,8 +435,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertNotIdentical($actual, $expected, $message = '') {
return $this->assertNotSame($expected, $actual, $message);
protected static function assertNotIdentical($actual, $expected, $message = '') {
return self::assertNotSame($expected, $actual, $message);
}
/**
@ -447,8 +447,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertNoPattern($pattern, $string, $message = '') {
return $this->assertNotRegExp($pattern, $string, $message);
protected static function assertNoPattern($pattern, $string, $message = '') {
return self::assertNotRegExp($pattern, $string, $message);
}
protected function assertNoErrors() {
@ -487,20 +487,20 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertReference(&$first, &$second, $message = '') {
return $this->assertSame($first, $second, $message);
protected static function assertReference(&$first, &$second, $message = '') {
return self::assertSame($first, $second, $message);
}
/**
* Compatibility wrapper for assertIsA
*
* @param string $object
* @param string $type
* @param string $message
* @param string $object
* @param string $type
* @param string $message
* @return void
*/
protected function assertIsA($object, $type, $message = '') {
return $this->assertInstanceOf($type, $object, $message);
protected static function assertIsA($object, $type, $message = '') {
return self::assertInstanceOf($type, $object, $message);
}
/**
@ -512,10 +512,10 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase {
* @param string $message the text to display if the assertion is not correct
* @return void
*/
protected function assertWithinMargin($result, $expected, $margin, $message = '') {
protected static function assertWithinMargin($result, $expected, $margin, $message = '') {
$upper = $result + $margin;
$lower = $result - $margin;
$this->assertTrue((($expected <= $upper) && ($expected >= $lower)), $message);
return self::assertTrue((($expected <= $upper) && ($expected >= $lower)), $message);
}
/**

View file

@ -38,8 +38,8 @@ class CakeTestRunner extends PHPUnit_TextUI_TestRunner {
/**
* Actually run a suite of tests. Cake initializes fixtures here using the chosen fixture manager
*
* @param PHPUnit_Framework_Test $suite
* @param array $arguments
* @param PHPUnit_Framework_Test $suite
* @param array $arguments
* @return void
*/
public function doRun(PHPUnit_Framework_Test $suite, array $arguments = array()) {

View file

@ -59,12 +59,21 @@ class ControllerTestDispatcher extends Dispatcher {
$this->testController->helpers = array_merge(array('InterceptContent'), $this->testController->helpers);
$this->testController->setRequest($request);
$this->testController->response = $this->response;
foreach ($this->testController->Components->attached() as $component) {
$object = $this->testController->Components->{$component};
if (isset($object->response)) {
$object->response = $response;
}
}
if (isset($object->request)) {
$object->request = $request;
}
return $this->testController;
}
/**
* Loads routes and resets if the test case dictates it should
*
*
* @return void
*/
protected function _loadRoutes() {
@ -190,7 +199,7 @@ abstract class ControllerTestCase extends CakeTestCase {
* - `vars` Get the set view variables.
* - `view` Get the rendered view, without a layout.
* - `contents` Get the rendered view including the layout.
* - `result` Get the return value of the controller action. Useful
* - `result` Get the return value of the controller action. Useful
* for testing requestAction methods.
*
* @param string $url The url to test
@ -260,7 +269,7 @@ abstract class ControllerTestCase extends CakeTestCase {
* Generates a mocked controller and mocks any classes passed to `$mocks`. By
* default, `_stop()` is stubbed as is sending the response headers, so to not
* interfere with testing.
*
*
* ### Mocks:
*
* - `methods` Methods to mock on the controller. `_stop()` is mocked by default
@ -289,10 +298,10 @@ abstract class ControllerTestCase extends CakeTestCase {
));
}
ClassRegistry::flush();
$mocks = array_merge_recursive(array(
'methods' => array('_stop'),
'models' => array(),
'models' => array(),
'components' => array()
), (array)$mocks);

View file

@ -188,7 +188,7 @@ class CakeTestFixture {
}
$this->Schema->build(array($this->table => $this->fields));
try {
$db->execute($db->dropSchema($this->Schema), array('log' => false));
} catch (Exception $e) {
return false;

View file

@ -61,7 +61,7 @@ class CakeTextReporter extends CakeBaseReporter {
$context = $context[2];
printf(
"FAIL on line %s\n%s in\n%s %s()\n\n",
"FAIL on line %s\n%s in\n%s %s()\n\n",
$context['line'], $message->toString(), $context['file'], $realContext['function']
);
}
@ -80,7 +80,7 @@ class CakeTextReporter extends CakeBaseReporter {
echo "FAILURES!!!\n";
}
echo "Test cases run: " . $result->count() .
echo "Test cases run: " . $result->count() .
"/" . ($result->count() - $result->skippedCount()) .
', Passes: ' . $this->numAssertions .
', Failures: ' . $result->failureCount() .

View file

@ -285,9 +285,9 @@ class Debugger {
'args' => false,
'start' => 0,
'scope' => null,
'exclude' => null
'exclude' => array('call_user_func_array', 'trigger_error')
);
$options += $defaults;
$options = Set::merge($defaults, $options);
$backtrace = debug_backtrace();
$count = count($backtrace);
@ -302,13 +302,15 @@ class Debugger {
for ($i = $options['start']; $i < $count && $i < $options['depth']; $i++) {
$trace = array_merge(array('file' => '[internal]', 'line' => '??'), $backtrace[$i]);
$signature = $reference = '[main]';
if (isset($backtrace[$i + 1])) {
$next = array_merge($_trace, $backtrace[$i + 1]);
$reference = $next['function'];
$signature = $reference = $next['function'];
if (!empty($next['class'])) {
$reference = $next['class'] . '::' . $reference . '(';
$signature = $next['class'] . '::' . $next['function'];
$reference = $signature . '(';
if ($options['args'] && isset($next['args'])) {
$args = array();
foreach ($next['args'] as $arg) {
@ -318,10 +320,8 @@ class Debugger {
}
$reference .= ')';
}
} else {
$reference = '[main]';
}
if (in_array($reference, array('call_user_func_array', 'trigger_error'))) {
if (in_array($signature, $options['exclude'])) {
continue;
}
if ($options['format'] == 'points' && $trace['file'] != '[internal]') {
@ -572,8 +572,8 @@ class Debugger {
*
* `Debugger::addFormat('custom', $data);`
*
* Where $data is an array of strings that use String::insert() variable
* replacement. The template vars should be in a `{:id}` style.
* Where $data is an array of strings that use String::insert() variable
* replacement. The template vars should be in a `{:id}` style.
* An error formatter can have the following keys:
*
* - 'error' - Used for the container for the error message. Gets the following template
@ -582,11 +582,11 @@ class Debugger {
* the contents of the other template keys.
* - 'trace' - The container for a stack trace. Gets the following template
* variables: `trace`
* - 'context' - The container element for the context variables.
* - 'context' - The container element for the context variables.
* Gets the following templates: `id`, `context`
* - 'links' - An array of HTML links that are used for creating links to other resources.
* Typically this is used to create javascript links to open other sections.
* Link keys, are: `code`, `context`, `help`. See the js output format for an
* Link keys, are: `code`, `context`, `help`. See the js output format for an
* example.
* - 'traceLine' - Used for creating lines in the stacktrace. Gets the following
* template variables: `reference`, `path`, `line`
@ -624,14 +624,14 @@ class Debugger {
}
/**
* Switches output format, updates format strings.
* Switches output format, updates format strings.
* Can be used to switch the active output format:
*
* @param string $format Format to use, including 'js' for JavaScript-enhanced HTML, 'html' for
* straight HTML output, or 'txt' for unformatted text.
* @param array $strings Template strings to be used for the output format.
* @return string
* @deprecated Use Debugger::outputAs() and Debugger::addFormat(). Will be removed
* @deprecated Use Debugger::outputAs() and Debugger::addFormat(). Will be removed
* in 3.0
*/
public function output($format = null, $strings = array()) {

View file

@ -1,6 +1,6 @@
<?php
/**
* SQL Dump element. Dumps out SQL log information
* SQL Dump element. Dumps out SQL log information
*
* PHP 5
*
@ -53,7 +53,7 @@ if ($noLogs || isset($_forced_from_dbo_)):
endforeach;
?>
</tbody></table>
<?php
<?php
endforeach;
else:
echo '<p>Encountered unexpected $logs cannot generate SQL log</p>';

View file

@ -444,9 +444,9 @@ class Helper extends Object {
$entity = $this->_modelScope . '.' . $entity;
}
// 0.name, 0.created.month style inputs.
// 0.name, 0.created.month style inputs. Excludes inputs with the modelScope in them.
if (
$count >= 2 && is_numeric($parts[0]) && !is_numeric($parts[1]) && $this->_modelScope
$count >= 2 && is_numeric($parts[0]) && !is_numeric($parts[1]) && $this->_modelScope && strpos($entity, $this->_modelScope) === false
) {
$entity = $this->_modelScope . '.' . $entity;
}

View file

@ -265,24 +265,26 @@ class CacheHelper extends AppHelper {
$file = '<!--cachetime:' . $cacheTime . '--><?php';
if (empty($this->_View->plugin)) {
$file .= '
App::import(\'Controller\', \'' . $this->_View->name. '\');
';
$file .= "
App::uses('{$this->_View->name}Controller', 'Controller');
";
} else {
$file .= '
App::import(\'Controller\', \'' . $this->_View->plugin . '.' . $this->_View->name. '\');
';
$file .= "
App::uses('{$this->_View->name}Controller', '{$this->_View->plugin}.Controller');
";
}
$file .= '$controller = new ' . $this->_View->name . 'Controller();
$file .= '
$request = unserialize(\'' . str_replace("'", "\\'", serialize($this->request)) . '\');
$response = new CakeResponse(array("charset" => Configure::read("App.encoding")));
$controller = new ' . $this->_View->name . 'Controller($request, $response);
$controller->plugin = $this->plugin = \'' . $this->_View->plugin . '\';
$controller->helpers = $this->helpers = unserialize(\'' . serialize($this->_View->helpers) . '\');
$controller->layout = $this->layout = \'' . $this->_View->layout. '\';
$controller->request = $this->request = unserialize(\'' . str_replace("'", "\\'", serialize($this->request)) . '\');
$controller->theme = $this->theme = \'' . $this->_View->theme . '\';
$controller->viewVars = $this->viewVars = unserialize(base64_decode(\'' . base64_encode(serialize($this->_View->viewVars)) . '\'));
Router::setRequestInfo($controller->request);';
Router::setRequestInfo($controller->request);
$this->request = $request;';
if ($useCallbacks == true) {
$file .= '

View file

@ -239,14 +239,16 @@ class FormHelper extends AppHelper {
}
/**
* Returns if a field is required to be filled based on validation properties from the validating object
* Returns if a field is required to be filled based on validation properties from the validating object.
*
* @param array $validateProperties
* @return boolean true if field is required to be filled, false otherwise
*/
protected function _isRequiredField($validateProperties) {
$required = false;
if (is_array($validateProperties)) {
if (is_string($validateProperties)) {
return true;
} elseif (is_array($validateProperties)) {
$dims = Set::countDim($validateProperties);
if ($dims == 1 || ($dims == 2 && isset($validateProperties['rule']))) {
@ -271,7 +273,7 @@ class FormHelper extends AppHelper {
* Returns false if given form field described by the current entity has no errors.
* Otherwise it returns the validation message
*
* @return mixed Either false when there or no errors, or the error
* @return mixed Either false when there or no errors, or the error
* string. The error string could be ''.
*/
public function tagIsInvalid() {

Some files were not shown because too many files have changed in this diff Show more