PageRenderTime 55ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/code/ryzom/tools/server/www/webtt/cake/tests/cases/libs/view/helper.test.php

https://bitbucket.org/mattraykowski/ryzomcore_demoshard
PHP | 804 lines | 486 code | 118 blank | 200 comment | 2 complexity | 0cd751b60f63358e558716d903797c3a MD5 | raw file
Possible License(s): AGPL-3.0, GPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * HelperTest file
  4. *
  5. * PHP versions 4 and 5
  6. *
  7. * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
  8. * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
  9. *
  10. * Licensed under The Open Group Test Suite License
  11. * Redistributions of files must retain the above copyright notice.
  12. *
  13. * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
  14. * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
  15. * @package cake
  16. * @subpackage cake.tests.cases.libs
  17. * @since CakePHP(tm) v 1.2.0.4206
  18. * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  19. */
  20. App::import('Core', array('View', 'Helper'));
  21. /**
  22. * HelperTestPost class
  23. *
  24. * @package cake
  25. * @subpackage cake.tests.cases.libs.view
  26. */
  27. class HelperTestPost extends Model {
  28. /**
  29. * useTable property
  30. *
  31. * @var bool false
  32. * @access public
  33. */
  34. var $useTable = false;
  35. /**
  36. * schema method
  37. *
  38. * @access public
  39. * @return void
  40. */
  41. function schema() {
  42. $this->_schema = array(
  43. 'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  44. 'title' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
  45. 'body' => array('type' => 'string', 'null' => true, 'default' => '', 'length' => ''),
  46. 'number' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  47. 'date' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
  48. 'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
  49. 'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
  50. );
  51. return $this->_schema;
  52. }
  53. /**
  54. * hasAndBelongsToMany property
  55. *
  56. * @var array
  57. * @access public
  58. */
  59. var $hasAndBelongsToMany = array('HelperTestTag'=> array('with' => 'HelperTestPostsTag'));
  60. }
  61. /**
  62. * HelperTestComment class
  63. *
  64. * @package cake
  65. * @subpackage cake.tests.cases.libs.view
  66. */
  67. class HelperTestComment extends Model {
  68. /**
  69. * useTable property
  70. *
  71. * @var bool false
  72. * @access public
  73. */
  74. var $useTable = false;
  75. /**
  76. * schema method
  77. *
  78. * @access public
  79. * @return void
  80. */
  81. function schema() {
  82. $this->_schema = array(
  83. 'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  84. 'author_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  85. 'title' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
  86. 'body' => array('type' => 'string', 'null' => true, 'default' => '', 'length' => ''),
  87. 'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
  88. 'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
  89. );
  90. return $this->_schema;
  91. }
  92. }
  93. /**
  94. * HelperTestTag class
  95. *
  96. * @package cake
  97. * @subpackage cake.tests.cases.libs.view
  98. */
  99. class HelperTestTag extends Model {
  100. /**
  101. * useTable property
  102. *
  103. * @var bool false
  104. * @access public
  105. */
  106. var $useTable = false;
  107. /**
  108. * schema method
  109. *
  110. * @access public
  111. * @return void
  112. */
  113. function schema() {
  114. $this->_schema = array(
  115. 'id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  116. 'name' => array('type' => 'string', 'null' => false, 'default' => '', 'length' => '255'),
  117. 'created' => array('type' => 'date', 'null' => true, 'default' => '', 'length' => ''),
  118. 'modified' => array('type' => 'datetime', 'null' => true, 'default' => '', 'length' => null)
  119. );
  120. return $this->_schema;
  121. }
  122. }
  123. /**
  124. * HelperTestPostsTag class
  125. *
  126. * @package cake
  127. * @subpackage cake.tests.cases.libs.view
  128. */
  129. class HelperTestPostsTag extends Model {
  130. /**
  131. * useTable property
  132. *
  133. * @var bool false
  134. * @access public
  135. */
  136. var $useTable = false;
  137. /**
  138. * schema method
  139. *
  140. * @access public
  141. * @return void
  142. */
  143. function schema() {
  144. $this->_schema = array(
  145. 'helper_test_post_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  146. 'helper_test_tag_id' => array('type' => 'integer', 'null' => false, 'default' => '', 'length' => '8'),
  147. );
  148. return $this->_schema;
  149. }
  150. }
  151. class TestHelper extends Helper {
  152. /**
  153. * expose a method as public
  154. *
  155. * @param string $options
  156. * @param string $exclude
  157. * @param string $insertBefore
  158. * @param string $insertAfter
  159. * @return void
  160. */
  161. function parseAttributes($options, $exclude = null, $insertBefore = ' ', $insertAfter = null) {
  162. return $this->_parseAttributes($options, $exclude, $insertBefore, $insertAfter);
  163. }
  164. }
  165. /**
  166. * HelperTest class
  167. *
  168. * @package cake
  169. * @subpackage cake.tests.cases.libs
  170. */
  171. class HelperTest extends CakeTestCase {
  172. /**
  173. * setUp method
  174. *
  175. * @access public
  176. * @return void
  177. */
  178. function setUp() {
  179. ClassRegistry::flush();
  180. Router::reload();
  181. $null = null;
  182. $this->View = new View($null);
  183. $this->Helper = new Helper();
  184. ClassRegistry::addObject('HelperTestPost', new HelperTestPost());
  185. ClassRegistry::addObject('HelperTestComment', new HelperTestComment());
  186. ClassRegistry::addObject('HelperTestTag', new HelperTestTag());
  187. }
  188. /**
  189. * tearDown method
  190. *
  191. * @access public
  192. * @return void
  193. */
  194. function tearDown() {
  195. unset($this->Helper, $this->View);
  196. ClassRegistry::flush();
  197. }
  198. /**
  199. * testFormFieldNameParsing method
  200. *
  201. * @access public
  202. * @return void
  203. */
  204. function testSetEntity() {
  205. // PHP4 reference hack
  206. ClassRegistry::removeObject('view');
  207. ClassRegistry::addObject('view', $this->View);
  208. $this->Helper->setEntity('HelperTestPost.id');
  209. $this->assertFalse($this->View->modelScope);
  210. $this->assertEqual($this->View->model, 'HelperTestPost');
  211. $this->assertEqual($this->View->field, 'id');
  212. $this->assertEqual($this->View->modelId, null);
  213. $this->assertEqual($this->View->association, null);
  214. $this->Helper->setEntity('HelperTestComment.body');
  215. $this->assertFalse($this->View->modelScope);
  216. $this->assertEqual($this->View->model, 'HelperTestComment');
  217. $this->assertEqual($this->View->field, 'body');
  218. $this->assertEqual($this->View->modelId, null);
  219. $this->assertEqual($this->View->association, null);
  220. $this->assertEqual($this->View->fieldSuffix, null);
  221. $this->Helper->setEntity('HelperTestPost', true);
  222. $this->assertTrue($this->View->modelScope);
  223. $this->assertEqual($this->View->model, 'HelperTestPost');
  224. $this->assertEqual($this->View->field, null);
  225. $this->assertEqual($this->View->modelId, null);
  226. $this->assertEqual($this->View->association, null);
  227. $this->assertEqual($this->View->fieldSuffix, null);
  228. $this->Helper->setEntity('_Token.fields');
  229. $this->assertTrue($this->View->modelScope);
  230. $this->assertEqual($this->View->model, 'HelperTestPost');
  231. $this->assertEqual($this->View->field, 'fields');
  232. $this->assertEqual($this->View->modelId, null);
  233. $this->assertEqual($this->View->association, '_Token');
  234. $this->assertEqual($this->View->fieldSuffix, null);
  235. $this->Helper->setEntity('id');
  236. $this->assertTrue($this->View->modelScope);
  237. $this->assertEqual($this->View->model, 'HelperTestPost');
  238. $this->assertEqual($this->View->field, 'id');
  239. $this->assertEqual($this->View->modelId, null);
  240. $this->assertEqual($this->View->association, null);
  241. $this->assertEqual($this->View->fieldSuffix, null);
  242. $this->Helper->setEntity('HelperTestComment.body');
  243. $this->assertTrue($this->View->modelScope);
  244. $this->assertEqual($this->View->model, 'HelperTestPost');
  245. $this->assertEqual($this->View->field, 'body');
  246. $this->assertEqual($this->View->modelId, null);
  247. $this->assertEqual($this->View->association, 'HelperTestComment');
  248. $this->assertEqual($this->View->fieldSuffix, null);
  249. $this->Helper->setEntity('body');
  250. $this->assertTrue($this->View->modelScope);
  251. $this->assertEqual($this->View->model, 'HelperTestPost');
  252. $this->assertEqual($this->View->field, 'body');
  253. $this->assertEqual($this->View->modelId, null);
  254. $this->assertEqual($this->View->association, null);
  255. $this->assertEqual($this->View->fieldSuffix, null);
  256. $this->Helper->setEntity('Something.else');
  257. $this->assertTrue($this->View->modelScope);
  258. $this->assertEqual($this->View->model, 'HelperTestPost');
  259. $this->assertEqual($this->View->field, 'else');
  260. $this->assertEqual($this->View->modelId, false);
  261. $this->assertEqual($this->View->association, 'Something');
  262. $this->assertEqual($this->View->fieldSuffix, '');
  263. $this->Helper->setEntity('5.id');
  264. $this->assertTrue($this->View->modelScope);
  265. $this->assertEqual($this->View->model, 'HelperTestPost');
  266. $this->assertEqual($this->View->field, 'id');
  267. $this->assertEqual($this->View->modelId, '5');
  268. $this->assertEqual($this->View->association, null);
  269. $this->assertEqual($this->View->fieldSuffix, null);
  270. $this->assertEqual($this->View->entity(), array('HelperTestPost', 5, 'id'));
  271. $this->Helper->setEntity('0.id');
  272. $this->assertTrue($this->View->modelScope);
  273. $this->assertEqual($this->View->model, 'HelperTestPost');
  274. $this->assertEqual($this->View->field, 'id');
  275. $this->assertEqual($this->View->modelId, '0');
  276. $this->assertEqual($this->View->association, null);
  277. $this->assertEqual($this->View->fieldSuffix, null);
  278. $this->assertEqual($this->View->entity(), array('HelperTestPost', 0, 'id'));
  279. $this->Helper->setEntity('5.created.month');
  280. $this->assertTrue($this->View->modelScope);
  281. $this->assertEqual($this->View->model, 'HelperTestPost');
  282. $this->assertEqual($this->View->field, 'created');
  283. $this->assertEqual($this->View->modelId, '5');
  284. $this->assertEqual($this->View->association, null);
  285. $this->assertEqual($this->View->fieldSuffix, 'month');
  286. $this->Helper->setEntity('HelperTestComment.5.id');
  287. $this->assertTrue($this->View->modelScope);
  288. $this->assertEqual($this->View->model, 'HelperTestPost');
  289. $this->assertEqual($this->View->field, 'id');
  290. $this->assertEqual($this->View->modelId, '5');
  291. $this->assertEqual($this->View->association, 'HelperTestComment');
  292. $this->assertEqual($this->View->fieldSuffix, null);
  293. $this->Helper->setEntity('HelperTestComment.id.time');
  294. $this->assertTrue($this->View->modelScope);
  295. $this->assertEqual($this->View->model, 'HelperTestPost');
  296. $this->assertEqual($this->View->field, 'id');
  297. $this->assertEqual($this->View->modelId, null);
  298. $this->assertEqual($this->View->association, 'HelperTestComment');
  299. $this->assertEqual($this->View->fieldSuffix, 'time');
  300. $this->Helper->setEntity('HelperTestTag');
  301. $this->assertTrue($this->View->modelScope);
  302. $this->assertEqual($this->View->model, 'HelperTestPost');
  303. $this->assertEqual($this->View->field, 'HelperTestTag');
  304. $this->assertEqual($this->View->modelId, '');
  305. $this->assertEqual($this->View->association, 'HelperTestTag');
  306. $this->assertEqual($this->View->fieldSuffix, '');
  307. $this->Helper->setEntity(null);
  308. $this->Helper->setEntity('ModelThatDoesntExist.field_that_doesnt_exist');
  309. $this->assertFalse($this->View->modelScope);
  310. $this->assertEqual($this->View->model, 'ModelThatDoesntExist');
  311. $this->assertEqual($this->View->field, 'field_that_doesnt_exist');
  312. $this->assertEqual($this->View->modelId, null);
  313. $this->assertEqual($this->View->association, null);
  314. $this->assertEqual($this->View->fieldSuffix, null);
  315. }
  316. /**
  317. * test that 'view' doesn't break things.
  318. *
  319. * @return void
  320. */
  321. function testSetEntityWithView() {
  322. $this->assertNull($this->Helper->setEntity('Allow.view.group_id'));
  323. $this->assertNull($this->Helper->setEntity('Allow.view'));
  324. $this->assertNull($this->Helper->setEntity('View.view'));
  325. }
  326. /**
  327. * test getting values from Helper
  328. *
  329. * @return void
  330. */
  331. function testValue() {
  332. $this->Helper->data = array('fullname' => 'This is me');
  333. $this->Helper->setEntity('fullname');
  334. $result = $this->Helper->value('fullname');
  335. $this->assertEqual($result, 'This is me');
  336. $this->Helper->data = array('Post' => array('name' => 'First Post'));
  337. $this->Helper->setEntity('Post.name');
  338. $result = $this->Helper->value('Post.name');
  339. $this->assertEqual($result, 'First Post');
  340. $this->Helper->data = array('Post' => array(2 => array('name' => 'First Post')));
  341. $this->Helper->setEntity('Post.2.name');
  342. $result = $this->Helper->value('Post.2.name');
  343. $this->assertEqual($result, 'First Post');
  344. $this->Helper->data = array('Post' => array(2 => array('created' => array('year' => '2008'))));
  345. $this->Helper->setEntity('Post.2.created');
  346. $result = $this->Helper->value('Post.2.created');
  347. $this->assertEqual($result, array('year' => '2008'));
  348. $this->Helper->data = array('Post' => array(2 => array('created' => array('year' => '2008'))));
  349. $this->Helper->setEntity('Post.2.created.year');
  350. $result = $this->Helper->value('Post.2.created.year');
  351. $this->assertEqual($result, '2008');
  352. $this->Helper->data = array('HelperTestTag' => array('HelperTestTag' => ''));
  353. $this->Helper->setEntity('HelperTestTag.HelperTestTag');
  354. $result = $this->Helper->value('HelperTestTag.HelperTestTag');
  355. $this->assertEqual($result, '');
  356. $this->Helper->data = array('HelperTestTag' => array('HelperTestTag' => array(2, 3, 4)));
  357. $this->Helper->setEntity('HelperTestTag.HelperTestTag');
  358. $result = $this->Helper->value('HelperTestTag.HelperTestTag');
  359. $this->assertEqual($result, array(2, 3, 4));
  360. $this->Helper->data = array(
  361. 'HelperTestTag' => array(
  362. array('id' => 3),
  363. array('id' => 5)
  364. )
  365. );
  366. $this->Helper->setEntity('HelperTestTag.HelperTestTag');
  367. $result = $this->Helper->value('HelperTestTag.HelperTestTag');
  368. $this->assertEqual($result, array(3 => 3, 5 => 5));
  369. $this->Helper->data = array('zero' => 0);
  370. $this->Helper->setEntity('zero');
  371. $result = $this->Helper->value(array('default' => 'something'), 'zero');
  372. $this->assertEqual($result, array('value' => 0));
  373. $this->Helper->data = array('zero' => '0');
  374. $result = $this->Helper->value(array('default' => 'something'), 'zero');
  375. $this->assertEqual($result, array('value' => '0'));
  376. $this->Helper->setEntity('inexistent');
  377. $result = $this->Helper->value(array('default' => 'something'), 'inexistent');
  378. $this->assertEqual($result, array('value' => 'something'));
  379. }
  380. /**
  381. * Ensure HTML escaping of url params. So link addresses are valid and not exploited
  382. *
  383. * @return void
  384. */
  385. function testUrlConversion() {
  386. $result = $this->Helper->url('/controller/action/1');
  387. $this->assertEqual($result, '/controller/action/1');
  388. $result = $this->Helper->url('/controller/action/1?one=1&two=2');
  389. $this->assertEqual($result, '/controller/action/1?one=1&amp;two=2');
  390. $result = $this->Helper->url(array('controller' => 'posts', 'action' => 'index', 'page' => '1" onclick="alert(\'XSS\');"'));
  391. $this->assertEqual($result, "/posts/index/page:1&quot; onclick=&quot;alert(&#039;XSS&#039;);&quot;");
  392. $result = $this->Helper->url('/controller/action/1/param:this+one+more');
  393. $this->assertEqual($result, '/controller/action/1/param:this+one+more');
  394. $result = $this->Helper->url('/controller/action/1/param:this%20one%20more');
  395. $this->assertEqual($result, '/controller/action/1/param:this%20one%20more');
  396. $result = $this->Helper->url('/controller/action/1/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24');
  397. $this->assertEqual($result, '/controller/action/1/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24');
  398. $result = $this->Helper->url(array(
  399. 'controller' => 'posts', 'action' => 'index', 'param' => '%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24'
  400. ));
  401. $this->assertEqual($result, "/posts/index/param:%7Baround%20here%7D%5Bthings%5D%5Bare%5D%24%24");
  402. $result = $this->Helper->url(array(
  403. 'controller' => 'posts', 'action' => 'index', 'page' => '1',
  404. '?' => array('one' => 'value', 'two' => 'value', 'three' => 'purple')
  405. ));
  406. $this->assertEqual($result, "/posts/index/page:1?one=value&amp;two=value&amp;three=purple");
  407. }
  408. /**
  409. * test assetTimestamp application
  410. *
  411. * @return void
  412. */
  413. function testAssetTimestamp() {
  414. $_timestamp = Configure::read('Asset.timestamp');
  415. $_debug = Configure::read('debug');
  416. Configure::write('Asset.timestamp', false);
  417. $result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
  418. $this->assertEqual($result, CSS_URL . 'cake.generic.css');
  419. Configure::write('Asset.timestamp', true);
  420. Configure::write('debug', 0);
  421. $result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
  422. $this->assertEqual($result, CSS_URL . 'cake.generic.css');
  423. Configure::write('Asset.timestamp', true);
  424. Configure::write('debug', 2);
  425. $result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
  426. $this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
  427. Configure::write('Asset.timestamp', 'force');
  428. Configure::write('debug', 0);
  429. $result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css');
  430. $this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
  431. $result = $this->Helper->assetTimestamp(CSS_URL . 'cake.generic.css?someparam');
  432. $this->assertEqual($result, CSS_URL . 'cake.generic.css?someparam');
  433. $this->Helper->webroot = '/some/dir/';
  434. $result = $this->Helper->assetTimestamp('/some/dir/' . CSS_URL . 'cake.generic.css');
  435. $this->assertPattern('/' . preg_quote(CSS_URL . 'cake.generic.css?', '/') . '[0-9]+/', $result);
  436. Configure::write('debug', $_debug);
  437. Configure::write('Asset.timestamp', $_timestamp);
  438. }
  439. /**
  440. * test assetTimestamp with plugins and themes
  441. *
  442. * @return void
  443. */
  444. function testAssetTimestampPluginsAndThemes() {
  445. $_timestamp = Configure::read('Asset.timestamp');
  446. Configure::write('Asset.timestamp', 'force');
  447. App::build(array(
  448. 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS),
  449. 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS),
  450. ));
  451. $result = $this->Helper->assetTimestamp('/test_plugin/css/test_plugin_asset.css');
  452. $this->assertPattern('#/test_plugin/css/test_plugin_asset.css\?[0-9]+$#', $result, 'Missing timestamp plugin');
  453. $result = $this->Helper->assetTimestamp('/test_plugin/css/i_dont_exist.css');
  454. $this->assertPattern('#/test_plugin/css/i_dont_exist.css\?$#', $result, 'No error on missing file');
  455. $result = $this->Helper->assetTimestamp('/theme/test_theme/js/theme.js');
  456. $this->assertPattern('#/theme/test_theme/js/theme.js\?[0-9]+$#', $result, 'Missing timestamp theme');
  457. $result = $this->Helper->assetTimestamp('/theme/test_theme/js/non_existant.js');
  458. $this->assertPattern('#/theme/test_theme/js/non_existant.js\?$#', $result, 'No error on missing file');
  459. App::build();
  460. Configure::write('Asset.timestamp', $_timestamp);
  461. }
  462. /**
  463. * testFieldsWithSameName method
  464. *
  465. * @access public
  466. * @return void
  467. */
  468. function testFieldsWithSameName() {
  469. // PHP4 reference hack
  470. ClassRegistry::removeObject('view');
  471. ClassRegistry::addObject('view', $this->View);
  472. $this->Helper->setEntity('HelperTestTag', true);
  473. $this->Helper->setEntity('HelperTestTag.id');
  474. $this->assertEqual($this->View->model, 'HelperTestTag');
  475. $this->assertEqual($this->View->field, 'id');
  476. $this->assertEqual($this->View->modelId, null);
  477. $this->assertEqual($this->View->association, null);
  478. $this->assertEqual($this->View->fieldSuffix, null);
  479. $this->Helper->setEntity('My.id');
  480. $this->assertEqual($this->View->model, 'HelperTestTag');
  481. $this->assertEqual($this->View->field, 'id');
  482. $this->assertEqual($this->View->modelId, null);
  483. $this->assertEqual($this->View->association, 'My');
  484. $this->assertEqual($this->View->fieldSuffix, null);
  485. $this->Helper->setEntity('MyOther.id');
  486. $this->assertEqual($this->View->model, 'HelperTestTag');
  487. $this->assertEqual($this->View->field, 'id');
  488. $this->assertEqual($this->View->modelId, null);
  489. $this->assertEqual($this->View->association, 'MyOther');
  490. $this->assertEqual($this->View->fieldSuffix, null);
  491. }
  492. /**
  493. * testFieldSameAsModel method
  494. *
  495. * @access public
  496. * @return void
  497. */
  498. function testFieldSameAsModel() {
  499. // PHP4 reference hack
  500. ClassRegistry::removeObject('view');
  501. ClassRegistry::addObject('view', $this->View);
  502. $this->Helper->setEntity('HelperTestTag', true);
  503. $this->Helper->setEntity('helper_test_post');
  504. $this->assertEqual($this->View->model, 'HelperTestTag');
  505. $this->assertEqual($this->View->field, 'helper_test_post');
  506. $this->assertEqual($this->View->modelId, null);
  507. $this->assertEqual($this->View->association, null);
  508. $this->assertEqual($this->View->fieldSuffix, null);
  509. $this->Helper->setEntity('HelperTestTag');
  510. $this->assertEqual($this->View->model, 'HelperTestTag');
  511. $this->assertEqual($this->View->field, 'HelperTestTag');
  512. $this->assertEqual($this->View->modelId, null);
  513. $this->assertEqual($this->View->association, null);
  514. $this->assertEqual($this->View->fieldSuffix, null);
  515. $this->assertEqual($this->View->entityPath, 'HelperTestTag');
  516. }
  517. /**
  518. * testFieldSuffixForDate method
  519. *
  520. * @access public
  521. * @return void
  522. */
  523. function testFieldSuffixForDate() {
  524. // PHP4 reference hack
  525. ClassRegistry::removeObject('view');
  526. ClassRegistry::addObject('view', $this->View);
  527. $this->Helper->setEntity('HelperTestPost', true);
  528. $this->assertEqual($this->View->model, 'HelperTestPost');
  529. $this->assertEqual($this->View->field, null);
  530. $this->assertEqual($this->View->modelId, null);
  531. $this->assertEqual($this->View->association, null);
  532. $this->assertEqual($this->View->fieldSuffix, null);
  533. $this->Helper->setEntity('date.month');
  534. $this->assertEqual($this->View->model, 'HelperTestPost');
  535. $this->assertEqual($this->View->field, 'date');
  536. $this->assertEqual($this->View->modelId, null);
  537. $this->assertEqual($this->View->association, null);
  538. $this->assertEqual($this->View->fieldSuffix, 'month');
  539. }
  540. /**
  541. * testMulitDimensionValue method
  542. *
  543. * @access public
  544. * @return void
  545. */
  546. function testMulitDimensionValue() {
  547. $this->Helper->data = array();
  548. for ($i = 0; $i < 2; $i++) {
  549. $this->Helper->data['Model'][$i] = 'what';
  550. $result[] = $this->Helper->value("Model.{$i}");
  551. $this->Helper->data['Model'][$i] = array();
  552. for ($j = 0; $j < 2; $j++) {
  553. $this->Helper->data['Model'][$i][$j] = 'how';
  554. $result[] = $this->Helper->value("Model.{$i}.{$j}");
  555. }
  556. }
  557. $expected = array('what', 'how', 'how', 'what', 'how', 'how');
  558. $this->assertEqual($result, $expected);
  559. $this->Helper->data['HelperTestComment']['5']['id'] = 'ok';
  560. $result = $this->Helper->value('HelperTestComment.5.id');
  561. $this->assertEqual($result, 'ok');
  562. $this->Helper->setEntity('HelperTestPost', true);
  563. $this->Helper->data['HelperTestPost']['5']['created']['month'] = '10';
  564. $result = $this->Helper->value('5.created.month');
  565. $this->assertEqual($result, 10);
  566. $this->Helper->data['HelperTestPost']['0']['id'] = 100;
  567. $result = $this->Helper->value('0.id');
  568. $this->assertEqual($result, 100);
  569. }
  570. /**
  571. * testClean method
  572. *
  573. * @access public
  574. * @return void
  575. */
  576. function testClean() {
  577. $result = $this->Helper->clean(array());
  578. $this->assertEqual($result, null);
  579. $result = $this->Helper->clean(array('<script>with something</script>', '<applet>something else</applet>'));
  580. $this->assertEqual($result, array('with something', 'something else'));
  581. $result = $this->Helper->clean('<script>with something</script>');
  582. $this->assertEqual($result, 'with something');
  583. $result = $this->Helper->clean('<script type="text/javascript">alert("ruined");</script>');
  584. $this->assertNoPattern('#</*script#', $result);
  585. $result = $this->Helper->clean("<script \ntype=\"text/javascript\">\n\talert('ruined');\n\n\t\t</script>");
  586. $this->assertNoPattern('#</*script#', $result);
  587. $result = $this->Helper->clean('<body/onload=do(/something/)>');
  588. $this->assertEqual($result, '<body/>');
  589. $result = $this->Helper->clean('&lt;script&gt;alert(document.cookie)&lt;/script&gt;');
  590. $this->assertEqual($result, '&amp;lt;script&amp;gt;alert(document.cookie)&amp;lt;/script&amp;gt;');
  591. }
  592. /**
  593. * testMultiDimensionalField method
  594. *
  595. * @access public
  596. * @return void
  597. */
  598. function testMultiDimensionalField() {
  599. // PHP4 reference hack
  600. ClassRegistry::removeObject('view');
  601. ClassRegistry::addObject('view', $this->View);
  602. $this->Helper->setEntity('HelperTestPost', true);
  603. $this->Helper->setEntity('HelperTestPost.2.HelperTestComment.1.title');
  604. $this->assertEqual($this->View->model, 'HelperTestPost');
  605. $this->assertEqual($this->View->association, 'HelperTestComment');
  606. $this->assertEqual($this->View->modelId,2);
  607. $this->assertEqual($this->View->field, 'title');
  608. $this->Helper->setEntity('HelperTestPost.1.HelperTestComment.1.HelperTestTag.1.created');
  609. $this->assertEqual($this->View->field,'created');
  610. $this->assertEqual($this->View->association,'HelperTestTag');
  611. $this->assertEqual($this->View->modelId,1);
  612. $this->Helper->setEntity('HelperTestPost.0.HelperTestComment.1.HelperTestTag.1.fake');
  613. $this->assertEqual($this->View->model,'HelperTestPost');
  614. $this->assertEqual($this->View->association,'HelperTestTag');
  615. $this->assertEqual($this->View->field,null);
  616. $this->Helper->setEntity('1.HelperTestComment.1.HelperTestTag.created.year');
  617. $this->assertEqual($this->View->model,'HelperTestPost');
  618. $this->assertEqual($this->View->association,'HelperTestTag');
  619. $this->assertEqual($this->View->field,'created');
  620. $this->assertEqual($this->View->modelId,1);
  621. $this->assertEqual($this->View->fieldSuffix,'year');
  622. $this->Helper->data['HelperTestPost'][2]['HelperTestComment'][1]['title'] = 'My Title';
  623. $result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.title');
  624. $this->assertEqual($result,'My Title');
  625. $this->Helper->data['HelperTestPost'][2]['HelperTestComment'][1]['created']['year'] = 2008;
  626. $result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.created.year');
  627. $this->assertEqual($result,2008);
  628. $this->Helper->data[2]['HelperTestComment'][1]['created']['year'] = 2008;
  629. $result = $this->Helper->value('HelperTestPost.2.HelperTestComment.1.created.year');
  630. $this->assertEqual($result,2008);
  631. $this->Helper->data['HelperTestPost']['title'] = 'My Title';
  632. $result = $this->Helper->value('title');
  633. $this->assertEqual($result,'My Title');
  634. $this->Helper->data['My']['title'] = 'My Title';
  635. $result = $this->Helper->value('My.title');
  636. $this->assertEqual($result,'My Title');
  637. }
  638. function testWebrootPaths() {
  639. $this->Helper->webroot = '/';
  640. $result = $this->Helper->webroot('/img/cake.power.gif');
  641. $expected = '/img/cake.power.gif';
  642. $this->assertEqual($result, $expected);
  643. $this->Helper->theme = 'test_theme';
  644. App::build(array(
  645. 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
  646. ));
  647. $result = $this->Helper->webroot('/img/cake.power.gif');
  648. $expected = '/theme/test_theme/img/cake.power.gif';
  649. $this->assertEqual($result, $expected);
  650. $result = $this->Helper->webroot('/img/test.jpg');
  651. $expected = '/theme/test_theme/img/test.jpg';
  652. $this->assertEqual($result, $expected);
  653. $webRoot = Configure::read('App.www_root');
  654. Configure::write('App.www_root', TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'webroot' . DS);
  655. $result = $this->Helper->webroot('/img/cake.power.gif');
  656. $expected = '/theme/test_theme/img/cake.power.gif';
  657. $this->assertEqual($result, $expected);
  658. $result = $this->Helper->webroot('/img/test.jpg');
  659. $expected = '/theme/test_theme/img/test.jpg';
  660. $this->assertEqual($result, $expected);
  661. $result = $this->Helper->webroot('/img/cake.icon.gif');
  662. $expected = '/img/cake.icon.gif';
  663. $this->assertEqual($result, $expected);
  664. $result = $this->Helper->webroot('/img/cake.icon.gif?some=param');
  665. $expected = '/img/cake.icon.gif?some=param';
  666. $this->assertEqual($result, $expected);
  667. Configure::write('App.www_root', $webRoot);
  668. }
  669. /**
  670. * test parsing attributes.
  671. *
  672. * @return void
  673. */
  674. function testParseAttributeCompact() {
  675. $helper =& new TestHelper();
  676. $compact = array('compact', 'checked', 'declare', 'readonly', 'disabled',
  677. 'selected', 'defer', 'ismap', 'nohref', 'noshade', 'nowrap', 'multiple', 'noresize');
  678. foreach ($compact as $attribute) {
  679. foreach (array('true', true, 1, '1', $attribute) as $value) {
  680. $attrs = array($attribute => $value);
  681. $expected = ' ' . $attribute . '="' . $attribute . '"';
  682. $this->assertEqual($helper->parseAttributes($attrs), $expected, '%s Failed on ' . $value);
  683. }
  684. }
  685. }
  686. }