urlTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. /**
  12. * Url测试
  13. * @author liu21st <liu21st@gmail.com>
  14. */
  15. namespace tests\thinkphp\library\think;
  16. use tests\thinkphp\library\think\config\ConfigInitTrait;
  17. use think\Config;
  18. use think\Route;
  19. use think\Url;
  20. class urlTest extends \PHPUnit_Framework_TestCase
  21. {
  22. use ConfigInitTrait;
  23. public function setUp()
  24. {
  25. Route::rules(['get' => [],
  26. 'post' => [],
  27. 'put' => [],
  28. 'delete' => [],
  29. 'patch' => [],
  30. 'head' => [],
  31. 'options' => [],
  32. '*' => [],
  33. 'alias' => [],
  34. 'domain' => [],
  35. 'pattern' => [],
  36. 'name' => []]);
  37. Route::name([]);
  38. }
  39. public function testBuildModule()
  40. {
  41. Route::get('blog/:name', 'index/blog');
  42. Route::get('blog/:id', 'index/blog');
  43. Config::set('pathinfo_depr', '/');
  44. Config::set('url_html_suffix', '');
  45. $this->assertEquals('/blog/thinkphp', Url::build('index/blog?name=thinkphp'));
  46. $this->assertEquals('/blog/thinkphp.html', Url::build('index/blog', 'name=thinkphp', 'html'));
  47. $this->assertEquals('/blog/10', Url::build('index/blog?id=10'));
  48. $this->assertEquals('/blog/10.html', Url::build('index/blog', 'id=10', 'html'));
  49. Route::get('item-<name><id?>', 'blog/item', [], ['name' => '\w+', 'id' => '\d+']);
  50. $this->assertEquals('/item-thinkphp', Url::build('blog/item?name=thinkphp'));
  51. $this->assertEquals('/item-thinkphp2016', Url::build('blog/item?name=thinkphp&id=2016'));
  52. }
  53. public function testBuildController()
  54. {
  55. Config::set('url_html_suffix', '');
  56. Route::get('blog/:id', '@index/blog/read');
  57. $this->assertEquals('/blog/10.html', Url::build('@index/blog/read', 'id=10', 'html'));
  58. Route::get('foo/bar', '@foo/bar/index');
  59. $this->assertEquals('/foo/bar', Url::build('@foo/bar/index'));
  60. Route::get('foo/bar/baz', '@foo/bar.BAZ/index');
  61. $this->assertEquals('/foo/bar/baz', Url::build('@foo/bar.BAZ/index'));
  62. }
  63. public function testBuildMethod()
  64. {
  65. Route::get('blog/:id', '\app\index\controller\blog@read');
  66. $this->assertEquals('/blog/10.html', Url::build('\app\index\controller\blog@read', 'id=10', 'html'));
  67. }
  68. public function testBuildRoute()
  69. {
  70. Route::get('blog/:id', 'index/blog');
  71. Config::set('url_html_suffix', 'shtml');
  72. $this->assertNotEquals('/blog/10.html', Url::build('/blog/10'));
  73. $this->assertEquals('/blog/10.shtml', Url::build('/blog/10'));
  74. }
  75. public function testBuildNameRoute()
  76. {
  77. Route::get(['name', 'blog/:id'], 'index/blog');
  78. $this->assertEquals([['blog/:id', ['id' => 1], null, null]], Route::name('name'));
  79. Config::set('url_html_suffix', 'shtml');
  80. $this->assertEquals('/blog/10.shtml', Url::build('name?id=10'));
  81. }
  82. public function testBuildAnchor()
  83. {
  84. Route::get('blog/:id', 'index/blog');
  85. Config::set('url_html_suffix', 'shtml');
  86. $this->assertEquals('/blog/10.shtml#detail', Url::build('index/blog#detail', 'id=10'));
  87. Config::set('url_common_param', true);
  88. $this->assertEquals('/blog/10.shtml?foo=bar#detail', Url::build('index/blog#detail', "id=10&foo=bar"));
  89. }
  90. public function testBuildDomain()
  91. {
  92. Config::set('url_domain_deploy', true);
  93. Route::domain('subdomain.thinkphp.cn', 'admin');
  94. $this->assertEquals('http://subdomain.thinkphp.cn/blog/10.html', Url::build('/blog/10'));
  95. Route::domain('subdomain.thinkphp.cn', [
  96. 'hello/:name' => 'index/hello',
  97. ]);
  98. $this->assertEquals('http://subdomain.thinkphp.cn/hello/thinkphp.html', Url::build('index/hello?name=thinkphp'));
  99. }
  100. public function testRoot()
  101. {
  102. Config::set('url_domain_deploy', false);
  103. Config::set('url_common_param', false);
  104. Url::root('/index.php');
  105. Route::get('blog/:id', 'index/blog/read');
  106. Config::set('url_html_suffix', 'shtml');
  107. $this->assertEquals('/index.php/blog/10/name/thinkphp.shtml', Url::build('index/blog/read?id=10&name=thinkphp'));
  108. }
  109. }