PageRenderTime 22ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/test/UrlHandler_Simple_Test.php

http://github.com/ethna/ethna
PHP | 268 lines | 179 code | 41 blank | 48 comment | 2 complexity | 8b6ac92f42e049c64b955791f43f37cc MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * UrlHandler_Simple_Test.php
  4. */
  5. require_once 'Ethna/class/UrlHandler/Simple.php';
  6. /**
  7. * Ethna_UrlHandler??????????
  8. *
  9. * @author Keisuke SATO <riaf@me.com>
  10. */
  11. class Ethna_UrlHandler_Simple_Test extends Ethna_UnitTestBase
  12. {
  13. var $url_handler;
  14. function setUp()
  15. {
  16. $this->url_handler = new Ethna_UrlHandler_Simple_TestClass($this);
  17. }
  18. // {{{ $_simple_map
  19. var $_simple_map = array(
  20. 'test_foo_bar' => '/foo/bar',
  21. );
  22. // }}}
  23. // {{{ $_complex_map
  24. var $_complex_map = array(
  25. 'test_foo_bar' => array(
  26. 'path' => array(
  27. '/foo/bar',
  28. '/foo/bar/{param1}',
  29. '/foo/bar/{param1}/{param2}'
  30. ),
  31. ),
  32. );
  33. // }}}
  34. // {{{ test_requestToAction_simple
  35. function test_requestToAction_simple()
  36. {
  37. // pathinfo ?? action ??
  38. $http_vars = array(
  39. '__url_handler__' => 'entrypoint', // not empty
  40. '__url_info__' => '/foo/bar', // null or not empty
  41. 'param3' => 'value3',
  42. );
  43. $this->url_handler->setActionMap($this->_simple_map);
  44. $injected = $this->url_handler->requestToAction($http_vars);
  45. // action ?????
  46. $diff = array_diff($injected, $http_vars);
  47. $this->assertEqual(count($diff), 1);
  48. $this->assertEqual($diff['action_test_foo_bar'], true);
  49. // action ??????????????????
  50. $diff = array_diff($http_vars, $injected);
  51. $this->assertEqual(count($diff), 0);
  52. // action ?????
  53. $this->url_handler->setActionMap($this->_complex_map);
  54. $injected = $this->url_handler->requestToAction($http_vars);
  55. $diff = array_diff($injected, $http_vars);
  56. $this->assertEqual(count($diff), 1);
  57. $this->assertEqual($diff['action_test_foo_bar'], true);
  58. }
  59. // }}}
  60. // {{{ test_requestToAction_nopathinfo
  61. function test_requestToAction_nopathinfo()
  62. {
  63. // pathinfo ??
  64. $http_vars = array(
  65. '__url_handler__' => 'entrypoint',
  66. '__url_info__' => null,
  67. );
  68. $this->url_handler->setActionMap($this->_complex_map);
  69. $injected = $this->url_handler->requestToAction($http_vars);
  70. // ????
  71. $diff = array_diff($injected, $http_vars);
  72. $this->assertEqual(count($diff), 0);
  73. }
  74. // }}}
  75. // {{{ test_requestToAction_withparams1
  76. function test_requestToAction_withparams1()
  77. {
  78. // pathinfo ?? action ???????????
  79. $http_vars = array(
  80. '__url_handler__' => 'entrypoint',
  81. '__url_info__' => '/foo/bar/aaa',
  82. );
  83. // ???? action_map ???: ?????? array() ???
  84. $this->url_handler->setActionMap($this->_simple_map);
  85. $injected = $this->url_handler->requestToAction($http_vars);
  86. $this->assertEqual(count($injected), 0);
  87. // action ?????? param1 ?????
  88. $this->url_handler->setActionMap($this->_complex_map);
  89. $injected = $this->url_handler->requestToAction($http_vars);
  90. $diff = array_diff($injected, $http_vars);
  91. $this->assertEqual(count($diff), 2);
  92. $this->assertEqual($diff['action_test_foo_bar'], true);
  93. $this->assertEqual($diff['param1'], 'aaa');
  94. }
  95. // }}}
  96. // {{{ test_requestToAction_withparams2
  97. function test_requestToAction_withparams2()
  98. {
  99. // pathinfo ?? action ??????????????
  100. $http_vars = array(
  101. '__url_handler__' => 'entrypoint',
  102. '__url_info__' => '/foo/bar/aaa/bbb',
  103. );
  104. $this->url_handler->setActionMap($this->_complex_map);
  105. $injected = $this->url_handler->requestToAction($http_vars);
  106. $diff = array_diff($injected, $http_vars);
  107. $this->assertEqual(count($diff), 3);
  108. $this->assertEqual($diff['action_test_foo_bar'], true);
  109. $this->assertEqual($diff['param1'], 'aaa');
  110. $this->assertEqual($diff['param2'], 'bbb');
  111. }
  112. // }}}
  113. // {{{ test_requestToAction_withparams3
  114. function test_requestToAction_withparams3()
  115. {
  116. // ??????????????????
  117. $http_vars = array(
  118. '__url_handler__' => 'entrypoint',
  119. '__url_info__' => '/foo/bar/aaa/bbb/ccc',
  120. );
  121. $this->url_handler->setActionMap($this->_complex_map);
  122. $injected = $this->url_handler->requestToAction($http_vars);
  123. $this->assertEqual(count($injected), 0);
  124. }
  125. // }}}
  126. // {{{ test_requestToAction_misc
  127. function test_requestToAction_misc()
  128. {
  129. // ??? pathinfo ?????
  130. $http_vars = array(
  131. '__url_handler__' => 'entrypoint',
  132. );
  133. $this->url_handler->setActionMap($this->_complex_map);
  134. // ??? slash ?????????
  135. $http_vars['__url_info__'] = '///foo///bar///value1///';
  136. $injected = $this->url_handler->requestToAction($http_vars);
  137. $diff = array_diff($injected, $http_vars);
  138. $this->assertEqual($diff['action_test_foo_bar'], true);
  139. $this->assertEqual($diff['param1'], 'value1');
  140. $this->assertFalse(isset($diff['param2']));
  141. // path ? '/./' ???
  142. $http_vars['__url_info__'] = '/foo/bar/./value1';
  143. $injected = $this->url_handler->requestToAction($http_vars);
  144. $diff = array_diff($injected, $http_vars);
  145. $this->assertEqual($diff['action_test_foo_bar'], true);
  146. $this->assertEqual($diff['param1'], '.');
  147. $this->assertEqual($diff['param2'], 'value1');
  148. // path ? '/../' ???
  149. $http_vars['__url_info__'] = '/foo/bar/../baz';
  150. $injected = $this->url_handler->requestToAction($http_vars);
  151. $diff = array_diff($injected, $http_vars);
  152. $this->assertEqual($diff['action_test_foo_bar'], true);
  153. $this->assertEqual($diff['param1'], '..');
  154. $this->assertEqual($diff['param2'], 'baz');
  155. // ???????
  156. $http_vars['__url_info__'] = '/foo/bar/' . str_repeat('a', 10000);
  157. $injected = $this->url_handler->requestToAction($http_vars);
  158. $diff = array_diff($injected, $http_vars);
  159. $this->assertEqual($diff['action_test_foo_bar'], true);
  160. $this->assertTrue(isset($diff['param1']));
  161. $this->assertFalse(isset($diff['param2']));
  162. }
  163. // }}}
  164. // {{{ test_actionToRequest_simple
  165. function test_actionToRequest_simple()
  166. {
  167. $action = 'test_foo_bar';
  168. $param = array(
  169. 'hoge' => 'fuga',
  170. );
  171. $this->url_handler->setActionMap($this->_simple_map);
  172. $ret = $this->url_handler->actionToRequest($action, $param);
  173. $this->assertFalse(is_null($ret));
  174. list($path, $path_key) = $ret;
  175. $this->assertEqual($path, '/foo/bar');
  176. $this->assertTrue($path_key == array());
  177. }
  178. // }}}
  179. // {{{ test_actionToRequest_unknownaction
  180. function test_actionToRequest_unknownaction()
  181. {
  182. $action = 'test_unknown_action';
  183. $param = array(
  184. 'hoge' => 'fuga',
  185. );
  186. $this->url_handler->setActionMap($this->_simple_map);
  187. $ret = $this->url_handler->actionToRequest($action, $param);
  188. $this->assertTrue(is_null($ret));
  189. }
  190. // }}}
  191. // {{{ test_actionToRequest_param1
  192. function test_actionToRequest_param1()
  193. {
  194. $action = 'test_foo_bar';
  195. $param = array(
  196. 'hoge' => 'fuga',
  197. 'param1' => 'value1',
  198. );
  199. $this->url_handler->setActionMap($this->_complex_map);
  200. list($path, $path_key) = $this->url_handler->actionToRequest($action, $param);
  201. $this->assertEqual($path, '/foo/bar/value1');
  202. $this->assertTrue($path_key == array('param1'));
  203. }
  204. // }}}
  205. // {{{ test_actionToRequest_param2
  206. function test_actionToRequest_param2()
  207. {
  208. $action = 'test_foo_bar';
  209. $param = array(
  210. 'hoge' => 'fuga',
  211. 'param1' => 'value1',
  212. 'param2' => 'value2',
  213. );
  214. $this->url_handler->setActionMap($this->_complex_map);
  215. list($path, $path_key) = $this->url_handler->actionToRequest($action, $param);
  216. $this->assertEqual($path, '/foo/bar/value1/value2');
  217. $this->assertEqual($path_key, array('param1', 'param2'));
  218. }
  219. // }}}
  220. }
  221. class Ethna_UrlHandler_Simple_TestClass extends Ethna_UrlHandler_Simple
  222. {
  223. public function setActionMap($am)
  224. {
  225. $this->action_map = $am;
  226. }
  227. }