HostnameTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <?php
  2. /**
  3. * @category Zend
  4. * @package Zend_Controller
  5. * @subpackage UnitTests
  6. */
  7. /** Test helper */
  8. require_once dirname(__FILE__) . '/../../../../TestHelper.php';
  9. /** Zend_Controller_Router_Route_Hostname */
  10. require_once 'Zend/Controller/Router/Route/Hostname.php';
  11. /** Zend_Controller_Request_Http */
  12. require_once 'Zend/Controller/Request/Http.php';
  13. /** PHPUnit test case */
  14. require_once 'PHPUnit/Framework/TestCase.php';
  15. if (!defined('PHPUnit_MAIN_METHOD')) {
  16. define('PHPUnit_MAIN_METHOD', 'Zend_Controller_Router_Route_HostnameTest::main');
  17. }
  18. /**
  19. * @category Zend
  20. * @package Zend_Controller
  21. * @subpackage UnitTests
  22. */
  23. class Zend_Controller_Router_Route_HostnameTest extends PHPUnit_Framework_TestCase
  24. {
  25. /**
  26. * Runs the test methods of this class.
  27. *
  28. * @access public
  29. * @static
  30. */
  31. public static function main()
  32. {
  33. require_once "PHPUnit/TextUI/TestRunner.php";
  34. $suite = new PHPUnit_Framework_TestSuite("Zend_Controller_Router_Route_HostnameTest");
  35. $result = PHPUnit_TextUI_TestRunner::run($suite);
  36. }
  37. public function testCorrectStaticHostMatch()
  38. {
  39. $route = $this->_getStaticHostRoute();
  40. $values = $route->match($this->_getRequest('www.zend.com'));
  41. $this->assertEquals('ctrl', $values['controller']);
  42. }
  43. public function testHostMatchWithPort()
  44. {
  45. $route = $this->_getStaticHostRoute();
  46. $values = $route->match($this->_getRequest('www.zend.com:666'));
  47. $this->assertEquals('ctrl', $values['controller']);
  48. }
  49. public function testWrongStaticHostMatch()
  50. {
  51. $route = $this->_getStaticHostRoute();
  52. $values = $route->match($this->_getRequest('foo.zend.com'));
  53. $this->assertFalse($values);
  54. }
  55. public function testCorrectHostMatch()
  56. {
  57. $route = $this->_getHostRoute();
  58. $values = $route->match($this->_getRequest('foo.zend.com'));
  59. $this->assertEquals('ctrl', $values['controller']);
  60. }
  61. public function testWrongHostMatch()
  62. {
  63. $route = $this->_getHostRoute();
  64. $values = $route->match($this->_getRequest('www.zend.com'));
  65. $this->assertFalse($values);
  66. }
  67. public function testAssembleStaticHost()
  68. {
  69. $route = $this->_getStaticHostRoute();
  70. $this->assertRegexp('/[^a-z0-9]?www\.zend\.com$/i', $route->assemble());
  71. }
  72. public function testAssembleHost()
  73. {
  74. $route = $this->_getHostRoute();
  75. $this->assertRegexp('/[^a-z0-9]?foo\.zend\.com$/i', $route->assemble(array('subdomain' => 'foo')));
  76. }
  77. public function testAssembleHostWithMissingParam()
  78. {
  79. $route = $this->_getHostRoute();
  80. try {
  81. $route->assemble();
  82. $this->fail('An expected Zend_Controller_Router_Exception has not been raised');
  83. } catch (Zend_Controller_Router_Exception $expected) {
  84. $this->assertContains('subdomain is not specified', $expected->getMessage());
  85. }
  86. }
  87. public function testAssembleHostWithDefaultParam()
  88. {
  89. $route = $this->_getHostRouteWithDefault();
  90. $this->assertRegexp('/[^a-z0-9]?bar\.zend\.com$/i', $route->assemble());
  91. }
  92. public function testHostGetDefault()
  93. {
  94. $route = $this->_getHostRouteWithDefault();
  95. $this->assertEquals('bar', $route->getDefault('subdomain'));
  96. }
  97. public function testHostGetNonExistentDefault()
  98. {
  99. $route = $this->_getHostRouteWithDefault();
  100. $this->assertEquals(null, $route->getDefault('blah'));
  101. }
  102. public function testHostGetDefaults()
  103. {
  104. $route = $this->_getHostRouteWithDefault();
  105. $defaults = $route->getDefaults();
  106. $this->assertEquals('bar', $defaults['subdomain']);
  107. }
  108. public function testRouteWithHostname()
  109. {
  110. $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com');
  111. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'));
  112. $values = $route->match($request);
  113. $this->assertEquals('host-foo', $values['controller']);
  114. $this->assertEquals('host-bar', $values['action']);
  115. }
  116. public function testSchemeMatch()
  117. {
  118. $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com', 'https');
  119. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'), array(), 'https');
  120. $values = $route->match($request);
  121. $this->assertEquals('host-foo', $values['controller']);
  122. $this->assertEquals('host-bar', $values['action']);
  123. }
  124. public function testSchemeNoMatch()
  125. {
  126. $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com', 'http');
  127. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'), array(), 'https');
  128. $values = $route->match($request);
  129. $this->assertFalse($values);
  130. }
  131. public function testAutomaticSchemeAssembling()
  132. {
  133. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'), array());
  134. $url = $route->assemble();
  135. $this->assertEquals('http://www.zend.com', $url);
  136. }
  137. public function testForcedSchemeAssembling()
  138. {
  139. $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com');
  140. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'), array(), 'https');
  141. $route->setRequest($request);
  142. $url = $route->assemble();
  143. $this->assertEquals('https://www.zend.com', $url);
  144. }
  145. protected function _getStaticHostRoute()
  146. {
  147. $route = new Zend_Controller_Router_Route_Hostname('www.zend.com',
  148. array('controller' => 'ctrl',
  149. 'action' => 'act'));
  150. return $route;
  151. }
  152. protected function _getHostRoute()
  153. {
  154. $route = new Zend_Controller_Router_Route_Hostname(':subdomain.zend.com',
  155. array('controller' => 'ctrl',
  156. 'action' => 'act'),
  157. array('subdomain' => '(foo|bar)'));
  158. return $route;
  159. }
  160. protected function _getHostRouteWithDefault()
  161. {
  162. $route = new Zend_Controller_Router_Route_Hostname(':subdomain.zend.com',
  163. array('controller' => 'ctrl',
  164. 'action' => 'act',
  165. 'subdomain' => 'bar'),
  166. array('subdomain' => '(foo|bar)'));
  167. return $route;
  168. }
  169. protected function _getRequest($host) {
  170. return new Zend_Controller_Router_RewriteTest_Request_Stub($host);
  171. }
  172. }
  173. /**
  174. * Zend_Controller_RouterTest_Request_Stub - request object for route testing
  175. */
  176. class Zend_Controller_Router_RewriteTest_Request_Stub extends Zend_Controller_Request_Abstract
  177. {
  178. protected $_host;
  179. protected $_scheme;
  180. public function __construct($host, $scheme = 'http') {
  181. $this->_host = $host;
  182. $this->_scheme = $scheme;
  183. }
  184. public function getHttpHost() {
  185. return $this->_host;
  186. }
  187. public function getScheme() {
  188. return $this->_scheme;
  189. }
  190. }
  191. if (PHPUnit_MAIN_METHOD == "Zend_Controller_Router_Route_HostnameTest::main") {
  192. Zend_Controller_Router_Route_HostnameTest::main();
  193. }