a grand renaming so that the most significant portion of the name comes first
This commit is contained in:
@@ -0,0 +1,804 @@
|
||||
<?php
|
||||
/**
|
||||
* HelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('View', 'Helper'));
|
||||
|
||||
/**
|
||||
* HelperTestPost class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class HelperTestPost extends Model {
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @access public
|
||||
*/
|
||||
var $useTable = false;
|
||||
|
||||
/**
|
||||
* schema method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function schema() {
|
||||
$this->_schema = array(
|
||||
'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'title' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
|
||||
'body' => array('type' => 'string', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'number' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'date' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
|
||||
);
|
||||
return $this->_schema;
|
||||
}
|
||||
|
||||
/**
|
||||
* hasAndBelongsToMany property
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $hasAndBelongsToMany = array('HelperTestTag'=> array('with' => 'HelperTestPostsTag'));
|
||||
}
|
||||
|
||||
/**
|
||||
* HelperTestComment class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class HelperTestComment extends Model {
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @access public
|
||||
*/
|
||||
var $useTable = false;
|
||||
|
||||
/**
|
||||
* schema method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function schema() {
|
||||
$this->_schema = array(
|
||||
'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'author_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'title' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
|
||||
'body' => array('type' => 'string', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
|
||||
);
|
||||
return $this->_schema;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HelperTestTag class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class HelperTestTag extends Model {
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @access public
|
||||
*/
|
||||
var $useTable = false;
|
||||
|
||||
/**
|
||||
* schema method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function schema() {
|
||||
$this->_schema = array(
|
||||
'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'name' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
|
||||
'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
|
||||
'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
|
||||
);
|
||||
return $this->_schema;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HelperTestPostsTag class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class HelperTestPostsTag extends Model {
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @access public
|
||||
*/
|
||||
var $useTable = false;
|
||||
|
||||
/**
|
||||
* schema method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function schema() {
|
||||
$this->_schema = array(
|
||||
'helper_test_post_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
'helper_test_tag_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
|
||||
);
|
||||
return $this->_schema;
|
||||
}
|
||||
}
|
||||
|
||||
class TestHelper extends Helper {
|
||||
/**
|
||||
* expose a method as public
|
||||
*
|
||||
* @param string $options
|
||||
* @param string $exclude
|
||||
* @param string $insertBefore
|
||||
* @param string $insertAfter
|
||||
* @return void
|
||||
*/
|
||||
function parseAttributes($options, $exclude = null, $insertBefore = ' ', $insertAfter = null) {
|
||||
return $this->_parseAttributes($options, $exclude, $insertBefore, $insertAfter);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
*/
|
||||
class HelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
ClassRegistry::flush();
|
||||
Router::reload();
|
||||
$null = null;
|
||||
$this->View = new View($null);
|
||||
$this->Helper = new Helper();
|
||||
ClassRegistry::addObject('HelperTestPost', new HelperTestPost());
|
||||
ClassRegistry::addObject('HelperTestComment', new HelperTestComment());
|
||||
ClassRegistry::addObject('HelperTestTag', new HelperTestTag());
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Helper, $this->View);
|
||||
ClassRegistry::flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* testFormFieldNameParsing method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSetEntity() {
|
||||
// PHP4 reference hack
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost.id');
|
||||
$this->assertFalse($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
|
||||
$this->Helper->setEntity('HelperTestComment.body');
|
||||
$this->assertFalse($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestComment');
|
||||
$this->assertEqual($this->View->field, 'body');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost', true);
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, null);
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('_Token.fields');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'fields');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, '_Token');
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
|
||||
$this->Helper->setEntity('id');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('HelperTestComment.body');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'body');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, 'HelperTestComment');
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('body');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'body');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('Something.else');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'else');
|
||||
$this->assertEqual($this->View->modelId, false);
|
||||
$this->assertEqual($this->View->association, 'Something');
|
||||
$this->assertEqual($this->View->fieldSuffix, '');
|
||||
|
||||
$this->Helper->setEntity('5.id');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, '5');
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->assertEqual($this->View->entity(), array('HelperTestPost', 5, 'id'));
|
||||
|
||||
$this->Helper->setEntity('0.id');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, '0');
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->assertEqual($this->View->entity(), array('HelperTestPost', 0, 'id'));
|
||||
|
||||
$this->Helper->setEntity('5.created.month');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'created');
|
||||
$this->assertEqual($this->View->modelId, '5');
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, 'month');
|
||||
|
||||
$this->Helper->setEntity('HelperTestComment.5.id');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, '5');
|
||||
$this->assertEqual($this->View->association, 'HelperTestComment');
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('HelperTestComment.id.time');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, 'HelperTestComment');
|
||||
$this->assertEqual($this->View->fieldSuffix, 'time');
|
||||
|
||||
$this->Helper->setEntity('HelperTestTag');
|
||||
$this->assertTrue($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->modelId, '');
|
||||
$this->assertEqual($this->View->association, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->fieldSuffix, '');
|
||||
|
||||
$this->Helper->setEntity(null);
|
||||
$this->Helper->setEntity('ModelThatDoesntExist.field_that_doesnt_exist');
|
||||
$this->assertFalse($this->View->modelScope);
|
||||
$this->assertEqual($this->View->model, 'ModelThatDoesntExist');
|
||||
$this->assertEqual($this->View->field, 'field_that_doesnt_exist');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that 'view' doesn't break things.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSetEntityWithView() {
|
||||
$this->assertNull($this->Helper->setEntity('Allow.view.group_id'));
|
||||
$this->assertNull($this->Helper->setEntity('Allow.view'));
|
||||
$this->assertNull($this->Helper->setEntity('View.view'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test getting values from Helper
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testValue() {
|
||||
$this->Helper->data = array('fullname' => 'This is me');
|
||||
$this->Helper->setEntity('fullname');
|
||||
$result = $this->Helper->value('fullname');
|
||||
$this->assertEqual($result, 'This is me');
|
||||
|
||||
$this->Helper->data = array('Post' => array('name' => 'First Post'));
|
||||
$this->Helper->setEntity('Post.name');
|
||||
$result = $this->Helper->value('Post.name');
|
||||
$this->assertEqual($result, 'First Post');
|
||||
|
||||
$this->Helper->data = array('Post' => array(2 => array('name' => 'First Post')));
|
||||
$this->Helper->setEntity('Post.2.name');
|
||||
$result = $this->Helper->value('Post.2.name');
|
||||
$this->assertEqual($result, 'First Post');
|
||||
|
||||
$this->Helper->data = array('Post' => array(2 => array('created' => array('year' => '2008'))));
|
||||
$this->Helper->setEntity('Post.2.created');
|
||||
$result = $this->Helper->value('Post.2.created');
|
||||
$this->assertEqual($result, array('year' => '2008'));
|
||||
|
||||
$this->Helper->data = array('Post' => array(2 => array('created' => array('year' => '2008'))));
|
||||
$this->Helper->setEntity('Post.2.created.year');
|
||||
$result = $this->Helper->value('Post.2.created.year');
|
||||
$this->assertEqual($result, '2008');
|
||||
|
||||
$this->Helper->data = array('HelperTestTag' => array('HelperTestTag' => ''));
|
||||
$this->Helper->setEntity('HelperTestTag.HelperTestTag');
|
||||
$result = $this->Helper->value('HelperTestTag.HelperTestTag');
|
||||
$this->assertEqual($result, '');
|
||||
|
||||
$this->Helper->data = array('HelperTestTag' => array('HelperTestTag' => array(2, 3, 4)));
|
||||
$this->Helper->setEntity('HelperTestTag.HelperTestTag');
|
||||
$result = $this->Helper->value('HelperTestTag.HelperTestTag');
|
||||
$this->assertEqual($result, array(2, 3, 4));
|
||||
|
||||
$this->Helper->data = array(
|
||||
'HelperTestTag' => array(
|
||||
array('id' => 3),
|
||||
array('id' => 5)
|
||||
)
|
||||
);
|
||||
$this->Helper->setEntity('HelperTestTag.HelperTestTag');
|
||||
$result = $this->Helper->value('HelperTestTag.HelperTestTag');
|
||||
$this->assertEqual($result, array(3 => 3, 5 => 5));
|
||||
|
||||
$this->Helper->data = array('zero' => 0);
|
||||
$this->Helper->setEntity('zero');
|
||||
$result = $this->Helper->value(array('default' => 'something'), 'zero');
|
||||
$this->assertEqual($result, array('value' => 0));
|
||||
|
||||
$this->Helper->data = array('zero' => '0');
|
||||
$result = $this->Helper->value(array('default' => 'something'), 'zero');
|
||||
$this->assertEqual($result, array('value' => '0'));
|
||||
|
||||
$this->Helper->setEntity('inexistent');
|
||||
$result = $this->Helper->value(array('default' => 'something'), 'inexistent');
|
||||
$this->assertEqual($result, array('value' => 'something'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure HTML escaping of url params. So link addresses are valid and not exploited
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testUrlConversion() {
|
||||
$result = $this->Helper->url('/controller/action/1');
|
||||
$this->assertEqual($result, '/controller/action/1');
|
||||
|
||||
$result = $this->Helper->url('/controller/action/1?one=1&two=2');
|
||||
$this->assertEqual($result, '/controller/action/1?one=1&two=2');
|
||||
|
||||
$result = $this->Helper->url(array('controller' => 'posts', 'action' => 'index', 'page' => '1" onclick="alert(\'XSS\');"'));
|
||||
$this->assertEqual($result, "/posts/index/page:1" onclick="alert('XSS');"");
|
||||
|
||||
$result = $this->Helper->url('/controller/action/1/param:this+one+more');
|
||||
$this->assertEqual($result, '/controller/action/1/param:this+one+more');
|
||||
|
||||
$result = $this->Helper->url('/controller/action/1/param:this%20one%20more');
|
||||
$this->assertEqual($result, '/controller/action/1/param:this%20one%20more');
|
||||
|
||||
$result = $this->Helper->url('/controller/action/1/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24');
|
||||
$this->assertEqual($result, '/controller/action/1/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24');
|
||||
|
||||
$result = $this->Helper->url(array(
|
||||
'controller' => 'posts', 'action' => 'index', 'param' => '%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24'
|
||||
));
|
||||
$this->assertEqual($result, "/posts/index/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24");
|
||||
|
||||
$result = $this->Helper->url(array(
|
||||
'controller' => 'posts', 'action' => 'index', 'page' => '1',
|
||||
'?' => array('one' => 'value', 'two' => 'value', 'three' => 'purple')
|
||||
));
|
||||
$this->assertEqual($result, "/posts/index/page:1?one=value&two=value&three=purple");
|
||||
}
|
||||
|
||||
/**
|
||||
* test assetTimestamp application
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testAssetTimestamp() {
|
||||
$_timestamp = Configure::read('Asset.timestamp');
|
||||
$_debug = Configure::read('debug');
|
||||
|
||||
Configure::write('Asset.timestamp', false);
|
||||
$result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
|
||||
$this->assertEqual($result, CSS_URL . 'cake.generic.css');
|
||||
|
||||
Configure::write('Asset.timestamp', true);
|
||||
Configure::write('debug', 0);
|
||||
$result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
|
||||
$this->assertEqual($result, CSS_URL . 'cake.generic.css');
|
||||
|
||||
Configure::write('Asset.timestamp', true);
|
||||
Configure::write('debug', 2);
|
||||
$result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
|
||||
$this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
|
||||
|
||||
Configure::write('Asset.timestamp', 'force');
|
||||
Configure::write('debug', 0);
|
||||
$result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
|
||||
$this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
|
||||
|
||||
$result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css?someparam');
|
||||
$this->assertEqual($result, CSS_URL . 'cake.generic.css?someparam');
|
||||
|
||||
$this->Helper->webroot = '/some/dir/';
|
||||
$result = $this->Helper->assetTimestamp('/some/dir/' . CSS_URL . 'cake.generic.css');
|
||||
$this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
|
||||
|
||||
Configure::write('debug', $_debug);
|
||||
Configure::write('Asset.timestamp', $_timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* test assetTimestamp with plugins and themes
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testAssetTimestampPluginsAndThemes() {
|
||||
$_timestamp = Configure::read('Asset.timestamp');
|
||||
Configure::write('Asset.timestamp', 'force');
|
||||
App::build(array(
|
||||
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS),
|
||||
));
|
||||
|
||||
$result = $this->Helper->assetTimestamp('/test_plugin/css/test_plugin_asset.css');
|
||||
$this->assertPattern('#/test_plugin/css/test_plugin_asset.css\?[0-9]+$#', $result, 'Missing timestamp plugin');
|
||||
|
||||
$result = $this->Helper->assetTimestamp('/test_plugin/css/i_dont_exist.css');
|
||||
$this->assertPattern('#/test_plugin/css/i_dont_exist.css\?$#', $result, 'No error on missing file');
|
||||
|
||||
$result = $this->Helper->assetTimestamp('/theme/test_theme/js/theme.js');
|
||||
$this->assertPattern('#/theme/test_theme/js/theme.js\?[0-9]+$#', $result, 'Missing timestamp theme');
|
||||
|
||||
$result = $this->Helper->assetTimestamp('/theme/test_theme/js/non_existant.js');
|
||||
$this->assertPattern('#/theme/test_theme/js/non_existant.js\?$#', $result, 'No error on missing file');
|
||||
|
||||
App::build();
|
||||
Configure::write('Asset.timestamp', $_timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFieldsWithSameName method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFieldsWithSameName() {
|
||||
// PHP4 reference hack
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
|
||||
$this->Helper->setEntity('HelperTestTag', true);
|
||||
|
||||
$this->Helper->setEntity('HelperTestTag.id');
|
||||
$this->assertEqual($this->View->model, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('My.id');
|
||||
$this->assertEqual($this->View->model, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, 'My');
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('MyOther.id');
|
||||
$this->assertEqual($this->View->model, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->field, 'id');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, 'MyOther');
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testFieldSameAsModel method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFieldSameAsModel() {
|
||||
// PHP4 reference hack
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
|
||||
$this->Helper->setEntity('HelperTestTag', true);
|
||||
|
||||
$this->Helper->setEntity('helper_test_post');
|
||||
$this->assertEqual($this->View->model, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->field, 'helper_test_post');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('HelperTestTag');
|
||||
$this->assertEqual($this->View->model, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->field, 'HelperTestTag');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
$this->assertEqual($this->View->entityPath, 'HelperTestTag');
|
||||
}
|
||||
|
||||
/**
|
||||
* testFieldSuffixForDate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFieldSuffixForDate() {
|
||||
// PHP4 reference hack
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost', true);
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, null);
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, null);
|
||||
|
||||
$this->Helper->setEntity('date.month');
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->field, 'date');
|
||||
$this->assertEqual($this->View->modelId, null);
|
||||
$this->assertEqual($this->View->association, null);
|
||||
$this->assertEqual($this->View->fieldSuffix, 'month');
|
||||
}
|
||||
|
||||
/**
|
||||
* testMulitDimensionValue method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMulitDimensionValue() {
|
||||
$this->Helper->data = array();
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
$this->Helper->data['Model'][$i] = 'what';
|
||||
$result[] = $this->Helper->value("Model.{$i}");
|
||||
$this->Helper->data['Model'][$i] = array();
|
||||
for ($j = 0; $j < 2; $j++) {
|
||||
$this->Helper->data['Model'][$i][$j] = 'how';
|
||||
$result[] = $this->Helper->value("Model.{$i}.{$j}");
|
||||
}
|
||||
}
|
||||
$expected = array('what', 'how', 'how', 'what', 'how', 'how');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Helper->data['HelperTestComment']['5']['id'] = 'ok';
|
||||
$result = $this->Helper->value('HelperTestComment.5.id');
|
||||
$this->assertEqual($result, 'ok');
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost', true);
|
||||
$this->Helper->data['HelperTestPost']['5']['created']['month'] = '10';
|
||||
$result = $this->Helper->value('5.created.month');
|
||||
$this->assertEqual($result, 10);
|
||||
|
||||
$this->Helper->data['HelperTestPost']['0']['id'] = 100;
|
||||
$result = $this->Helper->value('0.id');
|
||||
$this->assertEqual($result, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* testClean method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testClean() {
|
||||
$result = $this->Helper->clean(array());
|
||||
$this->assertEqual($result, null);
|
||||
|
||||
$result = $this->Helper->clean(array('<script>with something</script>', '<applet>something else</applet>'));
|
||||
$this->assertEqual($result, array('with something', 'something else'));
|
||||
|
||||
$result = $this->Helper->clean('<script>with something</script>');
|
||||
$this->assertEqual($result, 'with something');
|
||||
|
||||
$result = $this->Helper->clean('<script type="text/javascript">alert("ruined");</script>');
|
||||
$this->assertNoPattern('#</*script#', $result);
|
||||
|
||||
$result = $this->Helper->clean("<script \ntype=\"text/javascript\">\n\talert('ruined');\n\n\t\t</script>");
|
||||
$this->assertNoPattern('#</*script#', $result);
|
||||
|
||||
$result = $this->Helper->clean('<body/onload=do(/something/)>');
|
||||
$this->assertEqual($result, '<body/>');
|
||||
|
||||
$result = $this->Helper->clean('<script>alert(document.cookie)</script>');
|
||||
$this->assertEqual($result, '&lt;script&gt;alert(document.cookie)&lt;/script&gt;');
|
||||
}
|
||||
|
||||
/**
|
||||
* testMultiDimensionalField method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMultiDimensionalField() {
|
||||
// PHP4 reference hack
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost', true);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost.2.HelperTestComment.1.title');
|
||||
$this->assertEqual($this->View->model, 'HelperTestPost');
|
||||
$this->assertEqual($this->View->association, 'HelperTestComment');
|
||||
$this->assertEqual($this->View->modelId,2);
|
||||
$this->assertEqual($this->View->field, 'title');
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost.1.HelperTestComment.1.HelperTestTag.1.created');
|
||||
$this->assertEqual($this->View->field,'created');
|
||||
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||
$this->assertEqual($this->View->modelId,1);
|
||||
|
||||
$this->Helper->setEntity('HelperTestPost.0.HelperTestComment.1.HelperTestTag.1.fake');
|
||||
$this->assertEqual($this->View->model,'HelperTestPost');
|
||||
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||
$this->assertEqual($this->View->field,null);
|
||||
|
||||
$this->Helper->setEntity('1.HelperTestComment.1.HelperTestTag.created.year');
|
||||
$this->assertEqual($this->View->model,'HelperTestPost');
|
||||
$this->assertEqual($this->View->association,'HelperTestTag');
|
||||
$this->assertEqual($this->View->field,'created');
|
||||
$this->assertEqual($this->View->modelId,1);
|
||||
$this->assertEqual($this->View->fieldSuffix,'year');
|
||||
|
||||
$this->Helper->data['HelperTestPost'][2]['HelperTestComment'][1]['title'] = 'My Title';
|
||||
$result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.title');
|
||||
$this->assertEqual($result,'My Title');
|
||||
|
||||
$this->Helper->data['HelperTestPost'][2]['HelperTestComment'][1]['created']['year'] = 2008;
|
||||
$result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.created.year');
|
||||
$this->assertEqual($result,2008);
|
||||
|
||||
$this->Helper->data[2]['HelperTestComment'][1]['created']['year'] = 2008;
|
||||
$result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.created.year');
|
||||
$this->assertEqual($result,2008);
|
||||
|
||||
$this->Helper->data['HelperTestPost']['title'] = 'My Title';
|
||||
$result = $this->Helper->value('title');
|
||||
$this->assertEqual($result,'My Title');
|
||||
|
||||
$this->Helper->data['My']['title'] = 'My Title';
|
||||
$result = $this->Helper->value('My.title');
|
||||
$this->assertEqual($result,'My Title');
|
||||
}
|
||||
|
||||
function testWebrootPaths() {
|
||||
$this->Helper->webroot = '/';
|
||||
$result = $this->Helper->webroot('/img/cake.power.gif');
|
||||
$expected = '/img/cake.power.gif';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Helper->theme = 'test_theme';
|
||||
|
||||
App::build(array(
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
|
||||
$result = $this->Helper->webroot('/img/cake.power.gif');
|
||||
$expected = '/theme/test_theme/img/cake.power.gif';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Helper->webroot('/img/test.jpg');
|
||||
$expected = '/theme/test_theme/img/test.jpg';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$webRoot = Configure::read('App.www_root');
|
||||
Configure::write('App.www_root', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'webroot' . DS);
|
||||
|
||||
$result = $this->Helper->webroot('/img/cake.power.gif');
|
||||
$expected = '/theme/test_theme/img/cake.power.gif';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Helper->webroot('/img/test.jpg');
|
||||
$expected = '/theme/test_theme/img/test.jpg';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Helper->webroot('/img/cake.icon.gif');
|
||||
$expected = '/img/cake.icon.gif';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Helper->webroot('/img/cake.icon.gif?some=param');
|
||||
$expected = '/img/cake.icon.gif?some=param';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
Configure::write('App.www_root', $webRoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* test parsing attributes.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testParseAttributeCompact() {
|
||||
$helper =& new TestHelper();
|
||||
$compact = array('compact', 'checked', 'declare', 'readonly', 'disabled',
|
||||
'selected', 'defer', 'ismap', 'nohref', 'noshade', 'nowrap', 'multiple', 'noresize');
|
||||
|
||||
foreach ($compact as $attribute) {
|
||||
foreach (array('true', true, 1, '1', $attribute) as $value) {
|
||||
$attrs = array($attribute => $value);
|
||||
$expected = ' ' . $attribute . '="' . $attribute . '"';
|
||||
$this->assertEqual($helper->parseAttributes($attrs), $expected, '%s Failed on ' . $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,910 @@
|
||||
<?php
|
||||
/**
|
||||
* AjaxHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
App::import('Helper', array('Html', 'Form', 'Javascript', 'Ajax'));
|
||||
/**
|
||||
* AjaxTestController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class AjaxTestController extends Controller {
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'AjaxTest'
|
||||
* @access public
|
||||
*/
|
||||
var $name = 'AjaxTest';
|
||||
/**
|
||||
* uses property
|
||||
*
|
||||
* @var mixed null
|
||||
* @access public
|
||||
*/
|
||||
var $uses = null;
|
||||
}
|
||||
/**
|
||||
* PostAjaxTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class PostAjaxTest extends Model {
|
||||
/**
|
||||
* primaryKey property
|
||||
*
|
||||
* @var string 'id'
|
||||
* @access public
|
||||
*/
|
||||
var $primaryKey = 'id';
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @access public
|
||||
*/
|
||||
var $useTable = false;
|
||||
/**
|
||||
* schema method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function schema() {
|
||||
return array(
|
||||
'id' => array('type' => 'integer', 'null' => '', 'default' => '', 'length' => '8'),
|
||||
'name' => array('type' => 'string', 'null' => '', 'default' => '', 'length' => '255'),
|
||||
'created' => array('type' => 'date', 'null' => '1', 'default' => '', 'length' => ''),
|
||||
'updated' => array('type' => 'datetime', 'null' => '1', 'default' => '', 'length' => null)
|
||||
);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* TestAjaxHelper class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TestAjaxHelper extends AjaxHelper {
|
||||
/**
|
||||
* stop method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function _stop() {
|
||||
}
|
||||
}
|
||||
/**
|
||||
* TestJavascriptHelper class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TestJavascriptHelper extends JavascriptHelper {
|
||||
/**
|
||||
* codeBlocks property
|
||||
*
|
||||
* @var mixed
|
||||
* @access public
|
||||
*/
|
||||
var $codeBlocks;
|
||||
/**
|
||||
* codeBlock method
|
||||
*
|
||||
* @param mixed $parameter
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function codeBlock($parameter) {
|
||||
if (empty($this->codeBlocks)) {
|
||||
$this->codeBlocks = array();
|
||||
}
|
||||
$this->codeBlocks[] = $parameter;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* AjaxTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class AjaxHelperTest extends CakeTestCase {
|
||||
/**
|
||||
* Regexp for CDATA start block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataStart = 'preg:/^\/\/<!\[CDATA\[[\n\r]*/';
|
||||
/**
|
||||
* Regexp for CDATA end block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataEnd = 'preg:/[^\]]*\]\]\>[\s\r\n]*/';
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
Router::reload();
|
||||
$this->Ajax =& new TestAjaxHelper();
|
||||
$this->Ajax->Html =& new HtmlHelper();
|
||||
$this->Ajax->Form =& new FormHelper();
|
||||
$this->Ajax->Javascript =& new JavascriptHelper();
|
||||
$this->Ajax->Form->Html =& $this->Ajax->Html;
|
||||
$view =& new View(new AjaxTestController());
|
||||
ClassRegistry::addObject('view', $view);
|
||||
ClassRegistry::addObject('PostAjaxTest', new PostAjaxTest());
|
||||
|
||||
$this->Ajax->Form->params = array(
|
||||
'plugin' => null,
|
||||
'action' => 'view',
|
||||
'controller' => 'users'
|
||||
);
|
||||
}
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Ajax);
|
||||
ClassRegistry::flush();
|
||||
}
|
||||
/**
|
||||
* testEvalScripts method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEvalScripts() {
|
||||
$result = $this->Ajax->link('Test Link', 'http://www.cakephp.org', array('id' => 'link1', 'update' => 'content', 'evalScripts' => false));
|
||||
$expected = array(
|
||||
'a' => array('id' => 'link1', 'onclick' => ' event.returnValue = false; return false;', 'href' => 'http://www.cakephp.org'),
|
||||
'Test Link',
|
||||
'/a',
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Event.observe('link1', 'click', function(event) { new Ajax.Updater('content','http://www.cakephp.org', {asynchronous:true, evalScripts:false, requestHeaders:['X-Update', 'content']}) }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->link('Test Link', 'http://www.cakephp.org', array('id' => 'link1', 'update' => 'content'));
|
||||
$expected = array(
|
||||
'a' => array('id' => 'link1', 'onclick' => ' event.returnValue = false; return false;', 'href' => 'http://www.cakephp.org'),
|
||||
'Test Link',
|
||||
'/a',
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Event.observe('link1', 'click', function(event) { new Ajax.Updater('content','http://www.cakephp.org', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'content']}) }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testAutoComplete method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAutoComplete() {
|
||||
$result = $this->Ajax->autoComplete('PostAjaxTest.title' , '/posts', array('minChars' => 2));
|
||||
$this->assertPattern('/^<input[^<>]+name="data\[PostAjaxTest\]\[title\]"[^<>]+autocomplete="off"[^<>]+\/>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+id="PostAjaxTestTitle_autoComplete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+class="auto_complete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<\/div>\s+<script type="text\/javascript">\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\',')) . '/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\', {minChars:2});')) . '/', $result);
|
||||
$this->assertPattern('/<\/script>$/', $result);
|
||||
|
||||
$result = $this->Ajax->autoComplete('PostAjaxTest.title' , '/posts', array('paramName' => 'parameter'));
|
||||
$this->assertPattern('/^<input[^<>]+name="data\[PostAjaxTest\]\[title\]"[^<>]+autocomplete="off"[^<>]+\/>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+id="PostAjaxTestTitle_autoComplete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+class="auto_complete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<\/div>\s+<script type="text\/javascript">\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\',')) . '/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\', {paramName:\'parameter\'});')) . '/', $result);
|
||||
$this->assertPattern('/<\/script>$/', $result);
|
||||
|
||||
$result = $this->Ajax->autoComplete('PostAjaxTest.title' , '/posts', array('paramName' => 'parameter', 'updateElement' => 'elementUpdated', 'afterUpdateElement' => 'function (input, element) { alert("updated"); }'));
|
||||
$this->assertPattern('/^<input[^<>]+name="data\[PostAjaxTest\]\[title\]"[^<>]+autocomplete="off"[^<>]+\/>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+id="PostAjaxTestTitle_autoComplete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+class="auto_complete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<\/div>\s+<script type="text\/javascript">\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\',')) . '/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\', {paramName:\'parameter\', updateElement:elementUpdated, afterUpdateElement:function (input, element) { alert("updated"); }});')) . '/', $result);
|
||||
$this->assertPattern('/<\/script>$/', $result);
|
||||
|
||||
$result = $this->Ajax->autoComplete('PostAjaxTest.title' , '/posts', array('callback' => 'function (input, queryString) { alert("requesting"); }'));
|
||||
$this->assertPattern('/^<input[^<>]+name="data\[PostAjaxTest\]\[title\]"[^<>]+autocomplete="off"[^<>]+\/>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+id="PostAjaxTestTitle_autoComplete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<div[^<>]+class="auto_complete"[^<>]*><\/div>/', $result);
|
||||
$this->assertPattern('/<\/div>\s+<script type="text\/javascript">\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\',')) . '/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Autocompleter(\'PostAjaxTestTitle\', \'PostAjaxTestTitle_autoComplete\', \'/posts\', {callback:function (input, queryString) { alert("requesting"); }});')) . '/', $result);
|
||||
$this->assertPattern('/<\/script>$/', $result);
|
||||
|
||||
$result = $this->Ajax->autoComplete("PostAjaxText.title", "/post", array("parameters" => "'key=value&key2=value2'"));
|
||||
$this->assertPattern('/{parameters:\'key=value&key2=value2\'}/', $result);
|
||||
|
||||
$result = $this->Ajax->autoComplete("PostAjaxText.title", "/post", array("with" => "'key=value&key2=value2'"));
|
||||
$this->assertPattern('/{parameters:\'key=value&key2=value2\'}/', $result);
|
||||
|
||||
}
|
||||
/**
|
||||
* testAsynchronous method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAsynchronous() {
|
||||
$result = $this->Ajax->link('Test Link', '/', array('id' => 'link1', 'update' => 'content', 'type' => 'synchronous'));
|
||||
$expected = array(
|
||||
'a' => array('id' => 'link1', 'onclick' => ' event.returnValue = false; return false;', 'href' => '/'),
|
||||
'Test Link',
|
||||
'/a',
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Event.observe('link1', 'click', function(event) { new Ajax.Updater('content','/', {asynchronous:false, evalScripts:true, requestHeaders:['X-Update', 'content']}) }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testDraggable method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDraggable() {
|
||||
$result = $this->Ajax->drag('id', array('handle' => 'other_id'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Draggable('id', {handle:'other_id'});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->drag('id', array('onDrag' => 'doDrag', 'onEnd' => 'doEnd'));
|
||||
$this->assertPattern('/onDrag:doDrag/', $result);
|
||||
$this->assertPattern('/onEnd:doEnd/', $result);
|
||||
}
|
||||
/**
|
||||
* testDroppable method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDroppable() {
|
||||
$result = $this->Ajax->drop('droppable', array('accept' => 'crap'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Droppables.add('droppable', {accept:'crap'});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->dropRemote('droppable', array('accept' => 'crap'), array('url' => '/posts'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Droppables.add('droppable', {accept:'crap', onDrop:function(element, droppable, event) {new Ajax.Request('/posts', {asynchronous:true, evalScripts:true})}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->dropRemote('droppable', array('accept' => array('crap1', 'crap2')), array('url' => '/posts'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Droppables.add('droppable', {accept:[\"crap1\",\"crap2\"], onDrop:function(element, droppable, event) {new Ajax.Request('/posts', {asynchronous:true, evalScripts:true})}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->dropRemote('droppable', array('accept' => 'crap'), array('url' => '/posts', 'with' => '{drag_id:element.id,drop_id:dropon.id,event:event.whatever_you_want}'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Droppables.add('droppable', {accept:'crap', onDrop:function(element, droppable, event) {new Ajax.Request('/posts', {asynchronous:true, evalScripts:true, parameters:{drag_id:element.id,drop_id:dropon.id,event:event.whatever_you_want}})}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testForm method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testForm() {
|
||||
$result = $this->Ajax->form('showForm', 'post', array('model' => 'Form', 'url' => array('action' => 'showForm', 'controller' => 'forms'), 'update' => 'form_box'));
|
||||
$this->assertNoPattern('/model=/', $result);
|
||||
|
||||
$result = $this->Ajax->form('showForm', 'post', array('name'=> 'SomeFormName', 'id' => 'MyFormID', 'url' => array('action' => 'showForm', 'controller' => 'forms'), 'update' => 'form_box'));
|
||||
$this->assertPattern('/id="MyFormID"/', $result);
|
||||
$this->assertPattern('/name="SomeFormName"/', $result);
|
||||
}
|
||||
/**
|
||||
* testSortable method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSortable() {
|
||||
$result = $this->Ajax->sortable('ull', array('constraint' => false, 'ghosting' => true));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Sortable.create('ull', {constraint:false, ghosting:true});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('ull', array('constraint' => 'false', 'ghosting' => 'true'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Sortable.create('ull', {constraint:false, ghosting:true});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('ull', array('constraint'=>'false', 'ghosting'=>'true', 'update' => 'myId'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Sortable.create('ull', {constraint:false, ghosting:true, update:'myId'});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('faqs', array('url'=>'http://www.cakephp.org',
|
||||
'update' => 'faqs',
|
||||
'tag' => 'tbody',
|
||||
'handle' => 'grip',
|
||||
'before' => "Element.hide('message')",
|
||||
'complete' => "Element.show('message');"
|
||||
));
|
||||
$expected = 'Sortable.create(\'faqs\', {update:\'faqs\', tag:\'tbody\', handle:\'grip\', onUpdate:function(sortable) {Element.hide(\'message\'); new Ajax.Updater(\'faqs\',\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, onComplete:function(request, json) {Element.show(\'message\');}, parameters:Sortable.serialize(\'faqs\'), requestHeaders:[\'X-Update\', \'faqs\']})}});';
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*' . str_replace('/', '\\/', preg_quote($expected)) . '\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
|
||||
$result = $this->Ajax->sortable('div', array('overlap' => 'foo'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"Sortable.create('div', {overlap:'foo'});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('div', array('block' => false));
|
||||
$expected = "Sortable.create('div', {});";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('div', array('block' => false, 'scroll' => 'someID'));
|
||||
$expected = "Sortable.create('div', {scroll:'someID'});";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('div', array('block' => false, 'scroll' => 'window'));
|
||||
$expected = "Sortable.create('div', {scroll:window});";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->sortable('div', array('block' => false, 'scroll' => "$('someElement')"));
|
||||
$expected = "Sortable.create('div', {scroll:$('someElement')});";
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testSubmitWithIndicator method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSubmitWithIndicator() {
|
||||
$result = $this->Ajax->submit('Add', array('div' => false, 'url' => "http://www.cakephp.org", 'indicator' => 'loading', 'loading' => "doSomething()", 'complete' => 'doSomethingElse() '));
|
||||
$this->assertPattern('/onLoading:function\(request\) {doSomething\(\);\s+Element.show\(\'loading\'\);}/', $result);
|
||||
$this->assertPattern('/onComplete:function\(request, json\) {doSomethingElse\(\) ;\s+Element.hide\(\'loading\'\);}/', $result);
|
||||
}
|
||||
/**
|
||||
* testLink method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testLink() {
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads');
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="link\d+"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'link\d+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Request\(\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('confirm' => 'Are you sure & positive?'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="link\d+"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'link\d+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*if \(confirm\(\'Are you sure & positive\?\'\)\) {\s*new Ajax\.Request\(\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true}\);\s*}\s*else\s*{\s*event.returnValue = false;\s*return false;\s*}\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="link\d+"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'link\d+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'id' => 'myLink'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="myLink"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'myLink\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'id' => 'myLink', 'complete' => 'myComplete();'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="myLink"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'myLink\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, onComplete:function\(request, json\) {myComplete\(\);}, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'id' => 'myLink', 'loading' => 'myLoading();', 'complete' => 'myComplete();'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+id="myLink"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'myLink\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, onComplete:function\(request, json\) {myComplete\(\);}, onLoading:function\(request\) {myLoading\(\);}, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'encoding' => 'utf-8'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'\w+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, encoding:\'utf-8\', requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'success' => 'success();'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'\w+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, onSuccess:function\(request\) {success\(\);}, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', 'http://www.cakephp.org/downloads', array('update' => 'myDiv', 'failure' => 'failure();'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+href="http:\/\/www.cakephp.org\/downloads"[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<a[^<>]+onclick="\s*event.returnValue = false;\s*return false;"[^<>]*>/', $result);
|
||||
$this->assertPattern('/<script[^<>]+type="text\/javascript"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/Event.observe\(\'\w+\',\s*\'click\',\s*function\(event\)\s*{.+},\s*false\);\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/function\(event\)\s*{\s*new Ajax\.Updater\(\'myDiv\',\s*\'http:\/\/www.cakephp.org\/downloads\',\s*{asynchronous:true, evalScripts:true, onFailure:function\(request\) {failure\(\);}, requestHeaders:\[\'X-Update\', \'myDiv\'\]}\)\s*},\s*false\);/', $result);
|
||||
|
||||
$result = $this->Ajax->link('Ajax Link', '/test', array('complete' => 'test'));
|
||||
$this->assertPattern('/^<a[^<>]+>Ajax Link<\/a><script [^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*[^<>]+\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern("/Event.observe\('link[0-9]+', [\w\d,'\(\)\s{}]+Ajax\.Request\([\w\d\s,'\(\){}:\/]+onComplete:function\(request, json\) {test}/", $result);
|
||||
$this->assertNoPattern('/^<a[^<>]+complete="test"[^<>]*>Ajax Link<\/a>/', $result);
|
||||
$this->assertNoPattern('/^<a\s+[^<>]*url="[^"]*"[^<>]*>/', $result);
|
||||
|
||||
$result = $this->Ajax->link(
|
||||
'Ajax Link',
|
||||
array('controller' => 'posts', 'action' => 'index', '?' => array('one' => '1', 'two' => '2')),
|
||||
array('update' => 'myDiv', 'id' => 'myLink')
|
||||
);
|
||||
$this->assertPattern('#/posts\?one\=1\&two\=2#', $result);
|
||||
}
|
||||
/**
|
||||
* testRemoteTimer method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRemoteTimer() {
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'frequency' => 25));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 25\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'complete' => 'complete();'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, onComplete:function(request, json) {complete();}})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'complete' => 'complete();', 'create' => 'create();'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, onComplete:function(request, json) {complete();}, onCreate:function(request, xhr) {create();}})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'exception' => 'alert(exception);'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, onException:function(request, exception) {alert(exception);}})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'contentType' => 'application/x-www-form-urlencoded'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, contentType:\'application/x-www-form-urlencoded\'})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'method' => 'get', 'encoding' => 'utf-8'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, method:\'get\', encoding:\'utf-8\'})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->remoteTimer(array('url' => 'http://www.cakephp.org', 'postBody' => 'var1=value1'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new PeriodicalExecuter\(function\(\) {.+}, 10\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, postBody:\'var1=value1\'})')) . '/', $result);
|
||||
}
|
||||
/**
|
||||
* testObserveField method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testObserveField() {
|
||||
$result = $this->Ajax->observeField('field', array('url' => 'http://www.cakephp.org'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new Form.Element.EventObserver\(\'field\', function\(element, value\) {.+}\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize(\'field\')})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->observeField('field', array('url' => 'http://www.cakephp.org', 'frequency' => 15));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new Form.Element.Observer\(\'field\', 15, function\(element, value\) {.+}\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Request(\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize(\'field\')})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->observeField('field', array('url' => 'http://www.cakephp.org', 'update' => 'divId'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new Form.Element.EventObserver\(\'field\', function\(element, value\) {.+}\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Updater(\'divId\',\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize(\'field\'), requestHeaders:[\'X-Update\', \'divId\']})')) . '/', $result);
|
||||
|
||||
$result = $this->Ajax->observeField('field', array('url' => 'http://www.cakephp.org', 'update' => 'divId', 'with' => 'Form.Element.serialize(\'otherField\')'));
|
||||
$this->assertPattern('/^<script[^<>]+type="text\/javascript"[^<>]*>.+<\/script>$/s', $result);
|
||||
$this->assertNoPattern('/<script[^<>]+[^type]=[^<>]*>/', $result);
|
||||
$this->assertPattern('/^<script[^<>]+>\s*' . str_replace('/', '\\/', preg_quote('//<![CDATA[')) . '\s*new Form.Element.EventObserver\(\'field\', function\(element, value\) {.+}\)\s*' . str_replace('/', '\\/', preg_quote('//]]>')) . '\s*<\/script>$/', $result);
|
||||
$this->assertPattern('/' . str_replace('/', '\\/', preg_quote('new Ajax.Updater(\'divId\',\'http://www.cakephp.org\', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize(\'otherField\'), requestHeaders:[\'X-Update\', \'divId\']})')) . '/', $result);
|
||||
}
|
||||
/**
|
||||
* testObserveForm method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testObserveForm() {
|
||||
$result = $this->Ajax->observeForm('form', array('url' => 'http://www.cakephp.org'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Form.EventObserver('form', function(element, value) {new Ajax.Request('http://www.cakephp.org', {asynchronous:true, evalScripts:true, parameters:Form.serialize('form')})})",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->observeForm('form', array('url' => 'http://www.cakephp.org', 'frequency' => 15));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Form.Observer('form', 15, function(element, value) {new Ajax.Request('http://www.cakephp.org', {asynchronous:true, evalScripts:true, parameters:Form.serialize('form')})})",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->observeForm('form', array('url' => 'http://www.cakephp.org', 'update' => 'divId'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Form.EventObserver('form', function(element, value) {new Ajax.Updater('divId','http://www.cakephp.org', {asynchronous:true, evalScripts:true, parameters:Form.serialize('form'), requestHeaders:['X-Update', 'divId']})}",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->observeForm('form', array('url' => 'http://www.cakephp.org', 'update' => 'divId', 'with' => "Form.serialize('otherForm')"));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Form.EventObserver('form', function(element, value) {new Ajax.Updater('divId','http://www.cakephp.org', {asynchronous:true, evalScripts:true, parameters:Form.serialize('otherForm'), requestHeaders:['X-Update', 'divId']})}",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testSlider method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSlider() {
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId');
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('axis' => 'vertical'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {axis:'vertical'});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('axis' => 'vertical', 'minimum' => 60, 'maximum' => 288, 'alignX' => -28, 'alignY' => -5, 'disabled' => true));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {axis:'vertical', minimum:60, maximum:288, alignX:-28, alignY:-5, disabled:true});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('change' => "alert('changed');"));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {onChange:function(value) {alert('changed');}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('change' => "alert('changed');", 'slide' => "alert('sliding');"));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {onChange:function(value) {alert('changed');}, onSlide:function(value) {alert('sliding');}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('values' => array(10, 20, 30)));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {values:[10,20,30]});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->slider('sliderId', 'trackId', array('range' => '$R(10, 30)'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var sliderId = new Control.Slider('sliderId', 'trackId', {range:\$R(10, 30)});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testRemoteFunction method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRemoteFunction() {
|
||||
$result = $this->Ajax->remoteFunction(array('complete' => 'testComplete();'));
|
||||
$expected = "new Ajax.Request('/', {asynchronous:true, evalScripts:true, onComplete:function(request, json) {testComplete();}})";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->remoteFunction(array('update' => 'myDiv'));
|
||||
$expected = "new Ajax.Updater('myDiv','/', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'myDiv']})";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->remoteFunction(array('update' => array('div1', 'div2')));
|
||||
$expected = "new Ajax.Updater(document.createElement('div'),'/', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'div1 div2']})";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Ajax->remoteFunction(array('update' => 'myDiv', 'confirm' => 'Are you sure?'));
|
||||
$expected = "if (confirm('Are you sure?')) { new Ajax.Updater('myDiv','/', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'myDiv']}); } else { event.returnValue = false; return false; }";
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testDiv method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDiv() {
|
||||
ob_start();
|
||||
$oldXUpdate = env('HTTP_X_UPDATE');
|
||||
|
||||
$result = $this->Ajax->div('myDiv');
|
||||
$this->assertTags($result, array('div' => array('id' => 'myDiv')));
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = null;
|
||||
$result = $this->Ajax->divEnd('myDiv');
|
||||
$this->assertTags($result, '/div');
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = 'secondDiv';
|
||||
$result = $this->Ajax->div('myDiv');
|
||||
$this->assertTags($result, array('div' => array('id' => 'myDiv')));
|
||||
$result = $this->Ajax->divEnd('myDiv');
|
||||
$this->assertTags($result, '/div');
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = 'secondDiv myDiv anotherDiv';
|
||||
$result = $this->Ajax->div('myDiv');
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$result = $this->Ajax->divEnd('myDiv');
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = $oldXUpdate;
|
||||
}
|
||||
/**
|
||||
* testAfterRender method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAfterRender() {
|
||||
ob_start();
|
||||
$oldXUpdate = env('HTTP_X_UPDATE');
|
||||
$this->Ajax->Javascript =& new TestJavascriptHelper();
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = 'secondDiv myDiv anotherDiv';
|
||||
$result = $this->Ajax->div('myDiv');
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
echo 'Contents of myDiv';
|
||||
|
||||
$result = $this->Ajax->divEnd('myDiv');
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
ob_start();
|
||||
$this->Ajax->afterRender();
|
||||
|
||||
$result = array_shift($this->Ajax->Javascript->codeBlocks);
|
||||
$this->assertPattern('/^\s*' . str_replace('/', '\\/', preg_quote('var __ajaxUpdater__ = {myDiv:"Contents%20of%20myDiv"};')) . '\s*' . str_replace('/', '\\/', preg_quote('for (n in __ajaxUpdater__) { if (typeof __ajaxUpdater__[n] == "string" && $(n)) Element.update($(n), unescape(decodeURIComponent(__ajaxUpdater__[n]))); }')) . '\s*$/s', $result);
|
||||
|
||||
$_SERVER['HTTP_X_UPDATE'] = $oldXUpdate;
|
||||
}
|
||||
/**
|
||||
* testEditor method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEditor() {
|
||||
$result = $this->Ajax->editor('myDiv', '/');
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Ajax.InPlaceEditor('myDiv', '/', {ajaxOptions:{asynchronous:true, evalScripts:true}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->editor('myDiv', '/', array('complete' => 'testComplete();'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Ajax.InPlaceEditor('myDiv', '/', {ajaxOptions:{asynchronous:true, evalScripts:true, onComplete:function(request, json) {testComplete();}}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->editor('myDiv', '/', array('callback' => 'callback();'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Ajax.InPlaceEditor('myDiv', '/', {callback:function(form, value) {callback();}, ajaxOptions:{asynchronous:true, evalScripts:true}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->editor('myDiv', '/', array('collection' => array(1 => 'first', 2 => 'second')));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"new Ajax.InPlaceCollectionEditor('myDiv', '/', {collection:{\"1\":\"first\",\"2\":\"second\"}, ajaxOptions:{asynchronous:true, evalScripts:true}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Ajax->editor('myDiv', '/', array('var' => 'myVar'));
|
||||
$expected = array(
|
||||
array('script' => array('type' => 'text/javascript')),
|
||||
$this->cDataStart,
|
||||
"var myVar = new Ajax.InPlaceEditor('myDiv', '/', {ajaxOptions:{asynchronous:true, evalScripts:true}});",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,536 @@
|
||||
<?php
|
||||
/**
|
||||
* CacheHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('Controller', 'Model', 'View'));
|
||||
App::import('Helper', 'Cache');
|
||||
|
||||
/**
|
||||
* CacheTestController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class CacheTestController extends Controller {
|
||||
|
||||
/**
|
||||
* helpers property
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $helpers = array('Html', 'Cache');
|
||||
|
||||
/**
|
||||
* cache_parsing method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function cache_parsing() {
|
||||
$this->viewPath = 'posts';
|
||||
$this->layout = 'cache_layout';
|
||||
$this->set('variable', 'variableValue');
|
||||
$this->set('superman', 'clark kent');
|
||||
$this->set('batman', 'bruce wayne');
|
||||
$this->set('spiderman', 'peter parker');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* CacheHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class CacheHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* Checks if TMP/views is writable, and skips the case if it is not.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function skip() {
|
||||
$this->skipUnless(is_writable(TMP . 'cache' . DS . 'views' . DS), 'TMP/views is not writable %s');
|
||||
}
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
$this->Controller = new CacheTestController();
|
||||
$this->Cache = new CacheHelper();
|
||||
$this->_cacheSettings = Configure::read('Cache');
|
||||
Configure::write('Cache.check', true);
|
||||
Configure::write('Cache.disable', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Case - switch view paths
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startCase() {
|
||||
App::build(array(
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* End Case - restore view Paths
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endCase() {
|
||||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
clearCache();
|
||||
unset($this->Cache);
|
||||
Configure::write('Cache', $this->_cacheSettings);
|
||||
}
|
||||
|
||||
/**
|
||||
* test cache parsing with no cake:nocache tags in view file.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testLayoutCacheParsingNoTagsInView() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = 21600;
|
||||
$this->Controller->here = '/cacheTest/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
|
||||
$contents = file_get_contents($filename);
|
||||
$this->assertPattern('/php echo \$variable/', $contents);
|
||||
$this->assertPattern('/php echo microtime()/', $contents);
|
||||
$this->assertPattern('/clark kent/', $result);
|
||||
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* test cache parsing with non-latin characters in current route
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCacheNonLatinCharactersInRoute() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array('風街ろまん'),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = 21600;
|
||||
$this->Controller->here = '/posts/view/風街ろまん';
|
||||
$this->Controller->action = 'view';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'posts_view_風街ろまん.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
|
||||
@unlink($filename);
|
||||
}
|
||||
/**
|
||||
* Test cache parsing with cake:nocache tags in view file.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testLayoutCacheParsingWithTagsInView() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = 21600;
|
||||
$this->Controller->here = '/cacheTest/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('test_nocache_tags');
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
|
||||
$contents = file_get_contents($filename);
|
||||
$this->assertPattern('/if \(is_writable\(TMP\)\)\:/', $contents);
|
||||
$this->assertPattern('/php echo \$variable/', $contents);
|
||||
$this->assertPattern('/php echo microtime()/', $contents);
|
||||
$this->assertNoPattern('/cake:nocache/', $contents);
|
||||
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that multiple <cake:nocache> tags function with multiple nocache tags in the layout.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testMultipleNoCacheTagsInViewfile() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = 21600;
|
||||
$this->Controller->here = '/cacheTest/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('multiple_nocache');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
|
||||
$contents = file_get_contents($filename);
|
||||
$this->assertNoPattern('/cake:nocache/', $contents);
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* testComplexNoCache method
|
||||
*
|
||||
* @return void
|
||||
* @access public
|
||||
*/
|
||||
function testComplexNoCache () {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_complex',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = array('cache_complex' => 21600);
|
||||
$this->Controller->here = '/cacheTest/cache_complex';
|
||||
$this->Controller->action = 'cache_complex';
|
||||
$this->Controller->layout = 'multi_cache';
|
||||
$this->Controller->viewPath = 'posts';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('sequencial_nocache');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
$this->assertPattern('/A\. Layout Before Content/', $result);
|
||||
$this->assertPattern('/B\. In Plain Element/', $result);
|
||||
$this->assertPattern('/C\. Layout After Test Element/', $result);
|
||||
$this->assertPattern('/D\. In View File/', $result);
|
||||
$this->assertPattern('/E\. Layout After Content/', $result);
|
||||
//$this->assertPattern('/F\. In Element With No Cache Tags/', $result);
|
||||
$this->assertPattern('/G\. Layout After Content And After Element With No Cache Tags/', $result);
|
||||
$this->assertNoPattern('/1\. layout before content/', $result);
|
||||
$this->assertNoPattern('/2\. in plain element/', $result);
|
||||
$this->assertNoPattern('/3\. layout after test element/', $result);
|
||||
$this->assertNoPattern('/4\. in view file/', $result);
|
||||
$this->assertNoPattern('/5\. layout after content/', $result);
|
||||
//$this->assertNoPattern('/6\. in element with no cache tags/', $result);
|
||||
$this->assertNoPattern('/7\. layout after content and after element with no cache tags/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_complex.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
$contents = file_get_contents($filename);
|
||||
@unlink($filename);
|
||||
|
||||
$this->assertPattern('/A\. Layout Before Content/', $contents);
|
||||
$this->assertNoPattern('/B\. In Plain Element/', $contents);
|
||||
$this->assertPattern('/C\. Layout After Test Element/', $contents);
|
||||
$this->assertPattern('/D\. In View File/', $contents);
|
||||
$this->assertPattern('/E\. Layout After Content/', $contents);
|
||||
//$this->assertPattern('/F\. In Element With No Cache Tags/', $contents);
|
||||
$this->assertPattern('/G\. Layout After Content And After Element With No Cache Tags/', $contents);
|
||||
$this->assertPattern('/1\. layout before content/', $contents);
|
||||
$this->assertNoPattern('/2\. in plain element/', $contents);
|
||||
$this->assertPattern('/3\. layout after test element/', $contents);
|
||||
$this->assertPattern('/4\. in view file/', $contents);
|
||||
$this->assertPattern('/5\. layout after content/', $contents);
|
||||
//$this->assertPattern('/6\. in element with no cache tags/', $contents);
|
||||
$this->assertPattern('/7\. layout after content and after element with no cache tags/', $contents);
|
||||
}
|
||||
|
||||
/**
|
||||
* test cacheAction set to a boolean
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testCacheActionArray() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = array(
|
||||
'cache_parsing' => 21600
|
||||
);
|
||||
$this->Controller->here = '/cache_test/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cache_test_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
@unlink($filename);
|
||||
|
||||
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->cacheAction = array(
|
||||
'cache_parsing' => 21600
|
||||
);
|
||||
$this->Controller->here = '/cacheTest/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
@unlink($filename);
|
||||
|
||||
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = array(
|
||||
'some_other_action' => 21600
|
||||
);
|
||||
$this->Controller->here = '/cacheTest/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_parsing.php';
|
||||
$this->assertFalse(file_exists($filename));
|
||||
}
|
||||
|
||||
/**
|
||||
* test with named and pass args.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testCacheWithNamedAndPassedArgs() {
|
||||
Router::reload();
|
||||
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(1, 2),
|
||||
'named' => array(
|
||||
'name' => 'mark',
|
||||
'ice' => 'cream'
|
||||
)
|
||||
);
|
||||
$this->Controller->cacheAction = array(
|
||||
'cache_parsing' => 21600
|
||||
);
|
||||
$this->Controller->here = '/cache_test/cache_parsing/1/2/name:mark/ice:cream';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cache_test_cache_parsing_1_2_name_mark_ice_cream.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that custom routes are respected when generating cache files.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testCacheWithCustomRoutes() {
|
||||
Router::reload();
|
||||
Router::connect('/:lang/:controller/:action/*', array(), array('lang' => '[a-z]{3}'));
|
||||
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->params = array(
|
||||
'lang' => 'en',
|
||||
'controller' => 'cache_test',
|
||||
'action' => 'cache_parsing',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->cacheAction = array(
|
||||
'cache_parsing' => 21600
|
||||
);
|
||||
$this->Controller->here = '/en/cache_test/cache_parsing';
|
||||
$this->Controller->action = 'cache_parsing';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'en_cache_test_cache_parsing.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* test ControllerName contains AppName
|
||||
*
|
||||
* This test verifys view cache is created correctly when the app name is contained in part of the controller name.
|
||||
* (webapp Name) base name is 'cache' controller is 'cacheTest' action is 'cache_name'
|
||||
* apps url would look somehing like http://localhost/cache/cacheTest/cache_name
|
||||
*
|
||||
* @return void
|
||||
**/
|
||||
function testCacheBaseNameControllerName() {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->cacheAction = array(
|
||||
'cache_name' => 21600
|
||||
);
|
||||
$this->Controller->params = array(
|
||||
'controller' => 'cacheTest',
|
||||
'action' => 'cache_name',
|
||||
'url' => array(),
|
||||
'pass' => array(),
|
||||
'named' => array()
|
||||
);
|
||||
$this->Controller->here = '/cache/cacheTest/cache_name';
|
||||
$this->Controller->action = 'cache_name';
|
||||
$this->Controller->base = '/cache';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('index');
|
||||
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cache_cachetest_cache_name.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
@unlink($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCacheEmptySections method
|
||||
*
|
||||
* This test must be uncommented/fixed in next release (1.2+)
|
||||
*
|
||||
* @return void
|
||||
* @access public
|
||||
*
|
||||
function testCacheEmptySections () {
|
||||
$this->Controller->cache_parsing();
|
||||
$this->Controller->cacheAction = array('cacheTest' => 21600);
|
||||
$this->Controller->here = '/cacheTest/cache_empty_sections';
|
||||
$this->Controller->action = 'cache_empty_sections';
|
||||
$this->Controller->layout = 'cache_empty_sections';
|
||||
$this->Controller->viewPath = 'posts';
|
||||
|
||||
$View = new View($this->Controller);
|
||||
$result = $View->render('cache_empty_sections');
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
$this->assertNoPattern('/php echo/', $result);
|
||||
$this->assertPattern(
|
||||
'@</title>\s*</head>\s*' .
|
||||
'<body>\s*' .
|
||||
'View Content\s*' .
|
||||
'cached count is: 3\s*' .
|
||||
'</body>@', $result);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'cachetest_cache_empty_sections.php';
|
||||
$this->assertTrue(file_exists($filename));
|
||||
$contents = file_get_contents($filename);
|
||||
$this->assertNoPattern('/cake:nocache/', $contents);
|
||||
$this->assertPattern(
|
||||
'@<head>\s*<title>Posts</title>\s*' .
|
||||
"<\?php \$x = 1; \?>\s*" .
|
||||
'</head>\s*' .
|
||||
'<body>\s*' .
|
||||
"<\?php \$x\+\+; \?>\s*" .
|
||||
"<\?php \$x\+\+; \?>\s*" .
|
||||
'View Content\s*' .
|
||||
"<\?php \$y = 1; \?>\s*" .
|
||||
"<\?php echo 'cached count is:' . \$x; \?>\s*" .
|
||||
'@', $contents);
|
||||
@unlink($filename);
|
||||
}
|
||||
*/
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,911 @@
|
||||
<?php
|
||||
/**
|
||||
* JavascriptHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('Controller', 'View', 'ClassRegistry', 'View'));
|
||||
App::import('Helper', array('Javascript', 'Html', 'Form'));
|
||||
|
||||
/**
|
||||
* TheJsTestController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TheJsTestController extends Controller {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'TheTest'
|
||||
* @access public
|
||||
*/
|
||||
var $name = 'TheTest';
|
||||
|
||||
/**
|
||||
* uses property
|
||||
*
|
||||
* @var mixed null
|
||||
* @access public
|
||||
*/
|
||||
var $uses = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* TheView class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TheView extends View {
|
||||
|
||||
/**
|
||||
* scripts method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function scripts() {
|
||||
return $this->__scripts;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TestJavascriptObject class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TestJavascriptObject {
|
||||
|
||||
/**
|
||||
* property1 property
|
||||
*
|
||||
* @var string 'value1'
|
||||
* @access public
|
||||
*/
|
||||
var $property1 = 'value1';
|
||||
|
||||
/**
|
||||
* property2 property
|
||||
*
|
||||
* @var int 2
|
||||
* @access public
|
||||
*/
|
||||
var $property2 = 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* JavascriptTest class
|
||||
*
|
||||
* @package test_suite
|
||||
* @subpackage test_suite.cases.libs
|
||||
* @since CakePHP Test Suite v 1.0.0.0
|
||||
*/
|
||||
class JavascriptTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* Regexp for CDATA start block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataStart = 'preg:/^\/\/<!\[CDATA\[[\n\r]*/';
|
||||
|
||||
/**
|
||||
* Regexp for CDATA end block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataEnd = 'preg:/[^\]]*\]\]\>[\s\r\n]*/';
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Javascript =& new JavascriptHelper();
|
||||
$this->Javascript->Html =& new HtmlHelper();
|
||||
$this->Javascript->Form =& new FormHelper();
|
||||
$this->View =& new TheView(new TheJsTestController());
|
||||
ClassRegistry::addObject('view', $this->View);
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->Javascript->Html);
|
||||
unset($this->Javascript->Form);
|
||||
unset($this->Javascript);
|
||||
ClassRegistry::removeObject('view');
|
||||
unset($this->View);
|
||||
}
|
||||
|
||||
/**
|
||||
* testConstruct method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testConstruct() {
|
||||
$Javascript =& new JavascriptHelper(array('safe'));
|
||||
$this->assertTrue($Javascript->safe);
|
||||
|
||||
$Javascript =& new JavascriptHelper(array('safe' => false));
|
||||
$this->assertFalse($Javascript->safe);
|
||||
}
|
||||
|
||||
/**
|
||||
* testLink method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testLink() {
|
||||
Configure::write('Asset.timestamp', false);
|
||||
$result = $this->Javascript->link('script.js');
|
||||
$expected = '<script type="text/javascript" src="js/script.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('script');
|
||||
$expected = '<script type="text/javascript" src="js/script.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('scriptaculous.js?load=effects');
|
||||
$expected = '<script type="text/javascript" src="js/scriptaculous.js?load=effects"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('some.json.libary');
|
||||
$expected = '<script type="text/javascript" src="js/some.json.libary.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('jquery-1.1.2');
|
||||
$expected = '<script type="text/javascript" src="js/jquery-1.1.2.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('jquery-1.1.2');
|
||||
$expected = '<script type="text/javascript" src="js/jquery-1.1.2.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('/plugin/js/jquery-1.1.2');
|
||||
$expected = '<script type="text/javascript" src="/plugin/js/jquery-1.1.2.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('/some_other_path/myfile.1.2.2.min.js');
|
||||
$expected = '<script type="text/javascript" src="/some_other_path/myfile.1.2.2.min.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('some_other_path/myfile.1.2.2.min.js');
|
||||
$expected = '<script type="text/javascript" src="js/some_other_path/myfile.1.2.2.min.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('some_other_path/myfile.1.2.2.min');
|
||||
$expected = '<script type="text/javascript" src="js/some_other_path/myfile.1.2.2.min.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('http://example.com/jquery.js');
|
||||
$expected = '<script type="text/javascript" src="http://example.com/jquery.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link(array('prototype.js', 'scriptaculous.js'));
|
||||
$this->assertPattern('/^\s*<script\s+type="text\/javascript"\s+src=".*js\/prototype\.js"[^<>]*><\/script>/', $result);
|
||||
$this->assertPattern('/<\/script>\s*<script[^<>]+>/', $result);
|
||||
$this->assertPattern('/<script\s+type="text\/javascript"\s+src=".*js\/scriptaculous\.js"[^<>]*><\/script>\s*$/', $result);
|
||||
|
||||
$result = $this->Javascript->link('jquery-1.1.2', false);
|
||||
$resultScripts = $this->View->scripts();
|
||||
reset($resultScripts);
|
||||
$expected = '<script type="text/javascript" src="js/jquery-1.1.2.js"></script>';
|
||||
$this->assertNull($result);
|
||||
$this->assertEqual(count($resultScripts), 1);
|
||||
$this->assertEqual(current($resultScripts), $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFilteringAndTimestamping method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFilteringAndTimestamping() {
|
||||
if ($this->skipIf(!is_writable(JS), 'JavaScript directory not writable, skipping JS asset timestamp tests. %s')) {
|
||||
return;
|
||||
}
|
||||
|
||||
cache(str_replace(WWW_ROOT, '', JS) . '__cake_js_test.js', 'alert("test")', '+999 days', 'public');
|
||||
$timestamp = substr(strtotime('now'), 0, 8);
|
||||
|
||||
Configure::write('Asset.timestamp', true);
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$this->assertPattern('/^<script[^<>]+src=".*js\/__cake_js_test\.js\?' . $timestamp . '[0-9]{2}"[^<>]*>/', $result);
|
||||
|
||||
$debug = Configure::read('debug');
|
||||
Configure::write('debug', 0);
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$expected = '<script type="text/javascript" src="js/__cake_js_test.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
Configure::write('Asset.timestamp', 'force');
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$this->assertPattern('/^<script[^<>]+src=".*js\/__cake_js_test.js\?' . $timestamp . '[0-9]{2}"[^<>]*>/', $result);
|
||||
|
||||
Configure::write('debug', $debug);
|
||||
Configure::write('Asset.timestamp', false);
|
||||
|
||||
$old = Configure::read('Asset.filter.js');
|
||||
|
||||
Configure::write('Asset.filter.js', 'js.php');
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$this->assertPattern('/^<script[^<>]+src=".*cjs\/__cake_js_test\.js"[^<>]*>/', $result);
|
||||
|
||||
Configure::write('Asset.filter.js', true);
|
||||
$result = $this->Javascript->link('jquery-1.1.2');
|
||||
$expected = '<script type="text/javascript" src="cjs/jquery-1.1.2.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->link('folderjs/jquery-1.1.2');
|
||||
$expected = '<script type="text/javascript" src="cjs/folderjs/jquery-1.1.2.js"></script>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
if ($old === null) {
|
||||
Configure::delete('Asset.filter.js');
|
||||
}
|
||||
|
||||
$debug = Configure::read('debug');
|
||||
$webroot = $this->Javascript->webroot;
|
||||
|
||||
Configure::write('debug', 0);
|
||||
Configure::write('Asset.timestamp', 'force');
|
||||
|
||||
$this->Javascript->webroot = '/testing/';
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$this->assertPattern('/^<script[^<>]+src="\/testing\/js\/__cake_js_test\.js\?\d+"[^<>]*>/', $result);
|
||||
|
||||
$this->Javascript->webroot = '/testing/longer/';
|
||||
$result = $this->Javascript->link('__cake_js_test');
|
||||
$this->assertPattern('/^<script[^<>]+src="\/testing\/longer\/js\/__cake_js_test\.js\?\d+"[^<>]*>/', $result);
|
||||
|
||||
$this->Javascript->webroot = $webroot;
|
||||
Configure::write('debug', $debug);
|
||||
|
||||
unlink(JS . '__cake_js_test.js');
|
||||
}
|
||||
|
||||
/**
|
||||
* testValue method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testValue() {
|
||||
$result = $this->Javascript->value(array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8)));
|
||||
$expected = '{"title":"New thing","indexes":[5,6,7,8]}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->value(null);
|
||||
$this->assertEqual($result, 'null');
|
||||
|
||||
$result = $this->Javascript->value(true);
|
||||
$this->assertEqual($result, 'true');
|
||||
|
||||
$result = $this->Javascript->value(false);
|
||||
$this->assertEqual($result, 'false');
|
||||
|
||||
$result = $this->Javascript->value(5);
|
||||
$this->assertEqual($result, '5');
|
||||
|
||||
$result = $this->Javascript->value(floatval(5.3));
|
||||
$this->assertPattern('/^5.3[0]+$/', $result);
|
||||
|
||||
$result = $this->Javascript->value('');
|
||||
$expected = '""';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->value('CakePHP' . "\n" . 'Rapid Development Framework');
|
||||
$expected = '"CakePHP\\nRapid Development Framework"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->value('CakePHP' . "\r\n" . 'Rapid Development Framework' . "\r" . 'For PHP');
|
||||
$expected = '"CakePHP\\nRapid Development Framework\\nFor PHP"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->value('CakePHP: "Rapid Development Framework"');
|
||||
$expected = '"CakePHP: \\"Rapid Development Framework\\""';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->value('CakePHP: \'Rapid Development Framework\'');
|
||||
$expected = '"CakePHP: \\\'Rapid Development Framework\\\'"';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testObjectGeneration method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testObjectGeneration() {
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8));
|
||||
$result = $this->Javascript->object($object);
|
||||
$expected = '{"title":"New thing","indexes":[5,6,7,8]}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->object(array('default' => 0));
|
||||
$expected = '{"default":0}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->object(array(
|
||||
'2007' => array(
|
||||
'Spring' => array('1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')),
|
||||
'Fall' => array('1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky'))
|
||||
), '2006' => array(
|
||||
'Spring' => array('1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')),
|
||||
'Fall' => array('1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')
|
||||
))
|
||||
));
|
||||
$expected = '{"2007":{"Spring":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}},"Fall":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}}},"2006":{"Spring":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}},"Fall":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}}}}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
if (ini_get('precision') >= 12) {
|
||||
$number = 3.141592653589;
|
||||
if (!$this->Javascript->useNative) {
|
||||
$number = sprintf("%.11f", $number);
|
||||
}
|
||||
|
||||
$result = $this->Javascript->object(array('Object' => array(true, false, 1, '02101', 0, -1, 3.141592653589, "1")));
|
||||
$expected = '{"Object":[true,false,1,"02101",0,-1,' . $number . ',"1"]}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->object(array('Object' => array(true => true, false, -3.141592653589, -10)));
|
||||
$expected = '{"Object":{"1":true,"2":false,"3":' . (-1 * $number) . ',"4":-10}}';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
$result = $this->Javascript->object(new TestJavascriptObject());
|
||||
$expected = '{"property1":"value1","property2":2}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8));
|
||||
$result = $this->Javascript->object($object, array('block' => true));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'{"title":"New thing","indexes":[5,6,7,8]}',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8), 'object' => array('inner' => array('value' => 1)));
|
||||
$result = $this->Javascript->object($object);
|
||||
$expected = '{"title":"New thing","indexes":[5,6,7,8],"object":{"inner":{"value":1}}}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
foreach (array('true' => true, 'false' => false, 'null' => null) as $expected => $data) {
|
||||
$result = $this->Javascript->object($data);
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8), 'object' => array('inner' => array('value' => 1)));
|
||||
$result = $this->Javascript->object($object, array('prefix' => 'PREFIX', 'postfix' => 'POSTFIX'));
|
||||
$this->assertPattern('/^PREFIX/', $result);
|
||||
$this->assertPattern('/POSTFIX$/', $result);
|
||||
$this->assertNoPattern('/.PREFIX./', $result);
|
||||
$this->assertNoPattern('/.POSTFIX./', $result);
|
||||
|
||||
if ($this->Javascript->useNative) {
|
||||
$this->Javascript->useNative = false;
|
||||
$this->testObjectGeneration();
|
||||
$this->Javascript->useNative = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* testObjectNonNative method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testObjectNonNative() {
|
||||
$oldNative = $this->Javascript->useNative;
|
||||
$this->Javascript->useNative = false;
|
||||
|
||||
$object = array(
|
||||
'Object' => array(
|
||||
'key1' => 'val1',
|
||||
'key2' => 'val2',
|
||||
'key3' => 'val3'
|
||||
)
|
||||
);
|
||||
|
||||
$expected = '{"Object":{"key1":val1,"key2":"val2","key3":val3}}';
|
||||
$result = $this->Javascript->object($object, array('quoteKeys' => false, 'stringKeys' => array('key1', 'key3')));
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = '{?Object?:{?key1?:"val1",?key2?:"val2",?key3?:"val3"}}';
|
||||
$result = $this->Javascript->object($object, array('q' => '?'));
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = '{?Object?:{?key1?:"val1",?key2?:val2,?key3?:"val3"}}';
|
||||
$result = $this->Javascript->object($object, array(
|
||||
'q' => '?', 'stringKeys' => array('key3', 'key1')
|
||||
));
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = '{?Object?:{?key1?:val1,?key2?:"val2",?key3?:val3}}';
|
||||
$result = $this->Javascript->object($object, array(
|
||||
'q' => '?', 'stringKeys' => array('key3', 'key1'), 'quoteKeys' => false
|
||||
));
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Javascript->useNative = $oldNative;
|
||||
}
|
||||
|
||||
/**
|
||||
* testScriptBlock method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testScriptBlock() {
|
||||
$result = $this->Javascript->codeBlock('something');
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'something',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', array('allowCache' => true, 'safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
'something',
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', array('allowCache' => false, 'safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
'something',
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', true);
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'something',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', false);
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'something',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', array('safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
'something',
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock('something', array('safe' => true));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'something',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock(null, array('safe' => true, 'allowCache' => false));
|
||||
$this->assertNull($result);
|
||||
echo 'this is some javascript';
|
||||
|
||||
$result = $this->Javascript->blockEnd();
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'this is some javascript',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->codeBlock();
|
||||
$this->assertNull($result);
|
||||
echo "alert('hey');";
|
||||
$result = $this->Javascript->blockEnd();
|
||||
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"alert('hey');",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$this->Javascript->cacheEvents(false, true);
|
||||
$this->assertFalse($this->Javascript->inBlock);
|
||||
|
||||
$result = $this->Javascript->codeBlock();
|
||||
$this->assertIdentical($result, null);
|
||||
$this->assertTrue($this->Javascript->inBlock);
|
||||
echo 'alert("this is a buffered script");';
|
||||
|
||||
$result = $this->Javascript->blockEnd();
|
||||
$this->assertIdentical($result, null);
|
||||
$this->assertFalse($this->Javascript->inBlock);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertEqual('alert("this is a buffered script");', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testOutOfLineScriptWriting method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testOutOfLineScriptWriting() {
|
||||
echo $this->Javascript->codeBlock('$(document).ready(function() { });', array('inline' => false));
|
||||
|
||||
$this->Javascript->codeBlock(null, array('inline' => false));
|
||||
echo '$(function(){ });';
|
||||
$this->Javascript->blockEnd();
|
||||
$script = $this->View->scripts();
|
||||
|
||||
$this->assertEqual(count($script), 2);
|
||||
$this->assertPattern('/' . preg_quote('$(document).ready(function() { });', '/') . '/', $script[0]);
|
||||
$this->assertPattern('/' . preg_quote('$(function(){ });', '/') . '/', $script[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* testEvent method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEvent() {
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();', array('safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('myId', 'click');
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();', false);
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();', array('useCapture' => true));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, true);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('document', 'load');
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe(document, 'load', function(event) { }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('$(\'myId\')', 'click', 'something();', array('safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->event('\'document\'', 'load', 'something();', array('safe' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
"Event.observe('document', 'load', function(event) { something(); }, false);",
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$this->Javascript->cacheEvents();
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$this->assertNull($result);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertPattern('/^' . str_replace('/', '\\/', preg_quote('Event.observe($(\'myId\'), \'click\', function(event) { something(); }, false);')) . '$/s', $result);
|
||||
|
||||
$result = $this->Javascript->event('#myId', 'alert(event);');
|
||||
$this->assertNull($result);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertPattern('/^\s*var Rules = {\s*\'#myId\': function\(element, event\)\s*{\s*alert\(event\);\s*}\s*}\s*EventSelectors\.start\(Rules\);\s*$/s', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testWriteEvents method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testWriteEvents() {
|
||||
$this->Javascript->cacheEvents();
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$this->assertNull($result);
|
||||
|
||||
$result = $this->Javascript->writeEvents();
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$this->Javascript->cacheEvents();
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$this->assertNull($result);
|
||||
|
||||
$result = $this->Javascript->writeEvents(false);
|
||||
$resultScripts = $this->View->scripts();
|
||||
reset($resultScripts);
|
||||
$this->assertNull($result);
|
||||
$this->assertEqual(count($resultScripts), 1);
|
||||
$result = current($resultScripts);
|
||||
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertTrue(empty($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* testEscapeScript method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEscapeScript() {
|
||||
$result = $this->Javascript->escapeScript('');
|
||||
$expected = '';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeScript('CakePHP' . "\n" . 'Rapid Development Framework');
|
||||
$expected = 'CakePHP\\nRapid Development Framework';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeScript('CakePHP' . "\r\n" . 'Rapid Development Framework' . "\r" . 'For PHP');
|
||||
$expected = 'CakePHP\\nRapid Development Framework\\nFor PHP';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeScript('CakePHP: "Rapid Development Framework"');
|
||||
$expected = 'CakePHP: \\"Rapid Development Framework\\"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeScript('CakePHP: \'Rapid Development Framework\'');
|
||||
$expected = 'CakePHP: \\\'Rapid Development Framework\\\'';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testEscapeString method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEscapeString() {
|
||||
$result = $this->Javascript->escapeString('');
|
||||
$expected = '';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('CakePHP' . "\n" . 'Rapid Development Framework');
|
||||
$expected = 'CakePHP\\nRapid Development Framework';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('CakePHP' . "\r\n" . 'Rapid Development Framework' . "\r" . 'For PHP');
|
||||
$expected = 'CakePHP\\nRapid Development Framework\\nFor PHP';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('CakePHP: "Rapid Development Framework"');
|
||||
$expected = 'CakePHP: \\"Rapid Development Framework\\"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('CakePHP: \'Rapid Development Framework\'');
|
||||
$expected = "CakePHP: \\'Rapid Development Framework\\'";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('my \\"string\\"');
|
||||
$expected = 'my \\\\\\"string\\\\\\"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('my string\nanother line');
|
||||
$expected = 'my string\\\nanother line';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('String with \n string that looks like newline');
|
||||
$expected = 'String with \\\n string that looks like newline';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Javascript->escapeString('String with \n string that looks like newline');
|
||||
$expected = 'String with \\\n string that looks like newline';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test string escaping and compare to json_encode()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testStringJsonEncodeCompliance() {
|
||||
if (!function_exists('json_encode')) {
|
||||
return;
|
||||
}
|
||||
$this->Javascript->useNative = false;
|
||||
$data = array();
|
||||
$data['mystring'] = "simple string";
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
|
||||
$data['mystring'] = "strïng with spécial chârs";
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
|
||||
$data['mystring'] = "a two lines\nstring";
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
|
||||
$data['mystring'] = "a \t tabbed \t string";
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
|
||||
$data['mystring'] = "a \"double-quoted\" string";
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
|
||||
$data['mystring'] = 'a \\"double-quoted\\" string';
|
||||
$this->assertEqual(json_encode($data), $this->Javascript->object($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that text encoded with Javascript::object decodes properly
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testObjectDecodeCompatibility() {
|
||||
if (!function_exists('json_decode')) {
|
||||
return;
|
||||
}
|
||||
$this->Javascript->useNative = false;
|
||||
|
||||
$data = array("simple string");
|
||||
$result = $this->Javascript->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
|
||||
$data = array('my \"string\"');
|
||||
$result = $this->Javascript->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
|
||||
$data = array('my \\"string\\"');
|
||||
$result = $this->Javascript->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAfterRender method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAfterRender() {
|
||||
$this->Javascript->cacheEvents();
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$this->assertNull($result);
|
||||
|
||||
ob_start();
|
||||
$this->Javascript->afterRender();
|
||||
$result = ob_get_clean();
|
||||
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"Event.observe($('myId'), 'click', function(event) { something(); }, false);",
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$old = $this->Javascript->enabled;
|
||||
$this->Javascript->enabled = false;
|
||||
|
||||
$this->Javascript->cacheEvents();
|
||||
$result = $this->Javascript->event('myId', 'click', 'something();');
|
||||
$this->assertNull($result);
|
||||
|
||||
ob_start();
|
||||
$this->Javascript->afterRender();
|
||||
$result = ob_get_clean();
|
||||
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$result = $this->Javascript->getCache();
|
||||
$this->assertPattern('/^' . str_replace('/', '\\/', preg_quote('Event.observe($(\'myId\'), \'click\', function(event) { something(); }, false);')) . '$/s', $result);
|
||||
|
||||
$this->Javascript->enabled = $old;
|
||||
}
|
||||
}
|
@@ -0,0 +1,367 @@
|
||||
<?php
|
||||
/**
|
||||
* JqueryEngineTestCase
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
|
||||
* Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* 1785 E. Sahara Avenue, Suite 490-204
|
||||
* Las Vegas, Nevada 89104
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* @link http://cakephp.org CakePHP Project
|
||||
* @package cake.tests
|
||||
* @subpackage cake.tests.cases.views.helpers
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
App::import('Helper', array('Html', 'Js', 'JqueryEngine'));
|
||||
|
||||
class JqueryEngineHelperTestCase extends CakeTestCase {
|
||||
/**
|
||||
* startTest
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Jquery =& new JqueryEngineHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* end test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->Jquery);
|
||||
}
|
||||
|
||||
/**
|
||||
* test selector method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSelector() {
|
||||
$result = $this->Jquery->get('#content');
|
||||
$this->assertEqual($result, $this->Jquery);
|
||||
$this->assertEqual($this->Jquery->selection, '$("#content")');
|
||||
|
||||
$result = $this->Jquery->get('document');
|
||||
$this->assertEqual($result, $this->Jquery);
|
||||
$this->assertEqual($this->Jquery->selection, '$(document)');
|
||||
|
||||
$result = $this->Jquery->get('window');
|
||||
$this->assertEqual($result, $this->Jquery);
|
||||
$this->assertEqual($this->Jquery->selection, '$(window)');
|
||||
|
||||
$result = $this->Jquery->get('ul');
|
||||
$this->assertEqual($result, $this->Jquery);
|
||||
$this->assertEqual($this->Jquery->selection, '$("ul")');
|
||||
}
|
||||
|
||||
/**
|
||||
* test event binding
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEvent() {
|
||||
$this->Jquery->get('#myLink');
|
||||
$result = $this->Jquery->event('click', 'doClick', array('wrap' => false));
|
||||
$expected = '$("#myLink").bind("click", doClick);';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->event('click', '$(this).show();', array('stop' => false));
|
||||
$expected = '$("#myLink").bind("click", function (event) {$(this).show();});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->event('click', '$(this).hide();');
|
||||
$expected = '$("#myLink").bind("click", function (event) {$(this).hide();'."\n".'return false;});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test dom ready event creation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDomReady() {
|
||||
$result = $this->Jquery->domReady('foo.name = "bar";');
|
||||
$expected = '$(document).ready(function () {foo.name = "bar";});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Each method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEach() {
|
||||
$this->Jquery->get('#foo');
|
||||
$result = $this->Jquery->each('$(this).hide();');
|
||||
$expected = '$("#foo").each(function () {$(this).hide();});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Effect generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEffect() {
|
||||
$this->Jquery->get('#foo');
|
||||
$result = $this->Jquery->effect('show');
|
||||
$expected = '$("#foo").show();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('hide');
|
||||
$expected = '$("#foo").hide();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('hide', array('speed' => 'fast'));
|
||||
$expected = '$("#foo").hide("fast");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('fadeIn');
|
||||
$expected = '$("#foo").fadeIn();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('fadeOut');
|
||||
$expected = '$("#foo").fadeOut();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('slideIn');
|
||||
$expected = '$("#foo").slideDown();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('slideOut');
|
||||
$expected = '$("#foo").slideUp();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('slideDown');
|
||||
$expected = '$("#foo").slideDown();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->effect('slideUp');
|
||||
$expected = '$("#foo").slideUp();';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Request Generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRequest() {
|
||||
$result = $this->Jquery->request(array('controller' => 'posts', 'action' => 'view', 1));
|
||||
$expected = '$.ajax({url:"\\/posts\\/view\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->request(array('controller' => 'posts', 'action' => 'view', 1), array(
|
||||
'update' => '#content'
|
||||
));
|
||||
$expected = '$.ajax({dataType:"html", success:function (data, textStatus) {$("#content").html(data);}, url:"\/posts\/view\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'before' => 'doBefore',
|
||||
'complete' => 'doComplete',
|
||||
'success' => 'doSuccess',
|
||||
'error' => 'handleError',
|
||||
'type' => 'json',
|
||||
'data' => array('name' => 'jim', 'height' => '185cm'),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$.ajax({beforeSend:doBefore, complete:doComplete, data:"name=jim&height=185cm", dataType:"json", error:handleError, success:doSuccess, type:"post", url:"\\/people\\/edit\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->request('/people/edit/1', array(
|
||||
'update' => '#updated',
|
||||
'success' => 'doFoo',
|
||||
'method' => 'post',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$.ajax({dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->request('/people/edit/1', array(
|
||||
'update' => '#updated',
|
||||
'success' => 'doFoo',
|
||||
'method' => 'post',
|
||||
'dataExpression' => true,
|
||||
'data' => '$("#someId").serialize()',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$.ajax({data:$("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->request('/people/edit/1', array(
|
||||
'success' => 'doFoo',
|
||||
'before' => 'doBefore',
|
||||
'method' => 'post',
|
||||
'dataExpression' => true,
|
||||
'data' => '$("#someId").serialize()',
|
||||
));
|
||||
$expected = '$.ajax({beforeSend:function (XMLHttpRequest) {doBefore}, data:$("#someId").serialize(), success:function (data, textStatus) {doFoo}, type:"post", url:"\\/people\\/edit\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that alternate jQuery object values work for request()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRequestWithAlternateJqueryObject() {
|
||||
$this->Jquery->jQueryObject = '$j';
|
||||
|
||||
$result = $this->Jquery->request('/people/edit/1', array(
|
||||
'update' => '#updated',
|
||||
'success' => 'doFoo',
|
||||
'method' => 'post',
|
||||
'dataExpression' => true,
|
||||
'data' => '$j("#someId").serialize()',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$j.ajax({data:$j("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$j("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test sortable list generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSortable() {
|
||||
$this->Jquery->get('#myList');
|
||||
$result = $this->Jquery->sortable(array(
|
||||
'distance' => 5,
|
||||
'containment' => 'parent',
|
||||
'start' => 'onStart',
|
||||
'complete' => 'onStop',
|
||||
'sort' => 'onSort',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("#myList").sortable({containment:"parent", distance:5, sort:onSort, start:onStart, stop:onStop});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->sortable(array(
|
||||
'distance' => 5,
|
||||
'containment' => 'parent',
|
||||
'start' => 'onStart',
|
||||
'complete' => 'onStop',
|
||||
'sort' => 'onSort',
|
||||
));
|
||||
$expected = '$("#myList").sortable({containment:"parent", distance:5, sort:function (event, ui) {onSort}, start:function (event, ui) {onStart}, stop:function (event, ui) {onStop}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test drag() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrag() {
|
||||
$this->Jquery->get('#element');
|
||||
$result = $this->Jquery->drag(array(
|
||||
'container' => '#content',
|
||||
'start' => 'onStart',
|
||||
'drag' => 'onDrag',
|
||||
'stop' => 'onStop',
|
||||
'snapGrid' => array(10, 10),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("#element").draggable({containment:"#content", drag:onDrag, grid:[10,10], start:onStart, stop:onStop});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->drag(array(
|
||||
'container' => '#content',
|
||||
'start' => 'onStart',
|
||||
'drag' => 'onDrag',
|
||||
'stop' => 'onStop',
|
||||
'snapGrid' => array(10, 10),
|
||||
));
|
||||
$expected = '$("#element").draggable({containment:"#content", drag:function (event, ui) {onDrag}, grid:[10,10], start:function (event, ui) {onStart}, stop:function (event, ui) {onStop}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test drop() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrop() {
|
||||
$this->Jquery->get('#element');
|
||||
$result = $this->Jquery->drop(array(
|
||||
'accept' => '.items',
|
||||
'hover' => 'onHover',
|
||||
'leave' => 'onExit',
|
||||
'drop' => 'onDrop',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("#element").droppable({accept:".items", drop:onDrop, out:onExit, over:onHover});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->drop(array(
|
||||
'accept' => '.items',
|
||||
'hover' => 'onHover',
|
||||
'leave' => 'onExit',
|
||||
'drop' => 'onDrop',
|
||||
));
|
||||
$expected = '$("#element").droppable({accept:".items", drop:function (event, ui) {onDrop}, out:function (event, ui) {onExit}, over:function (event, ui) {onHover}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test slider generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSlider() {
|
||||
$this->Jquery->get('#element');
|
||||
$result = $this->Jquery->slider(array(
|
||||
'complete' => 'onComplete',
|
||||
'change' => 'onChange',
|
||||
'min' => 0,
|
||||
'max' => 10,
|
||||
'value' => 2,
|
||||
'direction' => 'vertical',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("#element").slider({change:onChange, max:10, min:0, orientation:"vertical", stop:onComplete, value:2});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->slider(array(
|
||||
'complete' => 'onComplete',
|
||||
'change' => 'onChange',
|
||||
'min' => 0,
|
||||
'max' => 10,
|
||||
'value' => 2,
|
||||
'direction' => 'vertical',
|
||||
));
|
||||
$expected = '$("#element").slider({change:function (event, ui) {onChange}, max:10, min:0, orientation:"vertical", stop:function (event, ui) {onComplete}, value:2});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test the serializeForm method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSerializeForm() {
|
||||
$this->Jquery->get('#element');
|
||||
$result = $this->Jquery->serializeForm(array('isForm' => false));
|
||||
$expected = '$("#element").closest("form").serialize();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->serializeForm(array('isForm' => true));
|
||||
$expected = '$("#element").serialize();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Jquery->serializeForm(array('isForm' => false, 'inline' => true));
|
||||
$expected = '$("#element").closest("form").serialize()';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,833 @@
|
||||
<?php
|
||||
/**
|
||||
* JsHelper Test Case
|
||||
*
|
||||
* TestCase for the JsHelper
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.3
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Helper', array('Js', 'Html', 'Form'));
|
||||
App::import('Core', array('View', 'ClassRegistry'));
|
||||
|
||||
Mock::generate('JsBaseEngineHelper', 'TestJsEngineHelper', array('methodOne'));
|
||||
Mock::generate('View', 'JsHelperMockView');
|
||||
|
||||
class OptionEngineHelper extends JsBaseEngineHelper {
|
||||
var $_optionMap = array(
|
||||
'request' => array(
|
||||
'complete' => 'success',
|
||||
'request' => 'beforeSend',
|
||||
'type' => 'dataType'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* test method for testing option mapping
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function testMap($options = array()) {
|
||||
return $this->_mapOptions('request', $options);
|
||||
}
|
||||
/**
|
||||
* test method for option parsing
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testParseOptions($options, $safe = array()) {
|
||||
return $this->_parseOptions($options, $safe);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* JsHelper TestCase.
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class JsHelperTestCase extends CakeTestCase {
|
||||
/**
|
||||
* Regexp for CDATA start block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataStart = 'preg:/^\/\/<!\[CDATA\[[\n\r]*/';
|
||||
|
||||
/**
|
||||
* Regexp for CDATA end block
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $cDataEnd = 'preg:/[^\]]*\]\]\>[\s\r\n]*/';
|
||||
|
||||
/**
|
||||
* startTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->_asset = Configure::read('Asset.timestamp');
|
||||
Configure::write('Asset.timestamp', false);
|
||||
|
||||
$this->Js =& new JsHelper('JsBase');
|
||||
$this->Js->Html =& new HtmlHelper();
|
||||
$this->Js->Form =& new FormHelper();
|
||||
$this->Js->Form->Html =& new HtmlHelper();
|
||||
$this->Js->JsBaseEngine =& new JsBaseEngineHelper();
|
||||
|
||||
$view =& new JsHelperMockView();
|
||||
ClassRegistry::addObject('view', $view);
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
Configure::write('Asset.timestamp', $this->_asset);
|
||||
ClassRegistry::removeObject('view');
|
||||
unset($this->Js);
|
||||
}
|
||||
|
||||
/**
|
||||
* Switches $this->Js to a mocked engine.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _useMock() {
|
||||
$this->Js =& new JsHelper(array('TestJs'));
|
||||
$this->Js->TestJsEngine =& new TestJsEngineHelper($this);
|
||||
$this->Js->Html =& new HtmlHelper();
|
||||
$this->Js->Form =& new FormHelper();
|
||||
$this->Js->Form->Html =& new HtmlHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* test object construction
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testConstruction() {
|
||||
$js =& new JsHelper();
|
||||
$this->assertEqual($js->helpers, array('Html', 'Form', 'JqueryEngine'));
|
||||
|
||||
$js =& new JsHelper(array('mootools'));
|
||||
$this->assertEqual($js->helpers, array('Html', 'Form', 'mootoolsEngine'));
|
||||
|
||||
$js =& new JsHelper('prototype');
|
||||
$this->assertEqual($js->helpers, array('Html', 'Form', 'prototypeEngine'));
|
||||
|
||||
$js =& new JsHelper('MyPlugin.Dojo');
|
||||
$this->assertEqual($js->helpers, array('Html', 'Form', 'MyPlugin.DojoEngine'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that methods dispatch internally and to the engine class
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testMethodDispatching() {
|
||||
$this->_useMock();
|
||||
$this->Js->TestJsEngine->expectOnce('dispatchMethod', array(new PatternExpectation('/methodOne/i'), array()));
|
||||
|
||||
$this->Js->methodOne();
|
||||
|
||||
$this->Js->TestEngine =& new StdClass();
|
||||
$this->expectError();
|
||||
$this->Js->someMethodThatSurelyDoesntExist();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that method dispatching respects buffer parameters and bufferedMethods Lists.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testMethodDispatchWithBuffering() {
|
||||
$this->_useMock();
|
||||
|
||||
$this->Js->TestJsEngine->bufferedMethods = array('event', 'sortables');
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'This is an event call', array('event', '*'));
|
||||
|
||||
$this->Js->event('click', 'foo');
|
||||
$result = $this->Js->getBuffer();
|
||||
$this->assertEqual(count($result), 1);
|
||||
$this->assertEqual($result[0], 'This is an event call');
|
||||
|
||||
$result = $this->Js->event('click', 'foo', array('buffer' => false));
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertTrue(empty($buffer));
|
||||
$this->assertEqual($result, 'This is an event call');
|
||||
|
||||
$result = $this->Js->event('click', 'foo', false);
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertTrue(empty($buffer));
|
||||
$this->assertEqual($result, 'This is an event call');
|
||||
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'I am not buffered.', array('effect', '*'));
|
||||
|
||||
$result = $this->Js->effect('slideIn');
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertTrue(empty($buffer));
|
||||
$this->assertEqual($result, 'I am not buffered.');
|
||||
|
||||
$result = $this->Js->effect('slideIn', true);
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertNull($result);
|
||||
$this->assertEqual(count($buffer), 1);
|
||||
$this->assertEqual($buffer[0], 'I am not buffered.');
|
||||
|
||||
$result = $this->Js->effect('slideIn', array('speed' => 'slow'), true);
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertNull($result);
|
||||
$this->assertEqual(count($buffer), 1);
|
||||
$this->assertEqual($buffer[0], 'I am not buffered.');
|
||||
|
||||
$result = $this->Js->effect('slideIn', array('speed' => 'slow', 'buffer' => true));
|
||||
$buffer = $this->Js->getBuffer();
|
||||
$this->assertNull($result);
|
||||
$this->assertEqual(count($buffer), 1);
|
||||
$this->assertEqual($buffer[0], 'I am not buffered.');
|
||||
}
|
||||
|
||||
/**
|
||||
* test that writeScripts generates scripts inline.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testWriteScriptsNoFile() {
|
||||
$this->_useMock();
|
||||
$this->Js->buffer('one = 1;');
|
||||
$this->Js->buffer('two = 2;');
|
||||
$result = $this->Js->writeBuffer(array('onDomReady' => false, 'cache' => false, 'clear' => false));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
"one = 1;\ntwo = 2;",
|
||||
$this->cDataEnd,
|
||||
'/script',
|
||||
);
|
||||
$this->assertTags($result, $expected, true);
|
||||
|
||||
$this->Js->TestJsEngine->expectAtLeastOnce('domReady');
|
||||
$result = $this->Js->writeBuffer(array('onDomReady' => true, 'cache' => false, 'clear' => false));
|
||||
|
||||
ClassRegistry::removeObject('view');
|
||||
$view =& new JsHelperMockView();
|
||||
ClassRegistry::addObject('view', $view);
|
||||
|
||||
$view->expectCallCount('addScript', 1);
|
||||
$view->expectAt(0, 'addScript', array(new PatternExpectation('/one\s\=\s1;\ntwo\s\=\s2;/')));
|
||||
$result = $this->Js->writeBuffer(array('onDomReady' => false, 'inline' => false, 'cache' => false));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that writing the buffer with inline = false includes a script tag.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testWriteBufferNotInline() {
|
||||
$this->Js->set('foo', 1);
|
||||
|
||||
$view =& new JsHelperMockView();
|
||||
ClassRegistry::removeObject('view');
|
||||
ClassRegistry::addObject('view', $view);
|
||||
$view->expectCallCount('addScript', 1);
|
||||
|
||||
$pattern = new PatternExpectation('#<script type="text\/javascript">window.app \= \{"foo"\:1\}\;<\/script>#');
|
||||
$view->expectAt(0, 'addScript', array($pattern));
|
||||
|
||||
$result = $this->Js->writeBuffer(array('onDomReady' => false, 'inline' => false, 'safe' => false));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that writeBuffer() sets domReady = false when the request is done by XHR.
|
||||
* Including a domReady() when in XHR can cause issues as events aren't triggered by some libraries
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testWriteBufferAndXhr() {
|
||||
$this->_useMock();
|
||||
$this->Js->params['isAjax'] = true;
|
||||
$this->Js->buffer('alert("test");');
|
||||
$this->Js->TestJsEngine->expectCallCount('dispatchMethod', 0);
|
||||
$result = $this->Js->writeBuffer();
|
||||
}
|
||||
|
||||
/**
|
||||
* test that writeScripts makes files, and puts the events into them.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testWriteScriptsInFile() {
|
||||
if ($this->skipIf(!is_writable(JS), 'webroot/js is not Writable, script caching test has been skipped')) {
|
||||
return;
|
||||
}
|
||||
$this->Js->JsBaseEngine = new TestJsEngineHelper();
|
||||
$this->Js->buffer('one = 1;');
|
||||
$this->Js->buffer('two = 2;');
|
||||
$result = $this->Js->writeBuffer(array('onDomReady' => false, 'cache' => true));
|
||||
$expected = array(
|
||||
'script' => array('type' => 'text/javascript', 'src' => 'preg:/(.)*\.js/'),
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
preg_match('/src="(.*\.js)"/', $result, $filename);
|
||||
$this->assertTrue(file_exists(WWW_ROOT . $filename[1]));
|
||||
$contents = file_get_contents(WWW_ROOT . $filename[1]);
|
||||
$this->assertPattern('/one\s=\s1;\ntwo\s=\s2;/', $contents);
|
||||
|
||||
@unlink(WWW_ROOT . $filename[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* test link()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testLinkWithMock() {
|
||||
$this->_useMock();
|
||||
$options = array('update' => '#content');
|
||||
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'ajax code', array('request', '*'));
|
||||
$this->Js->TestJsEngine->expectAt(0, 'dispatchMethod', array('get', new AnythingExpectation()));
|
||||
$this->Js->TestJsEngine->expectAt(1, 'dispatchMethod', array(
|
||||
'request', array('/posts/view/1', $options)
|
||||
));
|
||||
$this->Js->TestJsEngine->expectAt(2, 'dispatchMethod', array(
|
||||
'event', array('click', 'ajax code', $options + array('buffer' => null))
|
||||
));
|
||||
|
||||
$result = $this->Js->link('test link', '/posts/view/1', $options);
|
||||
$expected = array(
|
||||
'a' => array('id' => 'preg:/link-\d+/', 'href' => '/posts/view/1'),
|
||||
'test link',
|
||||
'/a'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$options = array(
|
||||
'confirm' => 'Are you sure?',
|
||||
'update' => '#content',
|
||||
'class' => 'my-class',
|
||||
'id' => 'custom-id',
|
||||
'escape' => false
|
||||
);
|
||||
$this->Js->TestJsEngine->expectAt(0, 'confirm', array($options['confirm']));
|
||||
$this->Js->TestJsEngine->expectAt(1, 'request', array('/posts/view/1', '*'));
|
||||
$code = <<<CODE
|
||||
var _confirm = confirm("Are you sure?");
|
||||
if (!_confirm) {
|
||||
return false;
|
||||
}
|
||||
CODE;
|
||||
$this->Js->TestJsEngine->expectAt(1, 'event', array('click', $code));
|
||||
$result = $this->Js->link('test link »', '/posts/view/1', $options);
|
||||
$expected = array(
|
||||
'a' => array('id' => $options['id'], 'class' => $options['class'], 'href' => '/posts/view/1'),
|
||||
'test link »',
|
||||
'/a'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$options = array('id' => 'something', 'htmlAttributes' => array('arbitrary' => 'value', 'batman' => 'robin'));
|
||||
$result = $this->Js->link('test link', '/posts/view/1', $options);
|
||||
$expected = array(
|
||||
'a' => array('id' => $options['id'], 'href' => '/posts/view/1', 'arbitrary' => 'value',
|
||||
'batman' => 'robin'),
|
||||
'test link',
|
||||
'/a'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that link() and no buffering returns an <a> and <script> tags.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testLinkWithNoBuffering() {
|
||||
$this->_useMock();
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'ajax code', array(
|
||||
'request', array('/posts/view/1', array('update' => '#content'))
|
||||
));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', '-event handler-', array('event', '*'));
|
||||
|
||||
$options = array('update' => '#content', 'buffer' => false);
|
||||
$result = $this->Js->link('test link', '/posts/view/1', $options);
|
||||
$expected = array(
|
||||
'a' => array('id' => 'preg:/link-\d+/', 'href' => '/posts/view/1'),
|
||||
'test link',
|
||||
'/a',
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
$this->cDataStart,
|
||||
'-event handler-',
|
||||
$this->cDataEnd,
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$options = array('update' => '#content', 'buffer' => false, 'safe' => false);
|
||||
$result = $this->Js->link('test link', '/posts/view/1', $options);
|
||||
$expected = array(
|
||||
'a' => array('id' => 'preg:/link-\d+/', 'href' => '/posts/view/1'),
|
||||
'test link',
|
||||
'/a',
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
'-event handler-',
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test submit() with a Mock to check Engine method calls
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSubmitWithMock() {
|
||||
$this->_useMock();
|
||||
|
||||
$options = array('update' => '#content', 'id' => 'test-submit');
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeform', '*'));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeForm', '*'));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'ajax-code', array('request', '*'));
|
||||
|
||||
$this->Js->TestJsEngine->expectAt(0, 'dispatchMethod', array('get', '*'));
|
||||
$this->Js->TestJsEngine->expectAt(1, 'dispatchMethod', array(new PatternExpectation('/serializeForm/i'), '*'));
|
||||
$this->Js->TestJsEngine->expectAt(2, 'dispatchMethod', array('request', '*'));
|
||||
|
||||
$params = array(
|
||||
'update' => $options['update'], 'data' => 'serialize-code',
|
||||
'method' => 'post', 'dataExpression' => true, 'buffer' => null
|
||||
);
|
||||
$this->Js->TestJsEngine->expectAt(3, 'dispatchMethod', array(
|
||||
'event', array('click', "ajax-code", $params)
|
||||
));
|
||||
|
||||
$result = $this->Js->submit('Save', $options);
|
||||
$expected = array(
|
||||
'div' => array('class' => 'submit'),
|
||||
'input' => array('type' => 'submit', 'id' => $options['id'], 'value' => 'Save'),
|
||||
'/div'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
|
||||
$this->Js->TestJsEngine->expectAt(4, 'dispatchMethod', array('get', '*'));
|
||||
$this->Js->TestJsEngine->expectAt(5, 'dispatchMethod', array(new PatternExpectation('/serializeForm/i'), '*'));
|
||||
$requestParams = array(
|
||||
'/custom/url', array(
|
||||
'update' => '#content',
|
||||
'data' => 'serialize-code',
|
||||
'method' => 'post',
|
||||
'dataExpression' => true
|
||||
)
|
||||
);
|
||||
$this->Js->TestJsEngine->expectAt(6, 'dispatchMethod', array('request', $requestParams));
|
||||
|
||||
$params = array(
|
||||
'update' => '#content', 'data' => 'serialize-code',
|
||||
'method' => 'post', 'dataExpression' => true, 'buffer' => null
|
||||
);
|
||||
$this->Js->TestJsEngine->expectAt(7, 'dispatchMethod', array(
|
||||
'event', array('click', "ajax-code", $params)
|
||||
));
|
||||
|
||||
$options = array('update' => '#content', 'id' => 'test-submit', 'url' => '/custom/url');
|
||||
$result = $this->Js->submit('Save', $options);
|
||||
$expected = array(
|
||||
'div' => array('class' => 'submit'),
|
||||
'input' => array('type' => 'submit', 'id' => $options['id'], 'value' => 'Save'),
|
||||
'/div'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that no buffer works with submit() and that parameters are leaking into the script tag.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSubmitWithNoBuffer() {
|
||||
$this->_useMock();
|
||||
$options = array('update' => '#content', 'id' => 'test-submit', 'buffer' => false, 'safe' => false);
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeform', '*'));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeForm', '*'));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'ajax-code', array('request', '*'));
|
||||
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'event-handler', array('event', '*'));
|
||||
|
||||
$this->Js->TestJsEngine->expectAt(0, 'dispatchMethod', array('get', '*'));
|
||||
$this->Js->TestJsEngine->expectAt(1, 'dispatchMethod', array(new PatternExpectation('/serializeForm/i'), '*'));
|
||||
$this->Js->TestJsEngine->expectAt(2, 'dispatchMethod', array('request', array(
|
||||
'', array('update' => $options['update'], 'data' => 'serialize-code', 'method' => 'post', 'dataExpression' => true)
|
||||
)));
|
||||
|
||||
$params = array(
|
||||
'update' => $options['update'], 'data' => 'serialize-code',
|
||||
'method' => 'post', 'dataExpression' => true, 'buffer' => false
|
||||
);
|
||||
$this->Js->TestJsEngine->expectAt(3, 'dispatchMethod', array(
|
||||
'event', array('click', "ajax-code", $params)
|
||||
));
|
||||
|
||||
$result = $this->Js->submit('Save', $options);
|
||||
$expected = array(
|
||||
'div' => array('class' => 'submit'),
|
||||
'input' => array('type' => 'submit', 'id' => $options['id'], 'value' => 'Save'),
|
||||
'/div',
|
||||
'script' => array('type' => 'text/javascript'),
|
||||
'event-handler',
|
||||
'/script'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that Object::Object() is not breaking json output in JsHelper
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testObjectPassThrough() {
|
||||
$result = $this->Js->object(array('one' => 'first', 'two' => 'second'));
|
||||
$expected = '{"one":"first","two":"second"}';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that inherited Helper::value() is overwritten in JsHelper::value()
|
||||
* and calls JsBaseEngineHelper::value().
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testValuePassThrough() {
|
||||
$result = $this->Js->value('string "quote"', true);
|
||||
$expected = '"string \"quote\""';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test set()'ing variables to the Javascript buffer and controlling the output var name.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSet() {
|
||||
$this->Js->set('loggedIn', true);
|
||||
$this->Js->set(array('height' => 'tall', 'color' => 'purple'));
|
||||
$result = $this->Js->getBuffer();
|
||||
$expected = 'window.app = {"loggedIn":true,"height":"tall","color":"purple"};';
|
||||
$this->assertEqual($result[0], $expected);
|
||||
|
||||
$this->Js->set('loggedIn', true);
|
||||
$this->Js->set(array('height' => 'tall', 'color' => 'purple'));
|
||||
$this->Js->setVariable = 'WICKED';
|
||||
$result = $this->Js->getBuffer();
|
||||
$expected = 'window.WICKED = {"loggedIn":true,"height":"tall","color":"purple"};';
|
||||
$this->assertEqual($result[0], $expected);
|
||||
|
||||
$this->Js->set('loggedIn', true);
|
||||
$this->Js->set(array('height' => 'tall', 'color' => 'purple'));
|
||||
$this->Js->setVariable = 'Application.variables';
|
||||
$result = $this->Js->getBuffer();
|
||||
$expected = 'Application.variables = {"loggedIn":true,"height":"tall","color":"purple"};';
|
||||
$this->assertEqual($result[0], $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that vars set with Js->set() go to the top of the buffered scripts list.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSetVarsAtTopOfBufferedScripts() {
|
||||
$this->Js->set(array('height' => 'tall', 'color' => 'purple'));
|
||||
$this->Js->alert('hey you!', array('buffer' => true));
|
||||
$this->Js->confirm('Are you sure?', array('buffer' => true));
|
||||
$result = $this->Js->getBuffer(false);
|
||||
|
||||
$expected = 'window.app = {"height":"tall","color":"purple"};';
|
||||
$this->assertEqual($result[0], $expected);
|
||||
$this->assertEqual($result[1], 'alert("hey you!");');
|
||||
$this->assertEqual($result[2], 'confirm("Are you sure?");');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* JsBaseEngine Class Test case
|
||||
*
|
||||
* @package cake.tests.view.helpers
|
||||
*/
|
||||
class JsBaseEngineTestCase extends CakeTestCase {
|
||||
/**
|
||||
* startTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->JsEngine = new JsBaseEngineHelper();
|
||||
}
|
||||
/**
|
||||
* endTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
ClassRegistry::removeObject('view');
|
||||
unset($this->JsEngine);
|
||||
}
|
||||
|
||||
/**
|
||||
* test escape string skills
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEscaping() {
|
||||
$result = $this->JsEngine->escape('');
|
||||
$expected = '';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->escape('CakePHP' . "\n" . 'Rapid Development Framework');
|
||||
$expected = 'CakePHP\\nRapid Development Framework';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->escape('CakePHP' . "\r\n" . 'Rapid Development Framework' . "\r" . 'For PHP');
|
||||
$expected = 'CakePHP\\r\\nRapid Development Framework\\rFor PHP';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->escape('CakePHP: "Rapid Development Framework"');
|
||||
$expected = 'CakePHP: \\"Rapid Development Framework\\"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->escape("CakePHP: 'Rapid Development Framework'");
|
||||
$expected = "CakePHP: 'Rapid Development Framework'";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->escape('my \\"string\\"');
|
||||
$expected = 'my \\\\\\"string\\\\\\"';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test prompt() creation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testPrompt() {
|
||||
$result = $this->JsEngine->prompt('Hey, hey you', 'hi!');
|
||||
$expected = 'prompt("Hey, hey you", "hi!");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->prompt('"Hey"', '"hi"');
|
||||
$expected = 'prompt("\"Hey\"", "\"hi\"");';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test alert generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testAlert() {
|
||||
$result = $this->JsEngine->alert('Hey there');
|
||||
$expected = 'alert("Hey there");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->alert('"Hey"');
|
||||
$expected = 'alert("\"Hey\"");';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test confirm generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testConfirm() {
|
||||
$result = $this->JsEngine->confirm('Are you sure?');
|
||||
$expected = 'confirm("Are you sure?");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->confirm('"Are you sure?"');
|
||||
$expected = 'confirm("\"Are you sure?\"");';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Redirect
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRedirect() {
|
||||
$result = $this->JsEngine->redirect(array('controller' => 'posts', 'action' => 'view', 1));
|
||||
$expected = 'window.location = "/posts/view/1";';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testObject encoding with non-native methods.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testObject() {
|
||||
$this->JsEngine->useNative = false;
|
||||
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8));
|
||||
$result = $this->JsEngine->object($object);
|
||||
$expected = '{"title":"New thing","indexes":[5,6,7,8]}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->object(array('default' => 0));
|
||||
$expected = '{"default":0}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->JsEngine->object(array(
|
||||
'2007' => array(
|
||||
'Spring' => array(
|
||||
'1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')
|
||||
),
|
||||
'Fall' => array(
|
||||
'1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')
|
||||
)
|
||||
),
|
||||
'2006' => array(
|
||||
'Spring' => array(
|
||||
'1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')
|
||||
),
|
||||
'Fall' => array(
|
||||
'1' => array('id' => 1, 'name' => 'Josh'), '2' => array('id' => 2, 'name' => 'Becky')
|
||||
)
|
||||
)
|
||||
));
|
||||
$expected = '{"2007":{"Spring":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}},"Fall":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}}},"2006":{"Spring":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}},"Fall":{"1":{"id":1,"name":"Josh"},"2":{"id":2,"name":"Becky"}}}}';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
foreach (array('true' => true, 'false' => false, 'null' => null) as $expected => $data) {
|
||||
$result = $this->JsEngine->object($data);
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
$object = array('title' => 'New thing', 'indexes' => array(5, 6, 7, 8), 'object' => array('inner' => array('value' => 1)));
|
||||
$result = $this->JsEngine->object($object, array('prefix' => 'PREFIX', 'postfix' => 'POSTFIX'));
|
||||
$this->assertPattern('/^PREFIX/', $result);
|
||||
$this->assertPattern('/POSTFIX$/', $result);
|
||||
$this->assertNoPattern('/.PREFIX./', $result);
|
||||
$this->assertNoPattern('/.POSTFIX./', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test compatibility of JsBaseEngineHelper::object() vs. json_encode()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testObjectAgainstJsonEncode() {
|
||||
$skip = $this->skipIf(!function_exists('json_encode'), 'json_encode() not found, comparison tests skipped. %s');
|
||||
if ($skip) {
|
||||
return;
|
||||
}
|
||||
$this->JsEngine->useNative = false;
|
||||
$data = array();
|
||||
$data['mystring'] = "simple string";
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
$data['mystring'] = "strïng with spécial chârs";
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
$data['mystring'] = "a two lines\nstring";
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
$data['mystring'] = "a \t tabbed \t string";
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
$data['mystring'] = "a \"double-quoted\" string";
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
$data['mystring'] = 'a \\"double-quoted\\" string';
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
unset($data['mystring']);
|
||||
$data[3] = array(1, 2, 3);
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
|
||||
unset($data[3]);
|
||||
$data = array('mystring' => null, 'bool' => false, 'array' => array(1, 44, 66));
|
||||
$this->assertEqual(json_encode($data), $this->JsEngine->object($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that JSON made with JsBaseEngineHelper::object() against json_decode()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testObjectAgainstJsonDecode() {
|
||||
$skip = $this->skipIf(!function_exists('json_encode'), 'json_encode() not found, comparison tests skipped. %s');
|
||||
if ($skip) {
|
||||
return;
|
||||
}
|
||||
$this->JsEngine->useNative = false;
|
||||
|
||||
$data = array("simple string");
|
||||
$result = $this->JsEngine->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
|
||||
$data = array('my "string"');
|
||||
$result = $this->JsEngine->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
|
||||
$data = array('my \\"string\\"');
|
||||
$result = $this->JsEngine->object($data);
|
||||
$this->assertEqual(json_decode($result), $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Mapping of options.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testOptionMapping() {
|
||||
$JsEngine = new OptionEngineHelper();
|
||||
$result = $JsEngine->testMap();
|
||||
$this->assertEqual($result, array());
|
||||
|
||||
$result = $JsEngine->testMap(array('foo' => 'bar', 'baz' => 'sho'));
|
||||
$this->assertEqual($result, array('foo' => 'bar', 'baz' => 'sho'));
|
||||
|
||||
$result = $JsEngine->testMap(array('complete' => 'myFunc', 'type' => 'json', 'update' => '#element'));
|
||||
$this->assertEqual($result, array('success' => 'myFunc', 'dataType' => 'json', 'update' => '#element'));
|
||||
|
||||
$result = $JsEngine->testMap(array('success' => 'myFunc', 'dataType' => 'json', 'update' => '#element'));
|
||||
$this->assertEqual($result, array('success' => 'myFunc', 'dataType' => 'json', 'update' => '#element'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that option parsing escapes strings and saves what is supposed to be saved.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testOptionParsing() {
|
||||
$JsEngine = new OptionEngineHelper();
|
||||
|
||||
$result = $JsEngine->testParseOptions(array('url' => '/posts/view/1', 'key' => 1));
|
||||
$expected = 'key:1, url:"\\/posts\\/view\\/1"';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $JsEngine->testParseOptions(array('url' => '/posts/view/1', 'success' => 'doSuccess'), array('success'));
|
||||
$expected = 'success:doSuccess, url:"\\/posts\\/view\\/1"';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,354 @@
|
||||
<?php
|
||||
/**
|
||||
* MooEngineTestCase
|
||||
*
|
||||
*
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
|
||||
* Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* 1785 E. Sahara Avenue, Suite 490-204
|
||||
* Las Vegas, Nevada 89104
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* @link http://cakephp.org CakePHP Project
|
||||
* @package cake.tests
|
||||
* @subpackage cake.tests.cases.views.helpers
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
App::import('Helper', array('Html', 'Js', 'MootoolsEngine'));
|
||||
|
||||
class MooEngineHelperTestCase extends CakeTestCase {
|
||||
/**
|
||||
* startTest
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Moo =& new MootoolsEngineHelper();
|
||||
}
|
||||
/**
|
||||
* end test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->Moo);
|
||||
}
|
||||
/**
|
||||
* test selector method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSelector() {
|
||||
$result = $this->Moo->get('#content');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, '$("content")');
|
||||
|
||||
$result = $this->Moo->get('a .remove');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, '$$("a .remove")');
|
||||
|
||||
$result = $this->Moo->get('document');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, "$(document)");
|
||||
|
||||
$result = $this->Moo->get('window');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, "$(window)");
|
||||
|
||||
$result = $this->Moo->get('ul');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, '$$("ul")');
|
||||
|
||||
$result = $this->Moo->get('#some_long-id.class');
|
||||
$this->assertEqual($result, $this->Moo);
|
||||
$this->assertEqual($this->Moo->selection, '$$("#some_long-id.class")');
|
||||
}
|
||||
/**
|
||||
* test event binding
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEvent() {
|
||||
$this->Moo->get('#myLink');
|
||||
$result = $this->Moo->event('click', 'doClick', array('wrap' => false));
|
||||
$expected = '$("myLink").addEvent("click", doClick);';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->event('click', 'this.setStyle("display", "");', array('stop' => false));
|
||||
$expected = '$("myLink").addEvent("click", function (event) {this.setStyle("display", "");});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->event('click', 'this.setStyle("display", "none");');
|
||||
$expected = "\$(\"myLink\").addEvent(\"click\", function (event) {event.stop();\nthis.setStyle(\"display\", \"none\");});";
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test dom ready event creation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDomReady() {
|
||||
$result = $this->Moo->domReady('foo.name = "bar";');
|
||||
$expected = 'window.addEvent("domready", function (event) {foo.name = "bar";});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test Each method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEach() {
|
||||
$this->Moo->get('#foo');
|
||||
$result = $this->Moo->each('item.setStyle("display", "none");');
|
||||
$expected = '$("foo").each(function (item, index) {item.setStyle("display", "none");});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test Effect generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEffect() {
|
||||
$this->Moo->get('#foo');
|
||||
$result = $this->Moo->effect('show');
|
||||
$expected = '$("foo").setStyle("display", "");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('hide');
|
||||
$expected = '$("foo").setStyle("display", "none");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('fadeIn');
|
||||
$expected = '$("foo").fade("in");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('fadeOut');
|
||||
$expected = '$("foo").fade("out");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('slideIn');
|
||||
$expected = '$("foo").slide("in");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('slideOut');
|
||||
$expected = '$("foo").slide("out");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('slideOut', array('speed' => 'fast'));
|
||||
$expected = '$("foo").set("slide", {duration:"short"}).slide("out");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->effect('slideOut', array('speed' => 'slow'));
|
||||
$expected = '$("foo").set("slide", {duration:"long"}).slide("out");';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* Test Request Generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRequest() {
|
||||
$result = $this->Moo->request(array('controller' => 'posts', 'action' => 'view', 1));
|
||||
$expected = 'var jsRequest = new Request({url:"\\/posts\\/view\\/1"}).send();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/posts/view/1', array('update' => 'content'));
|
||||
$expected = 'var jsRequest = new Request.HTML({update:"content", url:"\\/posts\\/view\\/1"}).send();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doSuccess',
|
||||
'error' => 'handleError',
|
||||
'type' => 'json',
|
||||
'data' => array('name' => 'jim', 'height' => '185cm'),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Request.JSON({method:"post", onComplete:doSuccess, onFailure:handleError, url:"\\/people\\/edit\\/1"}).send({"name":"jim","height":"185cm"});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doSuccess',
|
||||
'update' => '#update-zone',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Request.HTML({method:"post", onComplete:doSuccess, update:"update-zone", url:"\\/people\\/edit\\/1"}).send();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doComplete',
|
||||
'success' => 'doSuccess',
|
||||
'error' => 'doFailure',
|
||||
'before' => 'doBefore',
|
||||
'update' => 'update-zone',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Request.HTML({method:"post", onComplete:doComplete, onFailure:doFailure, onRequest:doBefore, onSuccess:doSuccess, update:"update-zone", url:"\\/people\\/edit\\/1"}).send();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doComplete',
|
||||
'success' => 'doSuccess',
|
||||
'error' => 'doFailure',
|
||||
'before' => 'doBefore',
|
||||
'update' => 'update-zone',
|
||||
'dataExpression' => true,
|
||||
'data' => '$("foo").toQueryString()',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Request.HTML({method:"post", onComplete:doComplete, onFailure:doFailure, onRequest:doBefore, onSuccess:doSuccess, update:"update-zone", url:"\\/people\\/edit\\/1"}).send($("foo").toQueryString());';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'before' => 'doBefore',
|
||||
'success' => 'doSuccess',
|
||||
'complete' => 'doComplete',
|
||||
'update' => '#update-zone',
|
||||
));
|
||||
$expected = 'var jsRequest = new Request.HTML({method:"post", onComplete:function () {doComplete}, onRequest:function () {doBefore}, onSuccess:function (responseText, responseXML) {doSuccess}, update:"update-zone", url:"\\/people\\/edit\\/1"}).send();';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test sortable list generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSortable() {
|
||||
$this->Moo->get('#myList');
|
||||
$result = $this->Moo->sortable(array(
|
||||
'distance' => 5,
|
||||
'containment' => 'parent',
|
||||
'start' => 'onStart',
|
||||
'complete' => 'onStop',
|
||||
'sort' => 'onSort',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsSortable = new Sortables($("myList"), {constrain:"parent", onComplete:onStop, onSort:onSort, onStart:onStart, snap:5});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test drag() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrag() {
|
||||
$this->Moo->get('#drag-me');
|
||||
$result = $this->Moo->drag(array(
|
||||
'start' => 'onStart',
|
||||
'drag' => 'onDrag',
|
||||
'stop' => 'onStop',
|
||||
'snapGrid' => array(10,10),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("drag-me").makeDraggable({onComplete:onStop, onDrag:onDrag, onStart:onStart, snap:[10,10]});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test drop() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrop() {
|
||||
$this->expectError();
|
||||
$this->Moo->get('#drop-me');
|
||||
$this->Moo->drop(array(
|
||||
'drop' => 'onDrop',
|
||||
'leave' => 'onLeave',
|
||||
'hover' => 'onHover',
|
||||
));
|
||||
|
||||
$result = $this->Moo->drop(array(
|
||||
'drop' => 'onDrop',
|
||||
'leave' => 'onLeave',
|
||||
'hover' => 'onHover',
|
||||
'drag' => '#my-drag',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$("my-drag").makeDraggable({droppables:$("drop-me"), onDrop:onDrop, onEnter:onHover, onLeave:onLeave});';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertEqual($this->Moo->selection, '$("drop-me")');
|
||||
|
||||
$result = $this->Moo->drop(array(
|
||||
'drop' => 'onDrop',
|
||||
'leave' => 'onLeave',
|
||||
'hover' => 'onHover',
|
||||
'drag' => '#my-drag',
|
||||
));
|
||||
$expected = '$("my-drag").makeDraggable({droppables:$("drop-me"), onDrop:function (element, droppable, event) {onDrop}, onEnter:function (element, droppable) {onHover}, onLeave:function (element, droppable) {onLeave}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test slider generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSlider() {
|
||||
$this->Moo->get('#slider');
|
||||
$result = $this->Moo->slider(array(
|
||||
'handle' => '#my-handle',
|
||||
'complete' => 'onComplete',
|
||||
'change' => 'onChange',
|
||||
'direction' => 'horizontal',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsSlider = new Slider($("slider"), $("my-handle"), {mode:"horizontal", onChange:onChange, onComplete:onComplete});';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertEqual($this->Moo->selection, '$("slider")');
|
||||
|
||||
$this->Moo->get('#slider');
|
||||
$result = $this->Moo->slider(array(
|
||||
'handle' => '#my-handle',
|
||||
'complete' => 'onComplete',
|
||||
'change' => 'onChange',
|
||||
'direction' => 'horizontal',
|
||||
'min' => 10,
|
||||
'max' => 40,
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsSlider = new Slider($("slider"), $("my-handle"), {mode:"horizontal", onChange:onChange, onComplete:onComplete, range:[10,40]});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Moo->get('#slider');
|
||||
$result = $this->Moo->slider(array(
|
||||
'handle' => '#my-handle',
|
||||
'complete' => 'complete;',
|
||||
'change' => 'change;',
|
||||
'direction' => 'horizontal',
|
||||
));
|
||||
$expected = 'var jsSlider = new Slider($("slider"), $("my-handle"), {mode:"horizontal", onChange:function (step) {change;}, onComplete:function (event) {complete;}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* test the serializeForm implementation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSerializeForm() {
|
||||
$this->Moo->get('#element');
|
||||
$result = $this->Moo->serializeForm(array('isForm' => true));
|
||||
$expected = '$("element").toQueryString();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->serializeForm(array('isForm' => true, 'inline' => true));
|
||||
$expected = '$("element").toQueryString()';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->serializeForm(array('isForm' => false));
|
||||
$expected = '$($("element").form).toQueryString();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Moo->serializeForm(array('isForm' => false, 'inline' => true));
|
||||
$expected = '$($("element").form).toQueryString()';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,432 @@
|
||||
<?php
|
||||
/**
|
||||
* NumberHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Helper', 'Number');
|
||||
|
||||
/**
|
||||
* NumberHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class NumberHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* helper property
|
||||
*
|
||||
* @var mixed null
|
||||
* @access public
|
||||
*/
|
||||
var $helper = null;
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Number =& new NumberHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->Number);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFormatAndCurrency method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFormat() {
|
||||
$value = '100100100';
|
||||
|
||||
$result = $this->Number->format($value, '#');
|
||||
$expected = '#100,100,100';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->format($value, 3);
|
||||
$expected = '100,100,100.000';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->format($value);
|
||||
$expected = '100,100,100';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->format($value, '-');
|
||||
$expected = '100-100-100';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test currency method.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrency() {
|
||||
$value = '100100100';
|
||||
|
||||
$result = $this->Number->currency($value);
|
||||
$expected = '$100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, '#');
|
||||
$expected = '#100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, false);
|
||||
$expected = '100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD');
|
||||
$expected = '$100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€100.100.100,00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, '', array('thousands' =>' ', 'after' => '€', 'decimals' => ',', 'zero' => 'Gratuit'));
|
||||
$expected = '100 100 100,00€';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(1000.45, NULL, array('after'=>'øre','before'=>'Kr. ','decimals'=>',','thousands'=>'.'));
|
||||
$expected = 'Kr. 1.000,45';
|
||||
$this->assertEqual($expected,$result);
|
||||
|
||||
$result = $this->Number->currency(0.5, 'USD');
|
||||
$expected = '50c';
|
||||
$this->assertEqual($expected,$result);
|
||||
|
||||
$result = $this->Number->currency(0.5, NULL, array('after'=>'øre'));
|
||||
$expected = '50øre';
|
||||
$this->assertEqual($expected,$result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test adding currency format options to the number helper
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyAddFormat() {
|
||||
$this->Number->addFormat('NOK', array('before' => 'Kr. '));
|
||||
$result = $this->Number->currency(1000, 'NOK');
|
||||
$expected = 'Kr. 1,000.00';
|
||||
$this->assertEqual($expected,$result);
|
||||
|
||||
$this->Number->addFormat('Other', array('before' => '$$ ', 'after' => 'c!'));
|
||||
$result = $this->Number->currency(0.22, 'Other');
|
||||
$expected = '22c!';
|
||||
$this->assertEqual($expected,$result);
|
||||
|
||||
$result = $this->Number->currency(-10, 'Other');
|
||||
$expected = '($$ 10.00)';
|
||||
$this->assertEqual($expected,$result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyPositive method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyPositive() {
|
||||
$value = '100100100';
|
||||
|
||||
$result = $this->Number->currency($value);
|
||||
$expected = '$100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD', array('before'=> '#'));
|
||||
$expected = '#100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, false);
|
||||
$expected = '100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD');
|
||||
$expected = '$100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€100.100.100,00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyNegative method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyNegative() {
|
||||
$value = '-100100100';
|
||||
|
||||
$result = $this->Number->currency($value);
|
||||
$expected = '($100,100,100.00)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '(€100.100.100,00)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '(£100,100,100.00)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD', array('negative'=>'-'));
|
||||
$expected = '-$100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR', array('negative'=>'-'));
|
||||
$expected = '-€100.100.100,00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('negative'=>'-'));
|
||||
$expected = '-£100,100,100.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyCentsPositive method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyCentsPositive() {
|
||||
$value = '0.99';
|
||||
|
||||
$result = $this->Number->currency($value, 'USD');
|
||||
$expected = '99c';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€0,99';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '99p';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyCentsNegative method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyCentsNegative() {
|
||||
$value = '-0.99';
|
||||
|
||||
$result = $this->Number->currency($value, 'USD');
|
||||
$expected = '(99c)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '(€0,99)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '(99p)';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD', array('negative'=>'-'));
|
||||
$expected = '-99c';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR', array('negative'=>'-'));
|
||||
$expected = '-€0,99';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('negative'=>'-'));
|
||||
$expected = '-99p';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyZero method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyZero() {
|
||||
$value = '0';
|
||||
|
||||
$result = $this->Number->currency($value, 'USD');
|
||||
$expected = '$0.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€0,00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£0.00';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('zero' => 'FREE!'));
|
||||
$expected = 'FREE!';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyOptions method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCurrencyOptions() {
|
||||
$value = '1234567.89';
|
||||
|
||||
$result = $this->Number->currency($value, null, array('before' => 'GBP'));
|
||||
$expected = 'GBP1,234,567.89';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('places' => 0));
|
||||
$expected = '£1,234,568';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('escape' => true));
|
||||
$expected = '&#163;1,234,567.89';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'USD', array('after' => false));
|
||||
$expected = '$0.35';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'GBP', array('after' => false));
|
||||
$expected = '£0.35';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'GBP');
|
||||
$expected = '35p';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'EUR');
|
||||
$expected = '€0,35';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testToReadableSize method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToReadableSize() {
|
||||
$result = $this->Number->toReadableSize(0);
|
||||
$expected = '0 Bytes';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1);
|
||||
$expected = '1 Byte';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(45);
|
||||
$expected = '45 Bytes';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1023);
|
||||
$expected = '1023 Bytes';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024);
|
||||
$expected = '1 KB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*512);
|
||||
$expected = '512 KB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024-1);
|
||||
$expected = '1.00 MB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*512);
|
||||
$expected = '512.00 MB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024-1);
|
||||
$expected = '1.00 GB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024*512);
|
||||
$expected = '512.00 GB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024*1024-1);
|
||||
$expected = '1.00 TB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024*1024*512);
|
||||
$expected = '512.00 TB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024*1024*1024-1);
|
||||
$expected = '1024.00 TB';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024*1024*1024*1024*1024*1024);
|
||||
$expected = (1024 * 1024) . '.00 TB';
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testToPercentage method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToPercentage() {
|
||||
$result = $this->Number->toPercentage(45, 0);
|
||||
$expected = '45%';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Number->toPercentage(45, 2);
|
||||
$expected = '45.00%';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Number->toPercentage(0, 0);
|
||||
$expected = '0%';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Number->toPercentage(0, 4);
|
||||
$expected = '0.0000%';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,380 @@
|
||||
<?php
|
||||
/**
|
||||
* PrototypeEngine TestCase
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
|
||||
* Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* 1785 E. Sahara Avenue, Suite 490-204
|
||||
* Las Vegas, Nevada 89104
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2006-2010, Cake Software Foundation, Inc.
|
||||
* @link http://cakephp.org CakePHP Project
|
||||
* @package cake.tests
|
||||
* @subpackage cake.tests.cases.views.helpers
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
App::import('Helper', array('Html', 'Js', 'PrototypeEngine'));
|
||||
|
||||
class PrototypeEngineHelperTestCase extends CakeTestCase {
|
||||
/**
|
||||
* startTest
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Proto =& new PrototypeEngineHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* end test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->Proto);
|
||||
}
|
||||
|
||||
/**
|
||||
* test selector method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSelector() {
|
||||
$result = $this->Proto->get('#content');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, '$("content")');
|
||||
|
||||
$result = $this->Proto->get('a .remove');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, '$$("a .remove")');
|
||||
|
||||
$result = $this->Proto->get('document');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, "$(document)");
|
||||
|
||||
$result = $this->Proto->get('window');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, "$(window)");
|
||||
|
||||
$result = $this->Proto->get('ul');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, '$$("ul")');
|
||||
|
||||
$result = $this->Proto->get('#some_long-id.class');
|
||||
$this->assertEqual($result, $this->Proto);
|
||||
$this->assertEqual($this->Proto->selection, '$$("#some_long-id.class")');
|
||||
}
|
||||
|
||||
/**
|
||||
* test event binding
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEvent() {
|
||||
$this->Proto->get('#myLink');
|
||||
$result = $this->Proto->event('click', 'doClick', array('wrap' => false));
|
||||
$expected = '$("myLink").observe("click", doClick);';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->event('click', 'Element.hide(this);', array('stop' => false));
|
||||
$expected = '$("myLink").observe("click", function (event) {Element.hide(this);});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->event('click', 'Element.hide(this);');
|
||||
$expected = "\$(\"myLink\").observe(\"click\", function (event) {event.stop();\nElement.hide(this);});";
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test dom ready event creation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDomReady() {
|
||||
$result = $this->Proto->domReady('foo.name = "bar";');
|
||||
$expected = 'document.observe("dom:loaded", function (event) {foo.name = "bar";});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Each method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEach() {
|
||||
$this->Proto->get('#foo li');
|
||||
$result = $this->Proto->each('item.hide();');
|
||||
$expected = '$$("#foo li").each(function (item, index) {item.hide();});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test Effect generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testEffect() {
|
||||
$this->Proto->get('#foo');
|
||||
$result = $this->Proto->effect('show');
|
||||
$expected = '$("foo").show();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('hide');
|
||||
$expected = '$("foo").hide();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeIn');
|
||||
$expected = '$("foo").appear();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeIn', array('speed' => 'fast'));
|
||||
$expected = '$("foo").appear({duration:0.50000000000});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeIn', array('speed' => 'slow'));
|
||||
$expected = '$("foo").appear({duration:2});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeOut');
|
||||
$expected = '$("foo").fade();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeOut', array('speed' => 'fast'));
|
||||
$expected = '$("foo").fade({duration:0.50000000000});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('fadeOut', array('speed' => 'slow'));
|
||||
$expected = '$("foo").fade({duration:2});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('slideIn');
|
||||
$expected = 'Effect.slideDown($("foo"));';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('slideOut');
|
||||
$expected = 'Effect.slideUp($("foo"));';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('slideOut', array('speed' => 'fast'));
|
||||
$expected = 'Effect.slideUp($("foo"), {duration:0.50000000000});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->effect('slideOut', array('speed' => 'slow'));
|
||||
$expected = 'Effect.slideUp($("foo"), {duration:2});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Request Generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRequest() {
|
||||
$result = $this->Proto->request(array('controller' => 'posts', 'action' => 'view', 1));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/posts/view/1");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/posts/view/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doComplete',
|
||||
'before' => 'doBefore',
|
||||
'success' => 'doSuccess',
|
||||
'error' => 'doError',
|
||||
'data' => array('name' => 'jim', 'height' => '185cm'),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/posts/view/1", {method:"post", onComplete:doComplete, onCreate:doBefore, onFailure:doError, onSuccess:doSuccess, parameters:{"name":"jim","height":"185cm"}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/posts/view/1', array('update' => 'content'));
|
||||
$expected = 'var jsRequest = new Ajax.Updater("content", "/posts/view/1");';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doSuccess',
|
||||
'update' => '#update-zone',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Updater("update-zone", "/people/edit/1", {method:"post", onComplete:doSuccess});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doSuccess',
|
||||
'error' => 'handleError',
|
||||
'type' => 'json',
|
||||
'data' => array('name' => 'jim', 'height' => '185cm'),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/people/edit/1", {method:"post", onComplete:doSuccess, onFailure:handleError, parameters:{"name":"jim","height":"185cm"}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'complete' => 'doSuccess',
|
||||
'error' => 'handleError',
|
||||
'type' => 'json',
|
||||
'data' => '$("element").serialize()',
|
||||
'dataExpression' => true,
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/people/edit/1", {method:"post", onComplete:doSuccess, onFailure:handleError, parameters:$("element").serialize()});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/people/edit/1', array(
|
||||
'method' => 'post',
|
||||
'before' => 'doBefore();',
|
||||
'success' => 'doSuccess();',
|
||||
'complete' => 'doComplete();',
|
||||
'error' => 'handleError();',
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/people/edit/1", {method:"post", onComplete:function (transport) {doComplete();}, onCreate:function (transport) {doBefore();}, onFailure:function (response, jsonHeader) {handleError();}, onSuccess:function (response, jsonHeader) {doSuccess();}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->request('/people/edit/1', array(
|
||||
'async' => false,
|
||||
'method' => 'post',
|
||||
'before' => 'doBefore();',
|
||||
'success' => 'doSuccess();',
|
||||
'complete' => 'doComplete();',
|
||||
'error' => 'handleError();',
|
||||
));
|
||||
$expected = 'var jsRequest = new Ajax.Request("/people/edit/1", {asynchronous:false, method:"post", onComplete:function (transport) {doComplete();}, onCreate:function (transport) {doBefore();}, onFailure:function (response, jsonHeader) {handleError();}, onSuccess:function (response, jsonHeader) {doSuccess();}});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Proto->get('#submit');
|
||||
$result = $this->Proto->request('/users/login', array(
|
||||
'before' => 'login.create(event)',
|
||||
'complete' => 'login.complete(event)',
|
||||
'update' => 'auth',
|
||||
'data' => $this->Proto->serializeForm(array('isForm' => false, 'inline' => true)),
|
||||
'dataExpression' => true
|
||||
));
|
||||
$this->assertTrue(strpos($result, '$($("submit").form).serialize()') > 0);
|
||||
$this->assertFalse(strpos($result, 'parameters:function () {$($("submit").form).serialize()}') > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* test sortable list generation
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSortable() {
|
||||
$this->Proto->get('#myList');
|
||||
$result = $this->Proto->sortable(array(
|
||||
'distance' => 5,
|
||||
'start' => 'onStart',
|
||||
'complete' => 'onComplete',
|
||||
'sort' => 'onSort',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsSortable = Sortable.create($("myList"), {onChange:onSort, onStart:onStart, onUpdate:onComplete, snap:5});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test drag() method. Scriptaculous lacks the ability to take an Array of Elements
|
||||
* in new Drag() when selection is a multiple type. Iterate over the array.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrag() {
|
||||
$this->Proto->get('#element');
|
||||
$result = $this->Proto->drag(array(
|
||||
'start' => 'onStart',
|
||||
'drag' => 'onDrag',
|
||||
'stop' => 'onStop',
|
||||
'snapGrid' => array(10, 10),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsDrag = new Draggable($("element"), {onDrag:onDrag, onEnd:onStop, onStart:onStart, snap:[10,10]});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Proto->get('div.dragger');
|
||||
$result = $this->Proto->drag(array(
|
||||
'start' => 'onStart',
|
||||
'drag' => 'onDrag',
|
||||
'stop' => 'onStop',
|
||||
'snapGrid' => array(10, 10),
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = '$$("div.dragger").each(function (item, index) {new Draggable(item, {onDrag:onDrag, onEnd:onStop, onStart:onStart, snap:[10,10]});});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test drop() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testDrop() {
|
||||
$this->Proto->get('#element');
|
||||
$result = $this->Proto->drop(array(
|
||||
'hover' => 'onHover',
|
||||
'drop' => 'onDrop',
|
||||
'accept' => '.drag-me',
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'Droppables.add($("element"), {accept:".drag-me", onDrop:onDrop, onHover:onHover});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* ensure that slider() method behaves properly
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSlider() {
|
||||
$this->Proto->get('#element');
|
||||
$result = $this->Proto->slider(array(
|
||||
'handle' => '#handle',
|
||||
'direction' => 'horizontal',
|
||||
'change' => 'onChange',
|
||||
'complete' => 'onComplete',
|
||||
'value' => 4,
|
||||
'wrapCallbacks' => false
|
||||
));
|
||||
$expected = 'var jsSlider = new Control.Slider($("handle"), $("element"), {axis:"horizontal", onChange:onComplete, onSlide:onChange, sliderValue:4});';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$this->Proto->get('#element');
|
||||
$result = $this->Proto->slider(array(
|
||||
'handle' => '#handle',
|
||||
'change' => 'change();',
|
||||
'complete' => 'complete();',
|
||||
'value' => 4
|
||||
));
|
||||
$expected = 'var jsSlider = new Control.Slider($("handle"), $("element"), {onChange:function (value) {complete();}, onSlide:function (value) {change();}, sliderValue:4});';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test the serializeForm implementation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testSerializeForm() {
|
||||
$this->Proto->get('#element');
|
||||
$result = $this->Proto->serializeForm(array('isForm' => true));
|
||||
$expected = '$("element").serialize();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->serializeForm(array('isForm' => true, 'inline' => true));
|
||||
$expected = '$("element").serialize()';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->serializeForm(array('isForm' => false));
|
||||
$expected = '$($("element").form).serialize();';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Proto->serializeForm(array('isForm' => false, 'inline' => true));
|
||||
$expected = '$($("element").form).serialize()';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,593 @@
|
||||
<?php
|
||||
/**
|
||||
* RssHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Helper', array('Rss', 'Time'));
|
||||
|
||||
/**
|
||||
* RssHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class RssHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
$this->Rss =& new RssHelper();
|
||||
$this->Rss->Time =& new TimeHelper();
|
||||
$this->Rss->beforeRender();
|
||||
|
||||
$manager =& XmlManager::getInstance();
|
||||
$manager->namespaces = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Rss);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAddNamespace method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAddNamespace() {
|
||||
$this->Rss->addNs('custom', 'http://example.com/dtd.xml');
|
||||
$manager =& XmlManager::getInstance();
|
||||
|
||||
$expected = array('custom' => 'http://example.com/dtd.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
|
||||
$this->Rss->removeNs('custom');
|
||||
|
||||
$this->Rss->addNs('dummy', 'http://dummy.com/1.0/');
|
||||
$result = $this->Rss->document();
|
||||
$expected = array(
|
||||
'rss' => array(
|
||||
'xmlns:dummy' => 'http://dummy.com/1.0/',
|
||||
'version' => '2.0'
|
||||
)
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$this->Rss->removeNs('dummy');
|
||||
}
|
||||
|
||||
/**
|
||||
* testRemoveNamespace method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRemoveNamespace() {
|
||||
$this->Rss->addNs('custom', 'http://example.com/dtd.xml');
|
||||
$this->Rss->addNs('custom2', 'http://example.com/dtd2.xml');
|
||||
$manager =& XmlManager::getInstance();
|
||||
|
||||
$expected = array('custom' => 'http://example.com/dtd.xml', 'custom2' => 'http://example.com/dtd2.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
|
||||
$this->Rss->removeNs('custom');
|
||||
$expected = array('custom2' => 'http://example.com/dtd2.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
}
|
||||
/**
|
||||
* testDocument method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDocument() {
|
||||
$result = $this->Rss->document();
|
||||
$expected = array(
|
||||
'rss' => array(
|
||||
'version' => '2.0'
|
||||
)
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Rss->document(array('contrived' => 'parameter'));
|
||||
$expected = array(
|
||||
'rss' => array(
|
||||
'version' => '2.0'
|
||||
),
|
||||
'<parameter'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Rss->document(null, 'content');
|
||||
$expected = array(
|
||||
'rss' => array(
|
||||
'version' => '2.0'
|
||||
),
|
||||
'content'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Rss->document(array('contrived' => 'parameter'), 'content');
|
||||
$expected = array(
|
||||
'rss' => array(
|
||||
'contrived' => 'parameter',
|
||||
'version' => '2.0'
|
||||
),
|
||||
'content'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testChannel method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testChannel() {
|
||||
$attrib = array('a' => '1', 'b' => '2');
|
||||
$elements = array('title' => 'title');
|
||||
$content = 'content';
|
||||
|
||||
$result = $this->Rss->channel($attrib, $elements, $content);
|
||||
$expected = array(
|
||||
'channel' => array(
|
||||
'a' => '1',
|
||||
'b' => '2'
|
||||
),
|
||||
'<title',
|
||||
'title',
|
||||
'/title',
|
||||
'<link',
|
||||
RssHelper::url('/', true),
|
||||
'/link',
|
||||
'<description',
|
||||
'content',
|
||||
'/channel'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test correct creation of channel sub elements.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testChannelElements() {
|
||||
$attrib = array();
|
||||
$elements = array(
|
||||
'title' => 'Title of RSS Feed',
|
||||
'link' => 'http://example.com',
|
||||
'description' => 'Description of RSS Feed',
|
||||
'image' => array(
|
||||
'title' => 'Title of image',
|
||||
'url' => 'http://example.com/example.png',
|
||||
'link' => 'http://example.com'
|
||||
),
|
||||
'cloud' => array(
|
||||
'domain' => "rpc.sys.com",
|
||||
'port' => "80",
|
||||
'path' =>"/RPC2",
|
||||
'registerProcedure' => "myCloud.rssPleaseNotify",
|
||||
'protocol' => "xml-rpc"
|
||||
)
|
||||
);
|
||||
$content = 'content-here';
|
||||
$result = $this->Rss->channel($attrib, $elements, $content);
|
||||
$expected = array(
|
||||
'<channel',
|
||||
'<title', 'Title of RSS Feed', '/title',
|
||||
'<link', 'http://example.com', '/link',
|
||||
'<description', 'Description of RSS Feed', '/description',
|
||||
'<image',
|
||||
'<title', 'Title of image', '/title',
|
||||
'<url', 'http://example.com/example.png', '/url',
|
||||
'<link', 'http://example.com', '/link',
|
||||
'/image',
|
||||
'cloud' => array(
|
||||
'domain' => "rpc.sys.com",
|
||||
'port' => "80",
|
||||
'path' =>"/RPC2",
|
||||
'registerProcedure' => "myCloud.rssPleaseNotify",
|
||||
'protocol' => "xml-rpc"
|
||||
),
|
||||
'content-here',
|
||||
'/channel',
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
function testChannelElementAttributes() {
|
||||
$attrib = array();
|
||||
$elements = array(
|
||||
'title' => 'Title of RSS Feed',
|
||||
'link' => 'http://example.com',
|
||||
'description' => 'Description of RSS Feed',
|
||||
'image' => array(
|
||||
'title' => 'Title of image',
|
||||
'url' => 'http://example.com/example.png',
|
||||
'link' => 'http://example.com'
|
||||
),
|
||||
'atom:link' => array(
|
||||
'attrib' => array(
|
||||
'href' => 'http://www.example.com/rss.xml',
|
||||
'rel' => 'self',
|
||||
'type' => 'application/rss+xml')
|
||||
)
|
||||
);
|
||||
$content = 'content-here';
|
||||
$result = $this->Rss->channel($attrib, $elements, $content);
|
||||
$expected = array(
|
||||
'<channel',
|
||||
'<title', 'Title of RSS Feed', '/title',
|
||||
'<link', 'http://example.com', '/link',
|
||||
'<description', 'Description of RSS Feed', '/description',
|
||||
'<image',
|
||||
'<title', 'Title of image', '/title',
|
||||
'<url', 'http://example.com/example.png', '/url',
|
||||
'<link', 'http://example.com', '/link',
|
||||
'/image',
|
||||
'atom:link' => array(
|
||||
'href' => "http://www.example.com/rss.xml",
|
||||
'rel' => "self",
|
||||
'type' =>"application/rss+xml"
|
||||
),
|
||||
'content-here',
|
||||
'/channel',
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testItems method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testItems() {
|
||||
$items = array(
|
||||
array('title' => 'title1', 'guid' => 'http://www.example.com/guid1', 'link' => 'http://www.example.com/link1', 'description' => 'description1'),
|
||||
array('title' => 'title2', 'guid' => 'http://www.example.com/guid2', 'link' => 'http://www.example.com/link2', 'description' => 'description2'),
|
||||
array('title' => 'title3', 'guid' => 'http://www.example.com/guid3', 'link' => 'http://www.example.com/link3', 'description' => 'description3')
|
||||
);
|
||||
|
||||
$result = $this->Rss->items($items);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title', 'title1', '/title',
|
||||
'<guid', 'http://www.example.com/guid1', '/guid',
|
||||
'<link', 'http://www.example.com/link1', '/link',
|
||||
'<description', 'description1', '/description',
|
||||
'/item',
|
||||
'<item',
|
||||
'<title', 'title2', '/title',
|
||||
'<guid', 'http://www.example.com/guid2', '/guid',
|
||||
'<link', 'http://www.example.com/link2', '/link',
|
||||
'<description', 'description2', '/description',
|
||||
'/item',
|
||||
'<item',
|
||||
'<title', 'title3', '/title',
|
||||
'<guid', 'http://www.example.com/guid3', '/guid',
|
||||
'<link', 'http://www.example.com/link3', '/link',
|
||||
'<description', 'description3', '/description',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$result = $this->Rss->items(array());
|
||||
$expected = '';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testItem method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testItem() {
|
||||
$item = array(
|
||||
'title' => 'My title',
|
||||
'description' => 'My description',
|
||||
'link' => 'http://www.google.com/'
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'My title',
|
||||
'/title',
|
||||
'<description',
|
||||
'My description',
|
||||
'/description',
|
||||
'<link',
|
||||
'http://www.google.com/',
|
||||
'/link',
|
||||
'<guid',
|
||||
'http://www.google.com/',
|
||||
'/guid',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => array(
|
||||
'value' => 'My Title',
|
||||
'cdata' => true,
|
||||
),
|
||||
'link' => 'http://www.example.com/1',
|
||||
'description' => array(
|
||||
'value' => 'descriptive words',
|
||||
'cdata' => true,
|
||||
),
|
||||
'pubDate' => '2008-05-31 12:00:00',
|
||||
'guid' => 'http://www.example.com/1'
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'<![CDATA[My Title]]',
|
||||
'/title',
|
||||
'<link',
|
||||
'http://www.example.com/1',
|
||||
'/link',
|
||||
'<description',
|
||||
'<![CDATA[descriptive words]]',
|
||||
'/description',
|
||||
'<pubDate',
|
||||
date('r', strtotime('2008-05-31 12:00:00')),
|
||||
'/pubDate',
|
||||
'<guid',
|
||||
'http://www.example.com/1',
|
||||
'/guid',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => array(
|
||||
'value' => 'My Title & more',
|
||||
'cdata' => true
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'<![CDATA[My Title & more]]',
|
||||
'/title',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => array(
|
||||
'value' => 'My Title & more',
|
||||
'convertEntities' => false
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'My Title & more',
|
||||
'/title',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => array(
|
||||
'value' => 'My Title & more',
|
||||
'cdata' => true,
|
||||
'convertEntities' => false,
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'<![CDATA[My Title & more]]',
|
||||
'/title',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'category' => array(
|
||||
'value' => 'CakePHP',
|
||||
'cdata' => true,
|
||||
'domain' => 'http://www.cakephp.org'
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'category' => array('domain' => 'http://www.cakephp.org'),
|
||||
'<![CDATA[CakePHP]]',
|
||||
'/category',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'category' => array(
|
||||
array(
|
||||
'value' => 'CakePHP',
|
||||
'cdata' => true,
|
||||
'domain' => 'http://www.cakephp.org'
|
||||
),
|
||||
array(
|
||||
'value' => 'Bakery',
|
||||
'cdata' => true
|
||||
)
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'category' => array('domain' => 'http://www.cakephp.org'),
|
||||
'<![CDATA[CakePHP]]',
|
||||
'/category',
|
||||
'<category',
|
||||
'<![CDATA[Bakery]]',
|
||||
'/category',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => array(
|
||||
'value' => 'My Title',
|
||||
'cdata' => true,
|
||||
),
|
||||
'link' => 'http://www.example.com/1',
|
||||
'description' => array(
|
||||
'value' => 'descriptive words',
|
||||
'cdata' => true,
|
||||
),
|
||||
'enclosure' => array(
|
||||
'url' => '/test.flv'
|
||||
),
|
||||
'pubDate' => '2008-05-31 12:00:00',
|
||||
'guid' => 'http://www.example.com/1',
|
||||
'category' => array(
|
||||
array(
|
||||
'value' => 'CakePHP',
|
||||
'cdata' => true,
|
||||
'domain' => 'http://www.cakephp.org'
|
||||
),
|
||||
array(
|
||||
'value' => 'Bakery',
|
||||
'cdata' => true
|
||||
)
|
||||
)
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'<![CDATA[My Title]]',
|
||||
'/title',
|
||||
'<link',
|
||||
'http://www.example.com/1',
|
||||
'/link',
|
||||
'<description',
|
||||
'<![CDATA[descriptive words]]',
|
||||
'/description',
|
||||
'enclosure' => array('url' => RssHelper::url('/test.flv', true)),
|
||||
'<pubDate',
|
||||
date('r', strtotime('2008-05-31 12:00:00')),
|
||||
'/pubDate',
|
||||
'<guid',
|
||||
'http://www.example.com/1',
|
||||
'/guid',
|
||||
'category' => array('domain' => 'http://www.cakephp.org'),
|
||||
'<![CDATA[CakePHP]]',
|
||||
'/category',
|
||||
'<category',
|
||||
'<![CDATA[Bakery]]',
|
||||
'/category',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
|
||||
$item = array(
|
||||
'title' => 'Foo bar',
|
||||
'link' => array(
|
||||
'url' => 'http://example.com/foo?a=1&b=2',
|
||||
'convertEntities' => false
|
||||
),
|
||||
'description' => array(
|
||||
'value' => 'descriptive words',
|
||||
'cdata' => true,
|
||||
),
|
||||
'pubDate' => '2008-05-31 12:00:00'
|
||||
);
|
||||
$result = $this->Rss->item(null, $item);
|
||||
$expected = array(
|
||||
'<item',
|
||||
'<title',
|
||||
'Foo bar',
|
||||
'/title',
|
||||
'<link',
|
||||
'http://example.com/foo?a=1&b=2',
|
||||
'/link',
|
||||
'<description',
|
||||
'<![CDATA[descriptive words]]',
|
||||
'/description',
|
||||
'<pubDate',
|
||||
date('r', strtotime('2008-05-31 12:00:00')),
|
||||
'/pubDate',
|
||||
'<guid',
|
||||
'http://example.com/foo?a=1&b=2',
|
||||
'/guid',
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testTime method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testTime() {
|
||||
}
|
||||
|
||||
/**
|
||||
* testElementAttrNotInParent method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testElementAttrNotInParent() {
|
||||
$attributes = array(
|
||||
'title' => 'Some Title',
|
||||
'link' => 'http://link.com',
|
||||
'description' => 'description'
|
||||
);
|
||||
$elements = array('enclosure' => array('url' => 'http://test.com'));
|
||||
|
||||
$result = $this->Rss->item($attributes, $elements);
|
||||
$expected = array(
|
||||
'item' => array(
|
||||
'title' => 'Some Title',
|
||||
'link' => 'http://link.com',
|
||||
'description' => 'description'
|
||||
),
|
||||
'enclosure' => array(
|
||||
'url' => 'http://test.com'
|
||||
),
|
||||
'/item'
|
||||
);
|
||||
$this->assertTags($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,236 @@
|
||||
<?php
|
||||
/**
|
||||
* SessionHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
App::import('Core', array('Helper', 'AppHelper', 'Controller', 'View'));
|
||||
App::import('Helper', array('Session'));
|
||||
|
||||
/**
|
||||
* SessionHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class SessionHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
$this->Session = new SessionHelper();
|
||||
|
||||
$_SESSION = array(
|
||||
'test' => 'info',
|
||||
'Message' => array(
|
||||
'flash' => array(
|
||||
'element' => 'default',
|
||||
'params' => array(),
|
||||
'message' => 'This is a calling'
|
||||
),
|
||||
'notification' => array(
|
||||
'element' => 'session_helper',
|
||||
'params' => array('title' => 'Notice!', 'name' => 'Alert!'),
|
||||
'message' => 'This is a test of the emergency broadcasting system',
|
||||
),
|
||||
'classy' => array(
|
||||
'element' => 'default',
|
||||
'params' => array('class' => 'positive'),
|
||||
'message' => 'Recorded'
|
||||
),
|
||||
'bare' => array(
|
||||
'element' => null,
|
||||
'message' => 'Bare message',
|
||||
'params' => array(),
|
||||
),
|
||||
),
|
||||
'Deeply' => array('nested' => array('key' => 'value')),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
$_SESSION = array();
|
||||
unset($this->Session);
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* test construction and initial property settings
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testConstruct() {
|
||||
$this->assertFalse(empty($this->Session->sessionTime));
|
||||
$this->assertFalse(empty($this->Session->security));
|
||||
}
|
||||
/**
|
||||
* testRead method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRead() {
|
||||
$result = $this->Session->read('Deeply.nested.key');
|
||||
$this->assertEqual($result, 'value');
|
||||
|
||||
$result = $this->Session->read('test');
|
||||
$this->assertEqual($result, 'info');
|
||||
}
|
||||
|
||||
/**
|
||||
* testCheck method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testCheck() {
|
||||
$this->assertTrue($this->Session->check('test'));
|
||||
|
||||
$this->assertTrue($this->Session->check('Message.flash.element'));
|
||||
|
||||
$this->assertFalse($this->Session->check('Does.not.exist'));
|
||||
|
||||
$this->assertFalse($this->Session->check('Nope'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testWrite method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testWrite() {
|
||||
$this->expectError();
|
||||
$this->Session->write('NoWay', 'AccessDenied');
|
||||
}
|
||||
|
||||
/**
|
||||
* testFlash method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFlash() {
|
||||
$result = $this->Session->flash('flash', true);
|
||||
$expected = '<div id="flashMessage" class="message">This is a calling</div>';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertFalse($this->Session->check('Message.flash'));
|
||||
|
||||
$expected = '<div id="classyMessage" class="positive">Recorded</div>';
|
||||
$result = $this->Session->flash('classy', true);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
App::build(array(
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
$controller = new Controller();
|
||||
$this->Session->view = new View($controller);
|
||||
|
||||
$result = $this->Session->flash('notification', true);
|
||||
$result = str_replace("\r\n", "\n", $result);
|
||||
$expected = "<div id=\"notificationLayout\">\n\t<h1>Alert!</h1>\n\t<h3>Notice!</h3>\n\t<p>This is a test of the emergency broadcasting system</p>\n</div>";
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertFalse($this->Session->check('Message.notification'));
|
||||
|
||||
$result = $this->Session->flash('bare');
|
||||
$expected = 'Bare message';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertFalse($this->Session->check('Message.bare'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testID method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testID() {
|
||||
$id = session_id();
|
||||
$result = $this->Session->id();
|
||||
$this->assertEqual($id, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testError method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testError() {
|
||||
$result = $this->Session->error();
|
||||
$this->assertFalse($result);
|
||||
|
||||
$this->Session->read('CauseError');
|
||||
$result = $this->Session->error();
|
||||
$expected = "CauseError doesn't exist";
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testDisabling method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDisabling() {
|
||||
Configure::write('Session.start', false);
|
||||
$this->Session = new SessionHelper();
|
||||
$this->assertFalse($this->Session->check('test'));
|
||||
$this->assertFalse($this->Session->read('test'));
|
||||
|
||||
$this->Session->read('CauseError');
|
||||
$this->assertFalse($this->Session->error());
|
||||
|
||||
ob_start();
|
||||
$this->assertFalse($this->Session->flash('bare'));
|
||||
$result = ob_get_contents();
|
||||
ob_clean();
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testValid method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testValid() {
|
||||
//wierd it always ends up false in the test suite
|
||||
//$this->assertFalse($this->Session->valid());
|
||||
}
|
||||
}
|
@@ -0,0 +1,414 @@
|
||||
<?php
|
||||
/**
|
||||
* TextHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Helper', 'Text');
|
||||
|
||||
/**
|
||||
* TextHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TextHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* helper property
|
||||
*
|
||||
* @var mixed null
|
||||
* @access public
|
||||
*/
|
||||
var $helper = null;
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
$this->Text = new TextHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Text);
|
||||
}
|
||||
|
||||
/**
|
||||
* testTruncate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testTruncate() {
|
||||
$text1 = 'The quick brown fox jumps over the lazy dog';
|
||||
$text2 = 'Heizölrückstoßabdämpfung';
|
||||
$text3 = '<b>© 2005-2007, Cake Software Foundation, Inc.</b><br />written by Alexander Wegener';
|
||||
$text4 = '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But the following image tag should be conform <img src="mypic.jpg" alt="Me, myself and I" /></b><br />Great, or?';
|
||||
$text5 = '0<b>1<i>2<span class="myclass">3</span>4<u>5</u>6</i>7</b>8<b>9</b>0';
|
||||
$text6 = '<p><strong>Extra dates have been announced for this year\'s tour.</strong></p><p>Tickets for the new shows in</p>';
|
||||
$text7 = 'El moño está en el lugar correcto. Eso fue lo que dijo la niña, ¿habrá dicho la verdad?';
|
||||
$text8 = 'Vive la R'.chr(195).chr(169).'publique de France';
|
||||
$text9 = 'НОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыь';
|
||||
|
||||
$this->assertIdentical($this->Text->truncate($text1, 15), 'The quick br...');
|
||||
$this->assertIdentical($this->Text->truncate($text1, 15, array('exact' => false)), 'The quick...');
|
||||
$this->assertIdentical($this->Text->truncate($text1, 100), 'The quick brown fox jumps over the lazy dog');
|
||||
$this->assertIdentical($this->Text->truncate($text2, 10), 'Heiz&ou...');
|
||||
$this->assertIdentical($this->Text->truncate($text2, 10, array('exact' => false)), '...');
|
||||
$this->assertIdentical($this->Text->truncate($text3, 20), '<b>© 2005-20...');
|
||||
$this->assertIdentical($this->Text->truncate($text4, 15), '<img src="my...');
|
||||
$this->assertIdentical($this->Text->truncate($text5, 6, array('ending' => '')), '0<b>1<');
|
||||
$this->assertIdentical($this->Text->truncate($text1, 15, array('html' => true)), 'The quick br...');
|
||||
$this->assertIdentical($this->Text->truncate($text1, 15, array('exact' => false, 'html' => true)), 'The quick...');
|
||||
$this->assertIdentical($this->Text->truncate($text2, 10, array('html' => true)), 'Heizölr...');
|
||||
$this->assertIdentical($this->Text->truncate($text2, 10, array('exact' => false, 'html' => true)), '...');
|
||||
$this->assertIdentical($this->Text->truncate($text3, 20, array('html' => true)), '<b>© 2005-2007, Cake...</b>');
|
||||
$this->assertIdentical($this->Text->truncate($text4, 15, array('html' => true)), '<img src="mypic.jpg"> This image ...');
|
||||
$this->assertIdentical($this->Text->truncate($text4, 45, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But t...</b>');
|
||||
$this->assertIdentical($this->Text->truncate($text4, 90, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But the following image tag should be conform <img src="mypic.jpg" alt="Me, myself and I" /></b><br />Grea...');
|
||||
$this->assertIdentical($this->Text->truncate($text5, 6, array('ending' => '', 'html' => true)), '0<b>1<i>2<span class="myclass">3</span>4<u>5</u></i></b>');
|
||||
$this->assertIdentical($this->Text->truncate($text5, 20, array('ending' => '', 'html' => true)), $text5);
|
||||
$this->assertIdentical($this->Text->truncate($text6, 57, array('exact' => false, 'html' => true)), "<p><strong>Extra dates have been announced for this year's...</strong></p>");
|
||||
$this->assertIdentical($this->Text->truncate($text7, 255), $text7);
|
||||
$this->assertIdentical($this->Text->truncate($text7, 15), 'El moño está...');
|
||||
$this->assertIdentical($this->Text->truncate($text8, 15), 'Vive la R'.chr(195).chr(169).'pu...');
|
||||
$this->assertIdentical($this->Text->truncate($text9, 10), 'НОПРСТУ...');
|
||||
}
|
||||
/**
|
||||
* testHighlight method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testHighlight() {
|
||||
$text = 'This is a test text';
|
||||
$phrases = array('This', 'text');
|
||||
$result = $this->Text->highlight($text, $phrases, array('format' => '<b>\1</b>'));
|
||||
$expected = '<b>This</b> is a test <b>text</b>';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'This is a test text';
|
||||
$phrases = null;
|
||||
$result = $this->Text->highlight($text, $phrases, array('format' => '<b>\1</b>'));
|
||||
$this->assertEqual($result, $text);
|
||||
|
||||
$text = 'Ich saß in einem Café am Übergang';
|
||||
$expected = 'Ich <b>saß</b> in einem <b>Café</b> am <b>Übergang</b>';
|
||||
$phrases = array('saß', 'café', 'übergang');
|
||||
$result = $this->Text->highlight($text, $phrases, array('format' => '<b>\1</b>'));
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testHighlightHtml method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testHighlightHtml() {
|
||||
$text1 = '<p>strongbow isn’t real cider</p>';
|
||||
$text2 = '<p>strongbow <strong>isn’t</strong> real cider</p>';
|
||||
$text3 = '<img src="what-a-strong-mouse.png" alt="What a strong mouse!" />';
|
||||
$text4 = 'What a strong mouse: <img src="what-a-strong-mouse.png" alt="What a strong mouse!" />';
|
||||
$options = array('format' => '<b>\1</b>', 'html' => true);
|
||||
|
||||
$expected = '<p><b>strong</b>bow isn’t real cider</p>';
|
||||
$this->assertEqual($this->Text->highlight($text1, 'strong', $options), $expected);
|
||||
|
||||
$expected = '<p><b>strong</b>bow <strong>isn’t</strong> real cider</p>';
|
||||
$this->assertEqual($this->Text->highlight($text2, 'strong', $options), $expected);
|
||||
|
||||
$this->assertEqual($this->Text->highlight($text3, 'strong', $options), $text3);
|
||||
|
||||
$this->assertEqual($this->Text->highlight($text3, array('strong', 'what'), $options), $text3);
|
||||
|
||||
$expected = '<b>What</b> a <b>strong</b> mouse: <img src="what-a-strong-mouse.png" alt="What a strong mouse!" />';
|
||||
$this->assertEqual($this->Text->highlight($text4, array('strong', 'what'), $options), $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testHighlightMulti method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testHighlightMulti() {
|
||||
$text = 'This is a test text';
|
||||
$phrases = array('This', 'text');
|
||||
$result = $this->Text->highlight($text, $phrases, array('format' => array('<b>\1</b>', '<em>\1</em>')));
|
||||
$expected = '<b>This</b> is a test <em>text</em>';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testStripLinks method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testStripLinks() {
|
||||
$text = 'This is a test text';
|
||||
$expected = 'This is a test text';
|
||||
$result = $this->Text->stripLinks($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'This is a <a href="#">test</a> text';
|
||||
$expected = 'This is a test text';
|
||||
$result = $this->Text->stripLinks($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'This <strong>is</strong> a <a href="#">test</a> <a href="#">text</a>';
|
||||
$expected = 'This <strong>is</strong> a test text';
|
||||
$result = $this->Text->stripLinks($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'This <strong>is</strong> a <a href="#">test</a> and <abbr>some</abbr> other <a href="#">text</a>';
|
||||
$expected = 'This <strong>is</strong> a test and <abbr>some</abbr> other text';
|
||||
$result = $this->Text->stripLinks($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAutoLink method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAutoLink() {
|
||||
$text = 'This is a test text';
|
||||
$expected = 'This is a test text';
|
||||
$result = $this->Text->autoLink($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'Text with a partial www.cakephp.org URL and test@cakephp.org email address';
|
||||
$result = $this->Text->autoLink($text);
|
||||
$expected = 'Text with a partial <a href="http://www.cakephp.org">www.cakephp.org</a> URL and <a href="mailto:test@cakephp\.org">test@cakephp\.org</a> email address';
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'This is a test text with URL http://www.cakephp.org';
|
||||
$expected = 'This is a test text with URL <a href="http://www.cakephp.org">http://www.cakephp.org</a>';
|
||||
$result = $this->Text->autoLink($text);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$text = 'This is a test text with URL http://www.cakephp.org and some more text';
|
||||
$expected = 'This is a test text with URL <a href="http://www.cakephp.org">http://www.cakephp.org</a> and some more text';
|
||||
$result = $this->Text->autoLink($text);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$text = "This is a test text with URL http://www.cakephp.org\tand some more text";
|
||||
$expected = "This is a test text with URL <a href=\"http://www.cakephp.org\">http://www.cakephp.org</a>\tand some more text";
|
||||
$result = $this->Text->autoLink($text);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$text = 'This is a test text with URL http://www.cakephp.org(and some more text)';
|
||||
$expected = 'This is a test text with URL <a href="http://www.cakephp.org">http://www.cakephp.org</a>(and some more text)';
|
||||
$result = $this->Text->autoLink($text);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$text = 'This is a test text with URL http://www.cakephp.org';
|
||||
$expected = 'This is a test text with URL <a href="http://www.cakephp.org" class="link">http://www.cakephp.org</a>';
|
||||
$result = $this->Text->autoLink($text, array('class'=>'link'));
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$text = 'This is a test text with URL http://www.cakephp.org';
|
||||
$expected = 'This is a test text with URL <a href="http://www.cakephp.org" class="link" id="MyLink">http://www.cakephp.org</a>';
|
||||
$result = $this->Text->autoLink($text, array('class'=>'link', 'id'=>'MyLink'));
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAutoLinkUrls method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAutoLinkUrls() {
|
||||
$text = 'This is a test text';
|
||||
$expected = 'This is a test text';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'This is a test that includes (www.cakephp.org)';
|
||||
$expected = 'This is a test that includes (<a href="http://www.cakephp.org">www.cakephp.org</a>)';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'Text with a partial www.cakephp.org URL';
|
||||
$expected = 'Text with a partial <a href="http://www.cakephp.org"\s*>www.cakephp.org</a> URL';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'Text with a partial www.cakephp.org URL';
|
||||
$expected = 'Text with a partial <a href="http://www.cakephp.org" \s*class="link">www.cakephp.org</a> URL';
|
||||
$result = $this->Text->autoLinkUrls($text, array('class' => 'link'));
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'Text with a partial WWW.cakephp.org URL';
|
||||
$expected = 'Text with a partial <a href="http://WWW.cakephp.org"\s*>WWW.cakephp.org</a> URL';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'Text with a partial WWW.cakephp.org © URL';
|
||||
$expected = 'Text with a partial <a href="http://WWW.cakephp.org"\s*>WWW.cakephp.org</a> © URL';
|
||||
$result = $this->Text->autoLinkUrls($text, array('escape' => false));
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'Text with a url www.cot.ag/cuIb2Q and more';
|
||||
$expected = 'Text with a url <a href="http://www.cot.ag/cuIb2Q">www.cot.ag/cuIb2Q</a> and more';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAutoLinkEmails method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAutoLinkEmails() {
|
||||
$text = 'This is a test text';
|
||||
$expected = 'This is a test text';
|
||||
$result = $this->Text->autoLinkUrls($text);
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$text = 'Text with email@example.com address';
|
||||
$expected = 'Text with <a href="mailto:email@example.com"\s*>email@example.com</a> address';
|
||||
$result = $this->Text->autoLinkEmails($text);
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
|
||||
$text = 'Text with email@example.com address';
|
||||
$expected = 'Text with <a href="mailto:email@example.com" \s*class="link">email@example.com</a> address';
|
||||
$result = $this->Text->autoLinkEmails($text, array('class' => 'link'));
|
||||
$this->assertPattern('#^' . $expected . '$#', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testHighlightCaseInsensitivity method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testHighlightCaseInsensitivity() {
|
||||
$text = 'This is a Test text';
|
||||
$expected = 'This is a <b>Test</b> text';
|
||||
|
||||
$result = $this->Text->highlight($text, 'test', array('format' => '<b>\1</b>'));
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Text->highlight($text, array('test'), array('format' => '<b>\1</b>'));
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testExcerpt method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testExcerpt() {
|
||||
$text = 'This is a phrase with test text to play with';
|
||||
|
||||
$expected = '...with test text...';
|
||||
$result = $this->Text->excerpt($text, 'test', 9, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$expected = 'This is a...';
|
||||
$result = $this->Text->excerpt($text, 'not_found', 9, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$expected = 'This is a phras...';
|
||||
$result = $this->Text->excerpt($text, null, 9, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$expected = $text;
|
||||
$result = $this->Text->excerpt($text, null, 200, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$expected = '...phrase...';
|
||||
$result = $this->Text->excerpt($text, 'phrase', 2, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$phrase = 'This is a phrase with test';
|
||||
$expected = $text;
|
||||
$result = $this->Text->excerpt($text, $phrase, strlen($phrase) + 3, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$phrase = 'This is a phrase with text';
|
||||
$expected = $text;
|
||||
$result = $this->Text->excerpt($text, $phrase, 10, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testExcerptCaseInsensitivity method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testExcerptCaseInsensitivity() {
|
||||
$text = 'This is a phrase with test text to play with';
|
||||
|
||||
$expected = '...with test text...';
|
||||
$result = $this->Text->excerpt($text, 'TEST', 9, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$expected = 'This is a...';
|
||||
$result = $this->Text->excerpt($text, 'NOT_FOUND', 9, '...');
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testListGeneration method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testListGeneration() {
|
||||
$result = $this->Text->toList(array());
|
||||
$this->assertEqual($result, '');
|
||||
|
||||
$result = $this->Text->toList(array('One'));
|
||||
$this->assertEqual($result, 'One');
|
||||
|
||||
$result = $this->Text->toList(array('Larry', 'Curly', 'Moe'));
|
||||
$this->assertEqual($result, 'Larry, Curly and Moe');
|
||||
|
||||
$result = $this->Text->toList(array('Dusty', 'Lucky', 'Ned'), 'y');
|
||||
$this->assertEqual($result, 'Dusty, Lucky y Ned');
|
||||
|
||||
$result = $this->Text->toList(array( 1 => 'Dusty', 2 => 'Lucky', 3 => 'Ned'), 'y');
|
||||
$this->assertEqual($result, 'Dusty, Lucky y Ned');
|
||||
|
||||
$result = $this->Text->toList(array( 1 => 'Dusty', 2 => 'Lucky', 3 => 'Ned'), 'and', ' + ');
|
||||
$this->assertEqual($result, 'Dusty + Lucky and Ned');
|
||||
|
||||
$result = $this->Text->toList(array( 'name1' => 'Dusty', 'name2' => 'Lucky'));
|
||||
$this->assertEqual($result, 'Dusty and Lucky');
|
||||
|
||||
$result = $this->Text->toList(array( 'test_0' => 'banana', 'test_1' => 'apple', 'test_2' => 'lemon'));
|
||||
$this->assertEqual($result, 'banana, apple and lemon');
|
||||
}
|
||||
}
|
@@ -0,0 +1,784 @@
|
||||
<?php
|
||||
/**
|
||||
* TimeHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
App::import('Helper', 'Time');
|
||||
|
||||
/**
|
||||
* TimeHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TimeHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
$this->Time = new TimeHelper();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Time);
|
||||
}
|
||||
|
||||
/**
|
||||
* testToQuarter method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToQuarter() {
|
||||
$result = $this->Time->toQuarter('2007-12-25');
|
||||
$this->assertEqual($result, 4);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-9-25');
|
||||
$this->assertEqual($result, 3);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25');
|
||||
$this->assertEqual($result, 1);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25', true);
|
||||
$this->assertEqual($result, array('2007-01-01', '2007-03-31'));
|
||||
|
||||
$result = $this->Time->toQuarter('2007-5-25', true);
|
||||
$this->assertEqual($result, array('2007-04-01', '2007-06-30'));
|
||||
|
||||
$result = $this->Time->toQuarter('2007-8-25', true);
|
||||
$this->assertEqual($result, array('2007-07-01', '2007-09-30'));
|
||||
|
||||
$result = $this->Time->toQuarter('2007-12-25', true);
|
||||
$this->assertEqual($result, array('2007-10-01', '2007-12-31'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testTimeAgoInWords method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testTimeAgoInWords() {
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+4 months +2 weeks +3 days'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '4 months, 2 weeks, 3 days');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+4 months +2 weeks +2 days'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '4 months, 2 weeks, 2 days');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+4 months +2 weeks +1 day'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '4 months, 2 weeks, 1 day');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+3 months +2 weeks +1 day'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '3 months, 2 weeks, 1 day');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+3 months +2 weeks'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '3 months, 2 weeks');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+3 months +1 week +6 days'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '3 months, 1 week, 6 days');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 weeks +1 day'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '2 months, 2 weeks, 1 day');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 weeks'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '2 months, 2 weeks');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +1 week +6 days'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '2 months, 1 week, 6 days');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+1 month +1 week +6 days'), array('end' => '8 years'), true);
|
||||
$this->assertEqual($result, '1 month, 1 week, 6 days');
|
||||
|
||||
for($i = 0; $i < 200; $i ++) {
|
||||
$years = mt_rand(0, 3);
|
||||
$months = mt_rand(0, 11);
|
||||
$weeks = mt_rand(0, 3);
|
||||
$days = mt_rand(0, 6);
|
||||
$hours = 0;
|
||||
$minutes = 0;
|
||||
$seconds = 0;
|
||||
$relative_date = '';
|
||||
|
||||
if ($years > 0) {
|
||||
// years and months and days
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $years . ' year' . ($years > 1 ? 's' : '');
|
||||
$relative_date .= $months > 0 ? ($relative_date ? ', -' : '-') . $months . ' month' . ($months > 1 ? 's' : '') : '';
|
||||
$relative_date .= $weeks > 0 ? ($relative_date ? ', -' : '-') . $weeks . ' week' . ($weeks > 1 ? 's' : '') : '';
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', -' : '-') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($months) > 0) {
|
||||
// months, weeks and days
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $months . ' month' . ($months > 1 ? 's' : '');
|
||||
$relative_date .= $weeks > 0 ? ($relative_date ? ', -' : '-') . $weeks . ' week' . ($weeks > 1 ? 's' : '') : '';
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', -' : '-') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($weeks) > 0) {
|
||||
// weeks and days
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $weeks . ' week' . ($weeks > 1 ? 's' : '');
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', -' : '-') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($days) > 0) {
|
||||
// days and hours
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $days . ' day' . ($days > 1 ? 's' : '');
|
||||
$relative_date .= $hours > 0 ? ($relative_date ? ', -' : '-') . $hours . ' hour' . ($hours > 1 ? 's' : '') : '';
|
||||
} elseif (abs($hours) > 0) {
|
||||
// hours and minutes
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $hours . ' hour' . ($hours > 1 ? 's' : '');
|
||||
$relative_date .= $minutes > 0 ? ($relative_date ? ', -' : '-') . $minutes . ' minute' . ($minutes > 1 ? 's' : '') : '';
|
||||
} elseif (abs($minutes) > 0) {
|
||||
// minutes only
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $minutes . ' minute' . ($minutes > 1 ? 's' : '');
|
||||
} else {
|
||||
// seconds only
|
||||
$relative_date .= ($relative_date ? ', -' : '-') . $seconds . ' second' . ($seconds != 1 ? 's' : '');
|
||||
}
|
||||
|
||||
if (date('j/n/y', strtotime(str_replace(',','',$relative_date))) != '1/1/70') {
|
||||
$result = $this->Time->timeAgoInWords(strtotime(str_replace(',','',$relative_date)), array('end' => '8 years'), true);
|
||||
if ($relative_date == '0 seconds') {
|
||||
$relative_date = '0 seconds ago';
|
||||
}
|
||||
|
||||
$relative_date = str_replace('-', '', $relative_date) . ' ago';
|
||||
$this->assertEqual($result, $relative_date);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 0; $i < 200; $i ++) {
|
||||
$years = mt_rand(0, 3);
|
||||
$months = mt_rand(0, 11);
|
||||
$weeks = mt_rand(0, 3);
|
||||
$days = mt_rand(0, 6);
|
||||
$hours = 0;
|
||||
$minutes = 0;
|
||||
$seconds = 0;
|
||||
|
||||
$relative_date = '';
|
||||
|
||||
if ($years > 0) {
|
||||
// years and months and days
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $years . ' year' . ($years > 1 ? 's' : '');
|
||||
$relative_date .= $months > 0 ? ($relative_date ? ', ' : '') . $months . ' month' . ($months > 1 ? 's' : '') : '';
|
||||
$relative_date .= $weeks > 0 ? ($relative_date ? ', ' : '') . $weeks . ' week' . ($weeks > 1 ? 's' : '') : '';
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($months) > 0) {
|
||||
// months, weeks and days
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $months . ' month' . ($months > 1 ? 's' : '');
|
||||
$relative_date .= $weeks > 0 ? ($relative_date ? ', ' : '') . $weeks . ' week' . ($weeks > 1 ? 's' : '') : '';
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($weeks) > 0) {
|
||||
// weeks and days
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $weeks . ' week' . ($weeks > 1 ? 's' : '');
|
||||
$relative_date .= $days > 0 ? ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : '') : '';
|
||||
} elseif (abs($days) > 0) {
|
||||
// days and hours
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $days . ' day' . ($days > 1 ? 's' : '');
|
||||
$relative_date .= $hours > 0 ? ($relative_date ? ', ' : '') . $hours . ' hour' . ($hours > 1 ? 's' : '') : '';
|
||||
} elseif (abs($hours) > 0) {
|
||||
// hours and minutes
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $hours . ' hour' . ($hours > 1 ? 's' : '');
|
||||
$relative_date .= $minutes > 0 ? ($relative_date ? ', ' : '') . $minutes . ' minute' . ($minutes > 1 ? 's' : '') : '';
|
||||
} elseif (abs($minutes) > 0) {
|
||||
// minutes only
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $minutes . ' minute' . ($minutes > 1 ? 's' : '');
|
||||
} else {
|
||||
// seconds only
|
||||
$relative_date .= ($relative_date ? ', ' : '') . $seconds . ' second' . ($seconds != 1 ? 's' : '');
|
||||
}
|
||||
|
||||
if (date('j/n/y', strtotime(str_replace(',','',$relative_date))) != '1/1/70') {
|
||||
$result = $this->Time->timeAgoInWords(strtotime(str_replace(',','',$relative_date)), array('end' => '8 years'), true);
|
||||
if ($relative_date == '0 seconds') {
|
||||
$relative_date = '0 seconds ago';
|
||||
}
|
||||
|
||||
$relative_date = str_replace('-', '', $relative_date) . '';
|
||||
$this->assertEqual($result, $relative_date);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 years -5 months -2 days'), array('end' => '3 years'), true);
|
||||
$this->assertEqual($result, '2 years, 5 months, 2 days ago');
|
||||
|
||||
$result = $this->Time->timeAgoInWords('2007-9-25');
|
||||
$this->assertEqual($result, 'on 25/9/07');
|
||||
|
||||
$result = $this->Time->timeAgoInWords('2007-9-25', 'Y-m-d');
|
||||
$this->assertEqual($result, 'on 2007-09-25');
|
||||
|
||||
$result = $this->Time->timeAgoInWords('2007-9-25', 'Y-m-d', true);
|
||||
$this->assertEqual($result, 'on 2007-09-25');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 weeks -2 days'), 'Y-m-d', false);
|
||||
$this->assertEqual($result, '2 weeks, 2 days ago');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 weeks +2 days'), 'Y-m-d', true);
|
||||
$this->assertPattern('/^2 weeks, [1|2] day(s)?$/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 days'), array('end' => '1 month'));
|
||||
$this->assertEqual($result, 'on ' . date('j/n/y', strtotime('+2 months +2 days')));
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 days'), array('end' => '3 month'));
|
||||
$this->assertPattern('/2 months/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +12 days'), array('end' => '3 month'));
|
||||
$this->assertPattern('/2 months, 1 week/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+3 months +5 days'), array('end' => '4 month'));
|
||||
$this->assertEqual($result, '3 months, 5 days');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 months -2 days'), array('end' => '3 month'));
|
||||
$this->assertEqual($result, '2 months, 2 days ago');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 months -2 days'), array('end' => '3 month'));
|
||||
$this->assertEqual($result, '2 months, 2 days ago');
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 days'), array('end' => '3 month'));
|
||||
$this->assertPattern('/2 months/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('+2 months +2 days'), array('end' => '1 month', 'format' => 'Y-m-d'));
|
||||
$this->assertEqual($result, 'on ' . date('Y-m-d', strtotime('+2 months +2 days')));
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 months -2 days'), array('end' => '1 month', 'format' => 'Y-m-d'));
|
||||
$this->assertEqual($result, 'on ' . date('Y-m-d', strtotime('-2 months -2 days')));
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-13 months -5 days'), array('end' => '2 years'));
|
||||
$this->assertEqual($result, '1 year, 1 month, 5 days ago');
|
||||
|
||||
$fourHours = $this->Time->timeAgoInWords(strtotime('-5 days -2 hours'), array('userOffset' => -4));
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-5 days -2 hours'), array('userOffset' => 4));
|
||||
$this->assertEqual($fourHours, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-2 hours'));
|
||||
$expected = '2 hours ago';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-12 minutes'));
|
||||
$expected = '12 minutes ago';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(strtotime('-12 seconds'));
|
||||
$expected = '12 seconds ago';
|
||||
$this->assertEqual($expected, $result);
|
||||
|
||||
$time = strtotime('-3 years -12 months');
|
||||
$result = $this->Time->timeAgoInWords($time);
|
||||
$expected = 'on ' . date('j/n/y', $time);
|
||||
$this->assertEqual($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRelative method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRelative() {
|
||||
$result = $this->Time->relativeTime('-1 week');
|
||||
$this->assertEqual($result, '1 week ago');
|
||||
$result = $this->Time->relativeTime('+1 week');
|
||||
$this->assertEqual($result, '1 week');
|
||||
}
|
||||
|
||||
/**
|
||||
* testNice method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testNice() {
|
||||
$time = time() + 2 * DAY;
|
||||
$this->assertEqual(date('D, M jS Y, H:i', $time), $this->Time->nice($time));
|
||||
|
||||
$time = time() - 2 * DAY;
|
||||
$this->assertEqual(date('D, M jS Y, H:i', $time), $this->Time->nice($time));
|
||||
|
||||
$time = time();
|
||||
$this->assertEqual(date('D, M jS Y, H:i', $time), $this->Time->nice($time));
|
||||
|
||||
$time = 0;
|
||||
$this->assertEqual(date('D, M jS Y, H:i', time()), $this->Time->nice($time));
|
||||
|
||||
$time = null;
|
||||
$this->assertEqual(date('D, M jS Y, H:i', time()), $this->Time->nice($time));
|
||||
}
|
||||
|
||||
/**
|
||||
* testNiceShort method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testNiceShort() {
|
||||
$time = time() + 2 * DAY;
|
||||
if (date('Y', $time) == date('Y')) {
|
||||
$this->assertEqual(date('M jS, H:i', $time), $this->Time->niceShort($time));
|
||||
} else {
|
||||
$this->assertEqual(date('M jSY, H:i', $time), $this->Time->niceShort($time));
|
||||
}
|
||||
|
||||
$time = time();
|
||||
$this->assertEqual('Today, '.date('H:i', $time), $this->Time->niceShort($time));
|
||||
|
||||
$time = time() - DAY;
|
||||
$this->assertEqual('Yesterday, '.date('H:i', $time), $this->Time->niceShort($time));
|
||||
}
|
||||
|
||||
/**
|
||||
* testDaysAsSql method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDaysAsSql() {
|
||||
$begin = time();
|
||||
$end = time() + DAY;
|
||||
$field = 'my_field';
|
||||
$expected = '(my_field >= \''.date('Y-m-d', $begin).' 00:00:00\') AND (my_field <= \''.date('Y-m-d', $end).' 23:59:59\')';
|
||||
$this->assertEqual($expected, $this->Time->daysAsSql($begin, $end, $field));
|
||||
}
|
||||
|
||||
/**
|
||||
* testDayAsSql method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testDayAsSql() {
|
||||
$time = time();
|
||||
$field = 'my_field';
|
||||
$expected = '(my_field >= \''.date('Y-m-d', $time).' 00:00:00\') AND (my_field <= \''.date('Y-m-d', $time).' 23:59:59\')';
|
||||
$this->assertEqual($expected, $this->Time->dayAsSql($time, $field));
|
||||
}
|
||||
|
||||
/**
|
||||
* testToUnix method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToUnix() {
|
||||
$this->assertEqual(time(), $this->Time->toUnix(time()));
|
||||
$this->assertEqual(strtotime('+1 day'), $this->Time->toUnix('+1 day'));
|
||||
$this->assertEqual(strtotime('+0 days'), $this->Time->toUnix('+0 days'));
|
||||
$this->assertEqual(strtotime('-1 days'), $this->Time->toUnix('-1 days'));
|
||||
$this->assertEqual(false, $this->Time->toUnix(''));
|
||||
$this->assertEqual(false, $this->Time->toUnix(null));
|
||||
}
|
||||
|
||||
/**
|
||||
* testToAtom method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToAtom() {
|
||||
$this->assertEqual(date('Y-m-d\TH:i:s\Z'), $this->Time->toAtom(time()));
|
||||
}
|
||||
|
||||
/**
|
||||
* testToRss method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testToRss() {
|
||||
$this->assertEqual(date('r'), $this->Time->toRss(time()));
|
||||
}
|
||||
|
||||
/**
|
||||
* testFormat method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFormat() {
|
||||
$format = 'D-M-Y';
|
||||
$arr = array(time(), strtotime('+1 days'), strtotime('+1 days'), strtotime('+0 days'));
|
||||
foreach ($arr as $val) {
|
||||
$this->assertEqual(date($format, $val), $this->Time->format($format, $val));
|
||||
}
|
||||
|
||||
$result = $this->Time->format('Y-m-d', null, 'never');
|
||||
$this->assertEqual($result, 'never');
|
||||
}
|
||||
|
||||
/**
|
||||
* testOfGmt method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testGmt() {
|
||||
$hour = 3;
|
||||
$min = 4;
|
||||
$sec = 2;
|
||||
$month = 5;
|
||||
$day = 14;
|
||||
$year = 2007;
|
||||
$time = mktime($hour, $min, $sec, $month, $day, $year);
|
||||
$expected = gmmktime($hour, $min, $sec, $month, $day, $year);
|
||||
$this->assertEqual($expected, $this->Time->gmt(date('Y-n-j G:i:s', $time)));
|
||||
|
||||
$hour = date('H');
|
||||
$min = date('i');
|
||||
$sec = date('s');
|
||||
$month = date('m');
|
||||
$day = date('d');
|
||||
$year = date('Y');
|
||||
$expected = gmmktime($hour, $min, $sec, $month, $day, $year);
|
||||
$this->assertEqual($expected, $this->Time->gmt(null));
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsToday method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testIsToday() {
|
||||
$result = $this->Time->isToday('+1 day');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->isToday('+1 days');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->isToday('+0 day');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isToday('-1 day');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsThisWeek method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testIsThisWeek() {
|
||||
// A map of days which goes from -1 day of week to +1 day of week
|
||||
$map = array(
|
||||
'Mon' => array(-1, 7), 'Tue' => array(-2, 6), 'Wed' => array(-3, 5),
|
||||
'Thu' => array(-4, 4), 'Fri' => array(-5, 3), 'Sat' => array(-6, 2),
|
||||
'Sun' => array(-7, 1)
|
||||
);
|
||||
$days = $map[date('D')];
|
||||
|
||||
for ($day = $days[0] + 1; $day < $days[1]; $day++) {
|
||||
$this->assertTrue($this->Time->isThisWeek(($day > 0 ? '+' : '') . $day . ' days'));
|
||||
}
|
||||
$this->assertFalse($this->Time->isThisWeek($days[0] . ' days'));
|
||||
$this->assertFalse($this->Time->isThisWeek('+' . $days[1] . ' days'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsThisMonth method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testIsThisMonth() {
|
||||
$result = $this->Time->isThisMonth('+0 day');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isThisMonth($time = mktime(0, 0, 0, date('m'), mt_rand(1, 28), date('Y')));
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isThisMonth(mktime(0, 0, 0, date('m'), mt_rand(1, 28), date('Y') - mt_rand(1, 12)));
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->isThisMonth(mktime(0, 0, 0, date('m'), mt_rand(1, 28), date('Y') + mt_rand(1, 12)));
|
||||
$this->assertFalse($result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsThisYear method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testIsThisYear() {
|
||||
$result = $this->Time->isThisYear('+0 day');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isThisYear(mktime(0, 0, 0, mt_rand(1, 12), mt_rand(1, 28), date('Y')));
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
/**
|
||||
* testWasYesterday method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testWasYesterday() {
|
||||
$result = $this->Time->wasYesterday('+1 day');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->wasYesterday('+1 days');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->wasYesterday('+0 day');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->wasYesterday('-1 day');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->wasYesterday('-1 days');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->wasYesterday('-2 days');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
/**
|
||||
* testIsTomorrow method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testIsTomorrow() {
|
||||
$result = $this->Time->isTomorrow('+1 day');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isTomorrow('+1 days');
|
||||
$this->assertTrue($result);
|
||||
$result = $this->Time->isTomorrow('+0 day');
|
||||
$this->assertFalse($result);
|
||||
$result = $this->Time->isTomorrow('-1 day');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testWasWithinLast method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testWasWithinLast() {
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 day', '-1 day'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 week', '-1 week'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 year', '-1 year'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 second', '-1 second'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 minute', '-1 minute'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 year', '-1 year'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 month', '-1 month'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 day', '-1 day'));
|
||||
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 week', '-1 day'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('2 week', '-1 week'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 second', '-1 year'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('10 minutes', '-1 second'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('23 minutes', '-1 minute'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('0 year', '-1 year'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('13 month', '-1 month'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('2 days', '-1 day'));
|
||||
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 week', '-2 weeks'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 second', '-2 seconds'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 day', '-2 days'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 hour', '-2 hours'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 month', '-2 months'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 year', '-2 years'));
|
||||
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 day', '-2 weeks'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('1 day', '-2 days'));
|
||||
$this->assertFalse($this->Time->wasWithinLast('0 days', '-2 days'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 hour', '-20 seconds'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 year', '-60 minutes -30 seconds'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('3 years', '-2 months'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('5 months', '-4 months'));
|
||||
|
||||
$this->assertTrue($this->Time->wasWithinLast('5 ', '-3 days'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 ', '-1 hour'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 ', '-1 minute'));
|
||||
$this->assertTrue($this->Time->wasWithinLast('1 ', '-23 hours -59 minutes -59 seconds'));
|
||||
}
|
||||
/**
|
||||
* testUserOffset method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testUserOffset() {
|
||||
if ($this->skipIf(!class_exists('DateTimeZone'), '%s DateTimeZone class not available.')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$timezoneServer = new DateTimeZone(date_default_timezone_get());
|
||||
$timeServer = new DateTime('now', $timezoneServer);
|
||||
$yourTimezone = $timezoneServer->getOffset($timeServer) / HOUR;
|
||||
|
||||
$expected = time();
|
||||
$result = $this->Time->fromString(time(), $yourTimezone);
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test fromString()
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFromString() {
|
||||
$result = $this->Time->fromString('');
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = $this->Time->fromString(0, 0);
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = $this->Time->fromString('+1 hour');
|
||||
$expected = strtotime('+1 hour');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$timezone = date('Z', time());
|
||||
$result = $this->Time->fromString('+1 hour', $timezone);
|
||||
$expected = $this->Time->convert(strtotime('+1 hour'), $timezone);
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test converting time specifiers using a time definition localfe file
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testConvertSpecifiers() {
|
||||
App::build(array(
|
||||
'locales' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'locale' . DS)
|
||||
), true);
|
||||
Configure::write('Config.language', 'time_test');
|
||||
$time = strtotime('Thu Jan 14 11:43:39 2010');
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%a', $time);
|
||||
$expected = 'jue';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%A', $time);
|
||||
$expected = 'jueves';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%c', $time);
|
||||
$expected = 'jue %d ene %Y %H:%M:%S %Z';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%C', $time);
|
||||
$expected = '20';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%D', $time);
|
||||
$expected = '%m/%d/%y';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%b', $time);
|
||||
$expected = 'ene';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%h', $time);
|
||||
$expected = 'ene';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%B', $time);
|
||||
$expected = 'enero';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%n', $time);
|
||||
$expected = "\n";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%n', $time);
|
||||
$expected = "\n";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%p', $time);
|
||||
$expected = 'AM';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%P', $time);
|
||||
$expected = 'am';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%r', $time);
|
||||
$expected = '%I:%M:%S AM';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%R', $time);
|
||||
$expected = '11:43';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%t', $time);
|
||||
$expected = "\t";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%T', $time);
|
||||
$expected = '%H:%M:%S';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%u', $time);
|
||||
$expected = 4;
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%x', $time);
|
||||
$expected = '%d/%m/%y';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->convertSpecifiers('%X', $time);
|
||||
$expected = '%H:%M:%S';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test formatting dates taking in account preferred i18n locale file
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testI18nFormat() {
|
||||
App::build(array(
|
||||
'locales' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'locale' . DS)
|
||||
), true);
|
||||
Configure::write('Config.language', 'time_test');
|
||||
$time = strtotime('Thu Jan 14 13:59:28 2010');
|
||||
|
||||
$result = $this->Time->i18nFormat($time);
|
||||
$expected = '14/01/10';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->i18nFormat($time, '%c');
|
||||
$expected = 'jue 14 ene 2010 13:59:28 ' . strftime('%Z', $time);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->i18nFormat($time, 'Time is %r, and date is %x');
|
||||
$expected = 'Time is 01:59:28 PM, and date is 14/01/10';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Time->i18nFormat('invalid date', '%x', 'Date invalid');
|
||||
$expected = 'Date invalid';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test new format() syntax which inverts first and secod parameters
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testFormatNewSyntax() {
|
||||
$time = time();
|
||||
$this->assertEqual($this->Time->format($time), $this->Time->i18nFormat($time));
|
||||
$this->assertEqual($this->Time->format($time, '%c'), $this->Time->i18nFormat($time, '%c'));
|
||||
}
|
||||
}
|
@@ -0,0 +1,287 @@
|
||||
<?php
|
||||
/**
|
||||
* XmlHelperTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
App::import('Helper', 'Xml');
|
||||
|
||||
/**
|
||||
* TestXml class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class TestXml extends Object {
|
||||
|
||||
/**
|
||||
* content property
|
||||
*
|
||||
* @var string ''
|
||||
* @access public
|
||||
*/
|
||||
var $content = '';
|
||||
|
||||
/**
|
||||
* construct method
|
||||
*
|
||||
* @param mixed $content
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
function __construct($content) {
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* toString method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function toString() {
|
||||
return $this->content;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* XmlHelperTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view.helpers
|
||||
*/
|
||||
class XmlHelperTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
$this->Xml =& new XmlHelper();
|
||||
$this->Xml->beforeRender();
|
||||
$manager =& XmlManager::getInstance();
|
||||
$manager->namespaces = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->Xml);
|
||||
}
|
||||
|
||||
/**
|
||||
* testAddNamespace method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAddNamespace() {
|
||||
$this->Xml->addNs('custom', 'http://example.com/dtd.xml');
|
||||
$manager =& XmlManager::getInstance();
|
||||
|
||||
$expected = array('custom' => 'http://example.com/dtd.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRemoveNamespace method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRemoveNamespace() {
|
||||
$this->Xml->addNs('custom', 'http://example.com/dtd.xml');
|
||||
$this->Xml->addNs('custom2', 'http://example.com/dtd2.xml');
|
||||
$manager =& XmlManager::getInstance();
|
||||
|
||||
$expected = array('custom' => 'http://example.com/dtd.xml', 'custom2' => 'http://example.com/dtd2.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
|
||||
$this->Xml->removeNs('custom');
|
||||
$expected = array('custom2' => 'http://example.com/dtd2.xml');
|
||||
$this->assertEqual($manager->namespaces, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRenderZeroElement method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRenderZeroElement() {
|
||||
$result = $this->Xml->elem('count', null, 0);
|
||||
$expected = '<count>0</count>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Xml->elem('count', null, array('cdata' => true, 'value' => null));
|
||||
$expected = '<count />';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRenderElementWithNamespace method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRenderElementWithNamespace() {
|
||||
$result = $this->Xml->elem('count', array('namespace' => 'myNameSpace'), 'content');
|
||||
$expected = '<myNameSpace:count>content</myNameSpace:count>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Xml->elem('count', array('namespace' => 'myNameSpace'), 'content', false);
|
||||
$expected = '<myNameSpace:count>content';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected .= '</myNameSpace:count>';
|
||||
$result .= $this->Xml->closeElem();
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
/**
|
||||
* testRenderElementWithComplexContent method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRenderElementWithComplexContent() {
|
||||
$result = $this->Xml->elem('count', array('namespace' => 'myNameSpace'), array('contrived' => 'content'));
|
||||
$expected = '<myNameSpace:count><content /></myNameSpace:count>';
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$result = $this->Xml->elem('count', array('namespace' => 'myNameSpace'), array('cdata' => true, 'value' => 'content'));
|
||||
$expected = '<myNameSpace:count><![CDATA[content]]></myNameSpace:count>';
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testSerialize method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSerialize() {
|
||||
$data = array(
|
||||
'test1' => 'test with no quotes',
|
||||
'test2' => 'test with "double quotes"'
|
||||
);
|
||||
$result = $this->Xml->serialize($data);
|
||||
$expected = '<std_class test1="test with no quotes" test2="test with "double quotes"" />';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$data = array(
|
||||
'test1' => 'test with no quotes',
|
||||
'test2' => 'test without double quotes'
|
||||
);
|
||||
$result = $this->Xml->serialize($data);
|
||||
$expected = '<std_class test1="test with no quotes" test2="test without double quotes" />';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$data = array(
|
||||
'ServiceDay' => array('ServiceTime' => array('ServiceTimePrice' => array('dollar' => 1, 'cents' => '2')))
|
||||
);
|
||||
$result = $this->Xml->serialize($data);
|
||||
$expected = '<service_day><service_time><service_time_price dollar="1" cents="2" /></service_time></service_day>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$data = array(
|
||||
'ServiceDay' => array('ServiceTime' => array('ServiceTimePrice' => array('dollar' => 1, 'cents' => '2')))
|
||||
);
|
||||
$result = $this->Xml->serialize($data, array('format' => 'tags'));
|
||||
$expected = '<service_day><service_time><service_time_price><dollar>1</dollar><cents>2</cents></service_time_price></service_time></service_day>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$data = array(
|
||||
'Pages' => array('id' => 2, 'url' => 'http://www.url.com/rb/153/?id=bbbb&t=access')
|
||||
);
|
||||
$result = $this->Xml->serialize($data);
|
||||
$expected = '<pages id="2" url="http://www.url.com/rb/153/?id=bbbb&t=access" />';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$test = array(
|
||||
'Test' => array('test' => true)
|
||||
);
|
||||
$expected = '<test test="1" />';
|
||||
$result = $this->Xml->serialize($test);
|
||||
$this->assertidentical($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testSerializeOnMultiDimensionalArray method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSerializeOnMultiDimensionalArray() {
|
||||
$data = array(
|
||||
'Statuses' => array(
|
||||
array('Status' => array('id' => 1)),
|
||||
array('Status' => array('id' => 2))
|
||||
)
|
||||
);
|
||||
$result = $this->Xml->serialize($data, array('format' => 'tags'));
|
||||
$expected = '<statuses><status><id>1</id></status><status><id>2</id></status></statuses>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testHeader method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testHeader() {
|
||||
$expectedDefaultEncoding = Configure::read('App.encoding');
|
||||
if (empty($expectedDefaultEncoding)) {
|
||||
$expectedDefaultEncoding = 'UTF-8';
|
||||
}
|
||||
$attrib = array();
|
||||
$result = $this->Xml->header($attrib);
|
||||
$expected = '<?xml version="1.0" encoding="'.$expectedDefaultEncoding.'" ?>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$attrib = array(
|
||||
'encoding' => 'UTF-8',
|
||||
'version' => '1.1'
|
||||
);
|
||||
$result = $this->Xml->header($attrib);
|
||||
$expected = '<?xml version="1.1" encoding="UTF-8" ?>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$attrib = array(
|
||||
'encoding' => 'UTF-8',
|
||||
'version' => '1.2',
|
||||
'additional' => 'attribute'
|
||||
);
|
||||
$result = $this->Xml->header($attrib);
|
||||
$expected = '<?xml version="1.2" encoding="UTF-8" additional="attribute" ?>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
|
||||
$attrib = 'encoding="UTF-8" someOther="value"';
|
||||
$result = $this->Xml->header($attrib);
|
||||
$expected = '<?xml encoding="UTF-8" someOther="value" ?>';
|
||||
$this->assertIdentical($result, $expected);
|
||||
}
|
||||
}
|
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
/**
|
||||
* ThemeViewTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('Media', 'Controller'));
|
||||
|
||||
if (!class_exists('ErrorHandler')) {
|
||||
App::import('Core', array('Error'));
|
||||
}
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* ThemePostsController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class MediaController extends Controller {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'Media'
|
||||
* @access public
|
||||
*/
|
||||
var $name = 'Media';
|
||||
|
||||
/**
|
||||
* index download
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function download() {
|
||||
$path = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'vendors' . DS .'css' . DS;
|
||||
$id = 'test_asset.css';
|
||||
$extension = 'css';
|
||||
$this->set(compact('path', 'id', 'extension'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TestMediaView class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class TestMediaView extends MediaView {
|
||||
|
||||
/**
|
||||
* headers public property as a copy from protected property _headers
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $headers = array();
|
||||
|
||||
/**
|
||||
* active property to mock the status of a remote connection
|
||||
*
|
||||
* @var boolean true
|
||||
* @access public
|
||||
*/
|
||||
var $active = true;
|
||||
|
||||
function _output() {
|
||||
$this->headers = $this->_headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* _isActive method. Usted de $active property to mock an active (true) connection,
|
||||
* or an aborted (false) one
|
||||
*
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
function _isActive() {
|
||||
return $this->active;
|
||||
}
|
||||
|
||||
/**
|
||||
* _clearBuffer method
|
||||
*
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
function _clearBuffer() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* _flushBuffer method
|
||||
*
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
function _flushBuffer() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ThemeViewTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
*/
|
||||
class MediaViewTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* startTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
Router::reload();
|
||||
$this->Controller =& new Controller();
|
||||
$this->MediaController =& new MediaController();
|
||||
$this->MediaController->viewPath = 'posts';
|
||||
$this->MediaController->download();
|
||||
$this->MediaView =& new TestMediaView($this->MediaController);
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
unset($this->MediaView);
|
||||
unset($this->MediaController);
|
||||
unset($this->Controller);
|
||||
ClassRegistry::flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* testRender method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRender() {
|
||||
ob_start();
|
||||
$result = $this->MediaView->render();
|
||||
$output = ob_get_clean();
|
||||
|
||||
$this->assertTrue($result !== false);
|
||||
$this->assertEqual($output, 'this is the test asset css file');
|
||||
}
|
||||
|
||||
/**
|
||||
* testConnectionAborted method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testConnectionAborted() {
|
||||
$this->MediaView->active = false;
|
||||
$result = $this->MediaView->render();
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
}
|
@@ -0,0 +1,343 @@
|
||||
<?php
|
||||
/**
|
||||
* ThemeViewTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('Theme', 'Controller'));
|
||||
|
||||
if (!class_exists('ErrorHandler')) {
|
||||
App::import('Core', array('Error'));
|
||||
}
|
||||
if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) {
|
||||
define('CAKEPHP_UNIT_TEST_EXECUTION', 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* ThemePostsController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class ThemePostsController extends Controller {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'ThemePosts'
|
||||
* @access public
|
||||
*/
|
||||
var $name = 'ThemePosts';
|
||||
|
||||
/**
|
||||
* index method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function index() {
|
||||
$this->set('testData', 'Some test data');
|
||||
$test2 = 'more data';
|
||||
$test3 = 'even more data';
|
||||
$this->set(compact('test2', 'test3'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ThemeViewTestErrorHandler class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class ThemeViewTestErrorHandler extends ErrorHandler {
|
||||
|
||||
/**
|
||||
* stop method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function _stop() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TestThemeView class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class TestThemeView extends ThemeView {
|
||||
|
||||
/**
|
||||
* renderElement method
|
||||
*
|
||||
* @param mixed $name
|
||||
* @param array $params
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function renderElement($name, $params = array()) {
|
||||
return $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* getViewFileName method
|
||||
*
|
||||
* @param mixed $name
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function getViewFileName($name = null) {
|
||||
return $this->_getViewFileName($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLayoutFileName method
|
||||
*
|
||||
* @param mixed $name
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function getLayoutFileName($name = null) {
|
||||
return $this->_getLayoutFileName($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* cakeError method
|
||||
*
|
||||
* @param mixed $method
|
||||
* @param mixed $messages
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function cakeError($method, $messages) {
|
||||
$error =& new ThemeViewTestErrorHandler($method, $messages);
|
||||
return $error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ThemeViewTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
*/
|
||||
class ThemeViewTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
Router::reload();
|
||||
$this->Controller =& new Controller();
|
||||
$this->PostsController =& new ThemePostsController();
|
||||
$this->PostsController->viewPath = 'posts';
|
||||
$this->PostsController->index();
|
||||
$this->ThemeView =& new ThemeView($this->PostsController);
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->ThemeView);
|
||||
unset($this->PostsController);
|
||||
unset($this->Controller);
|
||||
ClassRegistry::flush();
|
||||
}
|
||||
/**
|
||||
* test that the theme view can be constructed without going into the registry
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testConstructionNoRegister() {
|
||||
ClassRegistry::flush();
|
||||
$controller = null;
|
||||
$Theme =& new ThemeView($controller, false);
|
||||
$ThemeTwo =& ClassRegistry::getObject('view');
|
||||
$this->assertFalse($ThemeTwo);
|
||||
}
|
||||
|
||||
/**
|
||||
* startTest
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
App::build(array(
|
||||
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* testPluginGetTemplate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testPluginThemedGetTemplate() {
|
||||
$this->Controller->plugin = 'test_plugin';
|
||||
$this->Controller->name = 'TestPlugin';
|
||||
$this->Controller->viewPath = 'tests';
|
||||
$this->Controller->action = 'index';
|
||||
$this->Controller->theme = 'test_theme';
|
||||
|
||||
$ThemeView =& new TestThemeView($this->Controller);
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'plugins' . DS . 'test_plugin' . DS . 'tests' . DS .'index.ctp';
|
||||
$result = $ThemeView->getViewFileName('index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'plugins' . DS . 'test_plugin' . DS . 'layouts' . DS .'plugin_default.ctp';
|
||||
$result = $ThemeView->getLayoutFileName('plugin_default');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'layouts' . DS .'default.ctp';
|
||||
$result = $ThemeView->getLayoutFileName('default');
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testGetTemplate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testGetTemplate() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Pages';
|
||||
$this->Controller->viewPath = 'pages';
|
||||
$this->Controller->action = 'display';
|
||||
$this->Controller->params['pass'] = array('home');
|
||||
|
||||
$ThemeView =& new TestThemeView($this->Controller);
|
||||
$ThemeView->theme = 'test_theme';
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'pages' . DS .'home.ctp';
|
||||
$result = $ThemeView->getViewFileName('home');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'posts' . DS .'index.ctp';
|
||||
$result = $ThemeView->getViewFileName('/posts/index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'layouts' . DS .'default.ctp';
|
||||
$result = $ThemeView->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$ThemeView->layoutPath = 'rss';
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'rss' . DS . 'default.ctp';
|
||||
$result = $ThemeView->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$ThemeView->layoutPath = 'email' . DS . 'html';
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'email' . DS . 'html' . DS . 'default.ctp';
|
||||
$result = $ThemeView->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testMissingView method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMissingView() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Pages';
|
||||
$this->Controller->viewPath = 'pages';
|
||||
$this->Controller->action = 'display';
|
||||
$this->Controller->theme = 'my_theme';
|
||||
|
||||
$this->Controller->params['pass'] = array('home');
|
||||
|
||||
restore_error_handler();
|
||||
$View =& new TestThemeView($this->Controller);
|
||||
ob_start();
|
||||
$result = $View->getViewFileName('does_not_exist');
|
||||
$expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean());
|
||||
set_error_handler('simpleTestErrorHandler');
|
||||
$this->assertPattern("/PagesController::/", $expected);
|
||||
$this->assertPattern("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)pages(\/|\\\)does_not_exist.ctp/", $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testMissingLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMissingLayout() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Posts';
|
||||
$this->Controller->viewPath = 'posts';
|
||||
$this->Controller->layout = 'whatever';
|
||||
$this->Controller->theme = 'my_theme';
|
||||
|
||||
restore_error_handler();
|
||||
$View =& new TestThemeView($this->Controller);
|
||||
ob_start();
|
||||
$result = $View->getLayoutFileName();
|
||||
$expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean());
|
||||
set_error_handler('simpleTestErrorHandler');
|
||||
$this->assertPattern("/Missing Layout/", $expected);
|
||||
$this->assertPattern("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)layouts(\/|\\\)whatever.ctp/", $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test memory leaks that existed in _paths at one point.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testMemoryLeakInPaths() {
|
||||
if ($this->skipIf(!function_exists('memory_get_usage'), 'No memory measurement function, cannot test for possible memory leak. %s')) {
|
||||
return;
|
||||
}
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Posts';
|
||||
$this->Controller->viewPath = 'posts';
|
||||
$this->Controller->layout = 'whatever';
|
||||
$this->Controller->theme = 'test_theme';
|
||||
|
||||
$View =& new ThemeView($this->Controller);
|
||||
$View->element('test_element');
|
||||
|
||||
$start = memory_get_usage();
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
$View->element('test_element');
|
||||
}
|
||||
$end = memory_get_usage();
|
||||
$this->assertWithinMargin($start, $end, 3500);
|
||||
}
|
||||
}
|
@@ -0,0 +1,975 @@
|
||||
<?php
|
||||
/**
|
||||
* ViewTest file
|
||||
*
|
||||
* PHP versions 4 and 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
||||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||
*/
|
||||
App::import('Core', array('View', 'Controller'));
|
||||
App::import('Helper', 'Cache');
|
||||
|
||||
Mock::generate('Helper', 'CallbackMockHelper');
|
||||
Mock::generate('CacheHelper', 'ViewTestMockCacheHelper');
|
||||
|
||||
if (!class_exists('ErrorHandler')) {
|
||||
App::import('Core', array('Error'));
|
||||
}
|
||||
|
||||
/**
|
||||
* ViewPostsController class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class ViewPostsController extends Controller {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'Posts'
|
||||
* @access public
|
||||
*/
|
||||
var $name = 'Posts';
|
||||
|
||||
/**
|
||||
* uses property
|
||||
*
|
||||
* @var mixed null
|
||||
* @access public
|
||||
*/
|
||||
var $uses = null;
|
||||
|
||||
/**
|
||||
* index method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function index() {
|
||||
$this->set('testData', 'Some test data');
|
||||
$test2 = 'more data';
|
||||
$test3 = 'even more data';
|
||||
$this->set(compact('test2', 'test3'));
|
||||
}
|
||||
|
||||
/**
|
||||
* nocache_tags_with_element method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function nocache_multiple_element() {
|
||||
$this->set('foo', 'this is foo var');
|
||||
$this->set('bar', 'this is bar var');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ViewTestErrorHandler class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class ViewTestErrorHandler extends ErrorHandler {
|
||||
|
||||
/**
|
||||
* stop method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function _stop() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TestView class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class TestView extends View {
|
||||
|
||||
/**
|
||||
* getViewFileName method
|
||||
*
|
||||
* @param mixed $name
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function getViewFileName($name = null) {
|
||||
return $this->_getViewFileName($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLayoutFileName method
|
||||
*
|
||||
* @param mixed $name
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function getLayoutFileName($name = null) {
|
||||
return $this->_getLayoutFileName($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* loadHelpers method
|
||||
*
|
||||
* @param mixed $loaded
|
||||
* @param mixed $helpers
|
||||
* @param mixed $parent
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function loadHelpers(&$loaded, $helpers, $parent = null) {
|
||||
return $this->_loadHelpers($loaded, $helpers, $parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* paths method
|
||||
*
|
||||
* @param string $plugin
|
||||
* @param boolean $cached
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function paths($plugin = null, $cached = true) {
|
||||
return $this->_paths($plugin, $cached);
|
||||
}
|
||||
|
||||
/**
|
||||
* cakeError method
|
||||
*
|
||||
* @param mixed $method
|
||||
* @param mixed $messages
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function cakeError($method, $messages) {
|
||||
$error =& new ViewTestErrorHandler($method, $messages);
|
||||
return $error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TestAfterHelper class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs.view
|
||||
*/
|
||||
class TestAfterHelper extends Helper {
|
||||
|
||||
/**
|
||||
* property property
|
||||
*
|
||||
* @var string ''
|
||||
* @access public
|
||||
*/
|
||||
var $property = '';
|
||||
|
||||
/**
|
||||
* beforeLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function beforeLayout() {
|
||||
$this->property = 'Valuation';
|
||||
}
|
||||
|
||||
/**
|
||||
* afterLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function afterLayout() {
|
||||
$View =& ClassRegistry::getObject('afterView');
|
||||
$View->output .= 'modified in the afterlife';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ViewTest class
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.tests.cases.libs
|
||||
*/
|
||||
class ViewTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setUp() {
|
||||
Router::reload();
|
||||
$this->Controller = new Controller();
|
||||
$this->PostsController = new ViewPostsController();
|
||||
$this->PostsController->viewPath = 'posts';
|
||||
$this->PostsController->index();
|
||||
$this->View = new View($this->PostsController);
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function tearDown() {
|
||||
unset($this->View);
|
||||
unset($this->PostsController);
|
||||
unset($this->Controller);
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function startTest() {
|
||||
App::build(array(
|
||||
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
|
||||
'views' => array(
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS
|
||||
)
|
||||
), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* endTest
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function endTest() {
|
||||
App::build();
|
||||
}
|
||||
|
||||
/**
|
||||
* testPluginGetTemplate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testPluginGetTemplate() {
|
||||
$this->Controller->plugin = 'test_plugin';
|
||||
$this->Controller->name = 'TestPlugin';
|
||||
$this->Controller->viewPath = 'tests';
|
||||
$this->Controller->action = 'index';
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS .'test_plugin' . DS . 'views' . DS .'tests' . DS .'index.ctp';
|
||||
$result = $View->getViewFileName('index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS .'test_plugin' . DS . 'views' . DS . 'layouts' . DS .'default.ctp';
|
||||
$result = $View->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that plugin/$plugin_name is only appended to the paths it should be.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testPluginPathGeneration() {
|
||||
$this->Controller->plugin = 'test_plugin';
|
||||
$this->Controller->name = 'TestPlugin';
|
||||
$this->Controller->viewPath = 'tests';
|
||||
$this->Controller->action = 'index';
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
$paths = $View->paths();
|
||||
$this->assertEqual($paths, App::path('views'));
|
||||
|
||||
$paths = $View->paths('test_plugin');
|
||||
|
||||
$expected = array(
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'plugins' . DS . 'test_plugin' . DS,
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS . 'test_plugin' . DS . 'views' . DS,
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS,
|
||||
TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS
|
||||
);
|
||||
$this->assertEqual($paths, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that CamelCase plugins still find their view files.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testCamelCasePluginGetTemplate() {
|
||||
$this->Controller->plugin = 'TestPlugin';
|
||||
$this->Controller->name = 'TestPlugin';
|
||||
$this->Controller->viewPath = 'tests';
|
||||
$this->Controller->action = 'index';
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
App::build(array(
|
||||
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS .'test_plugin' . DS . 'views' . DS .'tests' . DS .'index.ctp';
|
||||
$result = $View->getViewFileName('index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS .'test_plugin' . DS . 'views' . DS . 'layouts' . DS .'default.ctp';
|
||||
$result = $View->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testGetTemplate method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testGetTemplate() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Pages';
|
||||
$this->Controller->viewPath = 'pages';
|
||||
$this->Controller->action = 'display';
|
||||
$this->Controller->params['pass'] = array('home');
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'pages' . DS .'home.ctp';
|
||||
$result = $View->getViewFileName('home');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'posts' . DS .'index.ctp';
|
||||
$result = $View->getViewFileName('/posts/index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'posts' . DS .'index.ctp';
|
||||
$result = $View->getViewFileName('../posts/index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS .'default.ctp';
|
||||
$result = $View->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$View->layoutPath = 'rss';
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'rss' . DS . 'default.ctp';
|
||||
$result = $View->getLayoutFileName();
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$View->layoutPath = 'email' . DS . 'html';
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'email' . DS . 'html' . DS . 'default.ctp';
|
||||
$result = $View->getLayoutFileName();
|
||||
|
||||
$this->assertEqual($result, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testMissingView method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMissingView() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Pages';
|
||||
$this->Controller->viewPath = 'pages';
|
||||
$this->Controller->action = 'display';
|
||||
$this->Controller->params['pass'] = array('home');
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
ob_start();
|
||||
$result = $View->getViewFileName('does_not_exist');
|
||||
$expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean());
|
||||
|
||||
$this->assertPattern("/PagesController::/", $expected);
|
||||
$this->assertPattern("/pages(\/|\\\)does_not_exist.ctp/", $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testMissingLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testMissingLayout() {
|
||||
$this->Controller->plugin = null;
|
||||
$this->Controller->name = 'Posts';
|
||||
$this->Controller->viewPath = 'posts';
|
||||
$this->Controller->layout = 'whatever';
|
||||
|
||||
$View = new TestView($this->Controller);
|
||||
ob_start();
|
||||
$result = $View->getLayoutFileName();
|
||||
$expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean());
|
||||
|
||||
$this->assertPattern("/Missing Layout/", $expected);
|
||||
$this->assertPattern("/layouts(\/|\\\)whatever.ctp/", $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testViewVars method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testViewVars() {
|
||||
$this->assertEqual($this->View->viewVars, array('testData' => 'Some test data', 'test2' => 'more data', 'test3' => 'even more data'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testUUIDGeneration method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testUUIDGeneration() {
|
||||
$result = $this->View->uuid('form', array('controller' => 'posts', 'action' => 'index'));
|
||||
$this->assertEqual($result, 'form5988016017');
|
||||
$result = $this->View->uuid('form', array('controller' => 'posts', 'action' => 'index'));
|
||||
$this->assertEqual($result, 'formc3dc6be854');
|
||||
$result = $this->View->uuid('form', array('controller' => 'posts', 'action' => 'index'));
|
||||
$this->assertEqual($result, 'form28f92cc87f');
|
||||
}
|
||||
|
||||
/**
|
||||
* testAddInlineScripts method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAddInlineScripts() {
|
||||
$this->View->addScript('prototype.js');
|
||||
$this->View->addScript('prototype.js');
|
||||
$this->assertEqual($this->View->__scripts, array('prototype.js'));
|
||||
|
||||
$this->View->addScript('mainEvent', 'Event.observe(window, "load", function() { doSomething(); }, true);');
|
||||
$this->assertEqual($this->View->__scripts, array('prototype.js', 'mainEvent' => 'Event.observe(window, "load", function() { doSomething(); }, true);'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testElement method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testElement() {
|
||||
$result = $this->View->element('test_element');
|
||||
$this->assertEqual($result, 'this is the test element');
|
||||
|
||||
$result = $this->View->element('plugin_element', array('plugin' => 'test_plugin'));
|
||||
$this->assertEqual($result, 'this is the plugin element using params[plugin]');
|
||||
|
||||
$this->View->plugin = 'test_plugin';
|
||||
$result = $this->View->element('test_plugin_element');
|
||||
$this->assertEqual($result, 'this is the test set using View::$plugin plugin element');
|
||||
|
||||
$result = $this->View->element('non_existant_element');
|
||||
$this->assertPattern('/Not Found:/', $result);
|
||||
$this->assertPattern('/non_existant_element/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testElementCacheHelperNoCache method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testElementCacheHelperNoCache() {
|
||||
$Controller = new ViewPostsController();
|
||||
$View = new View($Controller);
|
||||
$empty = array();
|
||||
$helpers = $View->_loadHelpers($empty, array('cache'));
|
||||
$View->loaded = $helpers;
|
||||
$result = $View->element('test_element', array('ram' => 'val', 'test' => array('foo', 'bar')));
|
||||
$this->assertEqual($result, 'this is the test element');
|
||||
}
|
||||
|
||||
/**
|
||||
* testElementCache method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testElementCache() {
|
||||
$writable = is_writable(CACHE . 'views' . DS);
|
||||
if ($this->skipIf(!$writable, 'CACHE/views dir is not writable, cannot test elementCache. %s')) {
|
||||
return;
|
||||
}
|
||||
$View = new TestView($this->PostsController);
|
||||
$element = 'test_element';
|
||||
$expected = 'this is the test element';
|
||||
$result = $View->element($element);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
$cached = false;
|
||||
$result = $View->element($element, array('cache'=>'+1 second'));
|
||||
if (file_exists(CACHE . 'views' . DS . 'element_cache_'.$element)) {
|
||||
$cached = true;
|
||||
unlink(CACHE . 'views' . DS . 'element_cache_'.$element);
|
||||
}
|
||||
$this->assertTrue($cached);
|
||||
|
||||
$cached = false;
|
||||
$result = $View->element($element, array('cache'=>'+1 second', 'other_param'=> true, 'anotherParam'=> true));
|
||||
if (file_exists(CACHE . 'views' . DS . 'element_cache_other_param_anotherParam_'.$element)) {
|
||||
$cached = true;
|
||||
unlink(CACHE . 'views' . DS . 'element_cache_other_param_anotherParam_'.$element);
|
||||
}
|
||||
$this->assertTrue($cached);
|
||||
|
||||
$cached = false;
|
||||
$result = $View->element($element, array('cache'=>array('time'=>'+1 second', 'key'=>'/whatever/here')));
|
||||
if (file_exists(CACHE . 'views' . DS . 'element_'.Inflector::slug('/whatever/here').'_'.$element)) {
|
||||
$cached = true;
|
||||
unlink(CACHE . 'views' . DS . 'element_'.Inflector::slug('/whatever/here').'_'.$element);
|
||||
}
|
||||
$this->assertTrue($cached);
|
||||
|
||||
$cached = false;
|
||||
$result = $View->element($element, array('cache'=>array('time'=>'+1 second', 'key'=>'whatever_here')));
|
||||
if (file_exists(CACHE . 'views' . DS . 'element_whatever_here_'.$element)) {
|
||||
$cached = true;
|
||||
unlink(CACHE . 'views' . DS . 'element_whatever_here_'.$element);
|
||||
}
|
||||
$this->assertTrue($cached);
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testLoadHelpers method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testLoadHelpers() {
|
||||
$View = new TestView($this->PostsController);
|
||||
|
||||
$loaded = array();
|
||||
$result = $View->loadHelpers($loaded, array('Html', 'Form', 'Ajax'));
|
||||
$this->assertTrue(is_object($result['Html']));
|
||||
$this->assertTrue(is_object($result['Form']));
|
||||
$this->assertTrue(is_object($result['Form']->Html));
|
||||
$this->assertTrue(is_object($result['Ajax']->Html));
|
||||
|
||||
$View->plugin = 'test_plugin';
|
||||
$result = $View->loadHelpers($loaded, array('TestPlugin.PluggedHelper'));
|
||||
$this->assertTrue(is_object($result['PluggedHelper']));
|
||||
$this->assertTrue(is_object($result['PluggedHelper']->OtherHelper));
|
||||
}
|
||||
|
||||
/**
|
||||
* test the correct triggering of helper callbacks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testHelperCallbackTriggering() {
|
||||
$this->PostsController->helpers = array('Session', 'Html', 'CallbackMock');
|
||||
$View =& new TestView($this->PostsController);
|
||||
$loaded = array();
|
||||
$View->loaded = $View->loadHelpers($loaded, $this->PostsController->helpers);
|
||||
$View->loaded['CallbackMock']->expectOnce('beforeRender');
|
||||
$View->loaded['CallbackMock']->expectOnce('afterRender');
|
||||
$View->loaded['CallbackMock']->expectOnce('beforeLayout');
|
||||
$View->loaded['CallbackMock']->expectOnce('afterLayout');
|
||||
$View->render('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* testBeforeLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testBeforeLayout() {
|
||||
$this->PostsController->helpers = array('Session', 'TestAfter', 'Html');
|
||||
$View =& new View($this->PostsController);
|
||||
$out = $View->render('index');
|
||||
$this->assertEqual($View->loaded['testAfter']->property, 'Valuation');
|
||||
}
|
||||
|
||||
/**
|
||||
* testAfterLayout method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testAfterLayout() {
|
||||
$this->PostsController->helpers = array('Session', 'TestAfter', 'Html');
|
||||
$this->PostsController->set('variable', 'values');
|
||||
|
||||
$View =& new View($this->PostsController);
|
||||
ClassRegistry::addObject('afterView', $View);
|
||||
|
||||
$content = 'This is my view output';
|
||||
$result = $View->renderLayout($content, 'default');
|
||||
$this->assertPattern('/modified in the afterlife/', $result);
|
||||
$this->assertPattern('/This is my view output/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRenderLoadHelper method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRenderLoadHelper() {
|
||||
$this->PostsController->helpers = array('Session', 'Html', 'Form', 'Ajax');
|
||||
$View =& new TestView($this->PostsController);
|
||||
|
||||
$result = $View->_render($View->getViewFileName('index'), array());
|
||||
$this->assertEqual($result, 'posts index');
|
||||
|
||||
$helpers = $View->loaded;
|
||||
$this->assertTrue(is_object($helpers['html']));
|
||||
$this->assertTrue(is_object($helpers['form']));
|
||||
$this->assertTrue(is_object($helpers['form']->Html));
|
||||
$this->assertTrue(is_object($helpers['ajax']->Html));
|
||||
|
||||
$this->PostsController->helpers = array('Html', 'Form', 'Ajax', 'TestPlugin.PluggedHelper');
|
||||
$View =& new TestView($this->PostsController);
|
||||
|
||||
$result = $View->_render($View->getViewFileName('index'), array());
|
||||
$this->assertEqual($result, 'posts index');
|
||||
|
||||
$helpers = $View->loaded;
|
||||
$this->assertTrue(is_object($helpers['html']));
|
||||
$this->assertTrue(is_object($helpers['form']));
|
||||
$this->assertTrue(is_object($helpers['form']->Html));
|
||||
$this->assertTrue(is_object($helpers['ajax']->Html));
|
||||
$this->assertTrue(is_object($helpers['pluggedHelper']->OtherHelper));
|
||||
|
||||
$this->assertTrue(is_object($View->Html));
|
||||
$this->assertTrue(is_object($View->Form));
|
||||
$this->assertTrue(is_object($View->Form->Html));
|
||||
$this->assertTrue(is_object($View->PluggedHelper->OtherHelper));
|
||||
$this->assertReference($View->Form, $View->loaded['form']);
|
||||
$this->assertReference($View->Html, $View->loaded['html']);
|
||||
$this->assertReference($View->PluggedHelper->OtherHelper, $View->loaded['otherHelper']);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRender method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRender() {
|
||||
$View =& new TestView($this->PostsController);
|
||||
$result = str_replace(array("\t", "\r\n", "\n"), "", $View->render('index'));
|
||||
|
||||
$this->assertPattern("/<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/><title>/", $result);
|
||||
$this->assertPattern("/<div id=\"content\">posts index<\/div>/", $result);
|
||||
$this->assertPattern("/<div id=\"content\">posts index<\/div>/", $result);
|
||||
|
||||
$this->PostsController->set('url', 'flash');
|
||||
$this->PostsController->set('message', 'yo what up');
|
||||
$this->PostsController->set('pause', 3);
|
||||
$this->PostsController->set('page_title', 'yo what up');
|
||||
|
||||
$View =& new TestView($this->PostsController);
|
||||
$result = str_replace(array("\t", "\r\n", "\n"), "", $View->render(false, 'flash'));
|
||||
|
||||
$this->assertPattern("/<title>yo what up<\/title>/", $result);
|
||||
$this->assertPattern("/<p><a href=\"flash\">yo what up<\/a><\/p>/", $result);
|
||||
|
||||
$this->assertTrue($View->render(false, 'flash'));
|
||||
|
||||
$this->PostsController->helpers = array('Session', 'Cache', 'Html');
|
||||
$this->PostsController->constructClasses();
|
||||
$this->PostsController->cacheAction = array('index' => 3600);
|
||||
$this->PostsController->params['action'] = 'index';
|
||||
Configure::write('Cache.check', true);
|
||||
|
||||
$View =& new TestView($this->PostsController);
|
||||
$result = str_replace(array("\t", "\r\n", "\n"), "", $View->render('index'));
|
||||
|
||||
$this->assertPattern("/<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/><title>/", $result);
|
||||
$this->assertPattern("/<div id=\"content\">posts index<\/div>/", $result);
|
||||
$this->assertPattern("/<div id=\"content\">posts index<\/div>/", $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test rendering layout with cache helper loaded
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRenderLayoutWithMockCacheHelper() {
|
||||
$_check = Configure::read('Cache.check');
|
||||
Configure::write('Cache.check', true);
|
||||
|
||||
$Controller =& new ViewPostsController();
|
||||
$Controller->cacheAction = '1 day';
|
||||
$View =& new View($Controller);
|
||||
$View->loaded['cache'] = new ViewTestMockCacheHelper();
|
||||
$View->loaded['cache']->expectCallCount('cache', 2);
|
||||
|
||||
$result = $View->render('index');
|
||||
$this->assertPattern('/posts index/', $result);
|
||||
|
||||
Configure::write('Cache.check', $_check);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that view vars can replace the local helper variables
|
||||
* and not overwrite the $this->Helper references
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testViewVarOverwritingLocalHelperVar() {
|
||||
$Controller =& new ViewPostsController();
|
||||
$Controller->helpers = array('Session', 'Html');
|
||||
$Controller->set('html', 'I am some test html');
|
||||
$View =& new View($Controller);
|
||||
$result = $View->render('helper_overwrite', false);
|
||||
|
||||
$this->assertPattern('/I am some test html/', $result);
|
||||
$this->assertPattern('/Test link/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testGetViewFileName method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testViewFileName() {
|
||||
$View =& new TestView($this->PostsController);
|
||||
|
||||
$result = $View->getViewFileName('index');
|
||||
$this->assertPattern('/posts(\/|\\\)index.ctp/', $result);
|
||||
|
||||
$result = $View->getViewFileName('/pages/home');
|
||||
$this->assertPattern('/pages(\/|\\\)home.ctp/', $result);
|
||||
|
||||
$result = $View->getViewFileName('../elements/test_element');
|
||||
$this->assertPattern('/elements(\/|\\\)test_element.ctp/', $result);
|
||||
|
||||
$result = $View->getViewFileName('../themed/test_theme/posts/index');
|
||||
$this->assertPattern('/themed(\/|\\\)test_theme(\/|\\\)posts(\/|\\\)index.ctp/', $result);
|
||||
|
||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'posts' . DS .'index.ctp';
|
||||
$result = $View->getViewFileName('../posts/index');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* testRenderCache method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testRenderCache() {
|
||||
$writable = is_writable(CACHE . 'views' . DS);
|
||||
if ($this->skipIf(!$writable, 'CACHE/views dir is not writable, cannot test renderCache. %s')) {
|
||||
return;
|
||||
}
|
||||
$view = 'test_view';
|
||||
$View =& new View($this->PostsController);
|
||||
$path = CACHE . 'views' . DS . 'view_cache_'.$view;
|
||||
|
||||
$cacheText = '<!--cachetime:'.time().'-->some cacheText';
|
||||
$f = fopen($path, 'w+');
|
||||
fwrite($f, $cacheText);
|
||||
fclose($f);
|
||||
|
||||
$result = $View->renderCache($path, '+1 second');
|
||||
$this->assertFalse($result);
|
||||
@unlink($path);
|
||||
|
||||
$cacheText = '<!--cachetime:'.(time() + 10).'-->some cacheText';
|
||||
$f = fopen($path, 'w+');
|
||||
fwrite($f, $cacheText);
|
||||
fclose($f);
|
||||
ob_start();
|
||||
$View->renderCache($path, '+1 second');
|
||||
$result = ob_get_clean();
|
||||
|
||||
$expected = 'some cacheText';
|
||||
$this->assertPattern('/^some cacheText/', $result);
|
||||
|
||||
@unlink($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that render() will remove the cake:nocache tags when only the cachehelper is present.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRenderStrippingNoCacheTagsOnlyCacheHelper() {
|
||||
Configure::write('Cache.check', false);
|
||||
$View =& new View($this->PostsController);
|
||||
$View->set(array('superman' => 'clark', 'variable' => 'var'));
|
||||
$View->helpers = array('Html', 'Form', 'Cache');
|
||||
$View->layout = 'cache_layout';
|
||||
$result = $View->render('index');
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that render() will remove the cake:nocache tags when only the Cache.check is true.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testRenderStrippingNoCacheTagsOnlyCacheCheck() {
|
||||
Configure::write('Cache.check', true);
|
||||
$View =& new View($this->PostsController);
|
||||
$View->set(array('superman' => 'clark', 'variable' => 'var'));
|
||||
$View->helpers = array('Html', 'Form');
|
||||
$View->layout = 'cache_layout';
|
||||
$result = $View->render('index');
|
||||
$this->assertNoPattern('/cake:nocache/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testRenderNocache method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
|
||||
/* This is a new test case for a pending enhancement
|
||||
function testRenderNocache() {
|
||||
$this->PostsController->helpers = array('Cache', 'Html');
|
||||
$this->PostsController->constructClasses();
|
||||
$this->PostsController->cacheAction = 21600;
|
||||
$this->PostsController->here = '/posts/nocache_multiple_element';
|
||||
$this->PostsController->action = 'nocache_multiple_element';
|
||||
$this->PostsController->nocache_multiple_element();
|
||||
Configure::write('Cache.check', true);
|
||||
Configure::write('Cache.disable', false);
|
||||
|
||||
$filename = CACHE . 'views' . DS . 'posts_nocache_multiple_element.php';
|
||||
|
||||
$View = new TestView($this->PostsController);
|
||||
$View->render();
|
||||
|
||||
ob_start();
|
||||
$View->renderCache($filename, getMicroTime());
|
||||
$result = ob_get_clean();
|
||||
@unlink($filename);
|
||||
|
||||
$this->assertPattern('/php echo \$foo;/', $result);
|
||||
$this->assertPattern('/php echo \$bar;/', $result);
|
||||
$this->assertPattern('/php \$barfoo = \'in sub2\';/', $result);
|
||||
$this->assertPattern('/php echo \$barfoo;/', $result);
|
||||
$this->assertPattern('/printing: "in sub2"/', $result);
|
||||
$this->assertPattern('/php \$foobar = \'in sub1\';/', $result);
|
||||
$this->assertPattern('/php echo \$foobar;/', $result);
|
||||
$this->assertPattern('/printing: "in sub1"/', $result);
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* testSet method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testSet() {
|
||||
$View =& new TestView($this->PostsController);
|
||||
$View->viewVars = array();
|
||||
$View->set('somekey', 'someValue');
|
||||
$this->assertIdentical($View->viewVars, array('somekey' => 'someValue'));
|
||||
$this->assertIdentical($View->getVars(), array('somekey'));
|
||||
|
||||
$View->viewVars = array();
|
||||
$keys = array('key1', 'key2');
|
||||
$values = array('value1', 'value2');
|
||||
$View->set($keys, $values);
|
||||
$this->assertIdentical($View->viewVars, array('key1' => 'value1', 'key2' => 'value2'));
|
||||
$this->assertIdentical($View->getVars(), array('key1', 'key2'));
|
||||
$this->assertIdentical($View->getVar('key1'), 'value1');
|
||||
$this->assertNull($View->getVar('key3'));
|
||||
|
||||
$View->set(array('key3' => 'value3'));
|
||||
$this->assertIdentical($View->getVar('key3'), 'value3');
|
||||
|
||||
$View->viewVars = array();
|
||||
$View->set(array(3 => 'three', 4 => 'four'));
|
||||
$View->set(array(1 => 'one', 2 => 'two'));
|
||||
$expected = array(3 => 'three', 4 => 'four', 1 => 'one', 2 => 'two');
|
||||
$this->assertEqual($View->viewVars, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testEntityReference method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testEntityReference() {
|
||||
$View =& new TestView($this->PostsController);
|
||||
$View->model = 'Post';
|
||||
$View->field = 'title';
|
||||
$this->assertEqual($View->entity(), array('Post', 'title'));
|
||||
|
||||
$View->association = 'Comment';
|
||||
$View->field = 'user_id';
|
||||
$this->assertEqual($View->entity(), array('Comment', 'user_id'));
|
||||
|
||||
$View->model = 0;
|
||||
$View->association = null;
|
||||
$View->field = 'Node';
|
||||
$View->fieldSuffix = 'title';
|
||||
$View->entityPath = '0.Node.title';
|
||||
$expected = array(0, 'Node', 'title');
|
||||
$this->assertEqual($View->entity(), $expected);
|
||||
|
||||
$View->model = 'HelperTestTag';
|
||||
$View->field = 'HelperTestTag';
|
||||
$View->modelId = null;
|
||||
$View->association = null;
|
||||
$View->fieldSuffix = null;
|
||||
$View->entityPath = 'HelperTestTag';
|
||||
$expected = array('HelperTestTag', 'HelperTestTag');
|
||||
$this->assertEqual($View->entity(), $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* testBadExt method
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function testBadExt() {
|
||||
$this->PostsController->action = 'something';
|
||||
$this->PostsController->ext = '.whatever';
|
||||
restore_error_handler();
|
||||
ob_start();
|
||||
$View = new TestView($this->PostsController);
|
||||
$View->render('this_is_missing');
|
||||
$result = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean());
|
||||
set_error_handler('simpleTestErrorHandler');
|
||||
|
||||
$this->assertPattern("/<em>PostsController::<\/em><em>something\(\)<\/em>/", $result);
|
||||
$this->assertPattern("/posts(\/|\\\)this_is_missing.whatever/", $result);
|
||||
|
||||
$this->PostsController->ext = ".bad";
|
||||
$View =& new TestView($this->PostsController);
|
||||
$result = str_replace(array("\t", "\r\n", "\n"), "", $View->render('index'));
|
||||
|
||||
$this->assertPattern("/<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/><title>/", $result);
|
||||
$this->assertPattern("/<div id=\"content\">posts index<\/div>/", $result);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user