noRewrite.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?php
  2. require_once dirname( __DIR__ ) . '/canonical.php';
  3. /**
  4. * @group canonical
  5. * @group rewrite
  6. * @group query
  7. */
  8. class Tests_Canonical_NoRewrite extends WP_Canonical_UnitTestCase {
  9. // These test cases are run against the test handler in WP_Canonical.
  10. public function setUp() {
  11. global $wp_rewrite;
  12. parent::setUp();
  13. $wp_rewrite->init();
  14. $wp_rewrite->set_permalink_structure( '' );
  15. $wp_rewrite->flush_rules();
  16. }
  17. /**
  18. * @dataProvider data
  19. */
  20. function test( $test_url, $expected, $ticket = 0, $expected_doing_it_wrong = array() ) {
  21. $this->assertCanonical( $test_url, $expected, $ticket, $expected_doing_it_wrong );
  22. }
  23. function data() {
  24. /*
  25. * Test URL.
  26. * [0]: Test URL.
  27. * [1]: Expected results: Any of the following can be used.
  28. * array( 'url': expected redirection location, 'qv': expected query vars to be set via the rewrite AND $_GET );
  29. * array( expected query vars to be set, same as 'qv' above );
  30. * (string) expected redirect location.
  31. * [3]: (optional) The ticket the test refers to. Can be skipped if unknown.
  32. */
  33. return array(
  34. array( '/?p=123', '/?p=123' ),
  35. // This post_type arg should be stripped, because p=1 exists, and does not have post_type= in its query string.
  36. array( '/?post_type=fake-cpt&p=1', '/?p=1' ),
  37. // Strip an existing but incorrect post_type arg.
  38. array( '/?post_type=page&page_id=1', '/?p=1' ),
  39. // Trailing spaces and punctuation in query string args.
  40. array( // Space.
  41. '/?p=358 ',
  42. array(
  43. 'url' => '/?p=358',
  44. 'qv' => array( 'p' => '358' ),
  45. ),
  46. 20383,
  47. ),
  48. array( // Encoded space.
  49. '/?p=358%20',
  50. array(
  51. 'url' => '/?p=358',
  52. 'qv' => array( 'p' => '358' ),
  53. ),
  54. 20383,
  55. ),
  56. array( // Exclamation mark.
  57. '/?p=358!',
  58. array(
  59. 'url' => '/?p=358',
  60. 'qv' => array( 'p' => '358' ),
  61. ),
  62. 20383,
  63. ),
  64. array( // Encoded exclamation mark.
  65. '/?p=358%21',
  66. array(
  67. 'url' => '/?p=358',
  68. 'qv' => array( 'p' => '358' ),
  69. ),
  70. 20383,
  71. ),
  72. array( // Double quote.
  73. '/?p=358"',
  74. array(
  75. 'url' => '/?p=358',
  76. 'qv' => array( 'p' => '358' ),
  77. ),
  78. 20383,
  79. ),
  80. array( // Encoded double quote.
  81. '/?p=358%22',
  82. array(
  83. 'url' => '/?p=358',
  84. 'qv' => array( 'p' => '358' ),
  85. ),
  86. 20383,
  87. ),
  88. array( // Single quote.
  89. '/?p=358\'',
  90. array(
  91. 'url' => '/?p=358',
  92. 'qv' => array( 'p' => '358' ),
  93. ),
  94. 20383,
  95. ),
  96. array( // Encoded single quote.
  97. '/?p=358%27',
  98. array(
  99. 'url' => '/?p=358',
  100. 'qv' => array( 'p' => '358' ),
  101. ),
  102. 20383,
  103. ),
  104. array( // Opening bracket.
  105. '/?p=358(',
  106. array(
  107. 'url' => '/?p=358',
  108. 'qv' => array( 'p' => '358' ),
  109. ),
  110. 20383,
  111. ),
  112. array( // Encoded opening bracket.
  113. '/?p=358%28',
  114. array(
  115. 'url' => '/?p=358',
  116. 'qv' => array( 'p' => '358' ),
  117. ),
  118. 20383,
  119. ),
  120. array( // Closing bracket.
  121. '/?p=358)',
  122. array(
  123. 'url' => '/?p=358',
  124. 'qv' => array( 'p' => '358' ),
  125. ),
  126. 20383,
  127. ),
  128. array( // Encoded closing bracket.
  129. '/?p=358%29',
  130. array(
  131. 'url' => '/?p=358',
  132. 'qv' => array( 'p' => '358' ),
  133. ),
  134. 20383,
  135. ),
  136. array( // Comma.
  137. '/?p=358,',
  138. array(
  139. 'url' => '/?p=358',
  140. 'qv' => array( 'p' => '358' ),
  141. ),
  142. 20383,
  143. ),
  144. array( // Encoded comma.
  145. '/?p=358%2C',
  146. array(
  147. 'url' => '/?p=358',
  148. 'qv' => array( 'p' => '358' ),
  149. ),
  150. 20383,
  151. ),
  152. array( // Period.
  153. '/?p=358.',
  154. array(
  155. 'url' => '/?p=358',
  156. 'qv' => array( 'p' => '358' ),
  157. ),
  158. 20383,
  159. ),
  160. array( // Encoded period.
  161. '/?p=358%2E',
  162. array(
  163. 'url' => '/?p=358',
  164. 'qv' => array( 'p' => '358' ),
  165. ),
  166. 20383,
  167. ),
  168. array( // Semicolon.
  169. '/?p=358;',
  170. array(
  171. 'url' => '/?p=358',
  172. 'qv' => array( 'p' => '358' ),
  173. ),
  174. 20383,
  175. ),
  176. array( // Encoded semicolon.
  177. '/?p=358%3B',
  178. array(
  179. 'url' => '/?p=358',
  180. 'qv' => array( 'p' => '358' ),
  181. ),
  182. 20383,
  183. ),
  184. array( // Opening curly bracket.
  185. '/?p=358{',
  186. array(
  187. 'url' => '/?p=358',
  188. 'qv' => array( 'p' => '358' ),
  189. ),
  190. 20383,
  191. ),
  192. array( // Encoded opening curly bracket.
  193. '/?p=358%7B',
  194. array(
  195. 'url' => '/?p=358',
  196. 'qv' => array( 'p' => '358' ),
  197. ),
  198. 20383,
  199. ),
  200. array( // Closing curly bracket.
  201. '/?p=358}',
  202. array(
  203. 'url' => '/?p=358',
  204. 'qv' => array( 'p' => '358' ),
  205. ),
  206. 20383,
  207. ),
  208. array( // Encoded closing curly bracket.
  209. '/?p=358%7D',
  210. array(
  211. 'url' => '/?p=358',
  212. 'qv' => array( 'p' => '358' ),
  213. ),
  214. 20383,
  215. ),
  216. array( // Encoded opening curly quote.
  217. '/?p=358%E2%80%9C',
  218. array(
  219. 'url' => '/?p=358',
  220. 'qv' => array( 'p' => '358' ),
  221. ),
  222. 20383,
  223. ),
  224. array( // Encoded closing curly quote.
  225. '/?p=358%E2%80%9D',
  226. array(
  227. 'url' => '/?p=358',
  228. 'qv' => array( 'p' => '358' ),
  229. ),
  230. 20383,
  231. ),
  232. // Trailing spaces and punctuation in permalinks.
  233. array( '/page/2/ ', '/page/2/', 20383 ), // Space.
  234. array( '/page/2/%20', '/page/2/', 20383 ), // Encoded space.
  235. array( '/page/2/!', '/page/2/', 20383 ), // Exclamation mark.
  236. array( '/page/2/%21', '/page/2/', 20383 ), // Encoded exclamation mark.
  237. array( '/page/2/"', '/page/2/', 20383 ), // Double quote.
  238. array( '/page/2/%22', '/page/2/', 20383 ), // Encoded double quote.
  239. array( '/page/2/\'', '/page/2/', 20383 ), // Single quote.
  240. array( '/page/2/%27', '/page/2/', 20383 ), // Encoded single quote.
  241. array( '/page/2/(', '/page/2/', 20383 ), // Opening bracket.
  242. array( '/page/2/%28', '/page/2/', 20383 ), // Encoded opening bracket.
  243. array( '/page/2/)', '/page/2/', 20383 ), // Closing bracket.
  244. array( '/page/2/%29', '/page/2/', 20383 ), // Encoded closing bracket.
  245. array( '/page/2/,', '/page/2/', 20383 ), // Comma.
  246. array( '/page/2/%2C', '/page/2/', 20383 ), // Encoded comma.
  247. array( '/page/2/.', '/page/2/', 20383 ), // Period.
  248. array( '/page/2/%2E', '/page/2/', 20383 ), // Encoded period.
  249. array( '/page/2/;', '/page/2/', 20383 ), // Semicolon.
  250. array( '/page/2/%3B', '/page/2/', 20383 ), // Encoded semicolon.
  251. array( '/page/2/{', '/page/2/', 20383 ), // Opening curly bracket.
  252. array( '/page/2/%7B', '/page/2/', 20383 ), // Encoded opening curly bracket.
  253. array( '/page/2/}', '/page/2/', 20383 ), // Closing curly bracket.
  254. array( '/page/2/%7D', '/page/2/', 20383 ), // Encoded closing curly bracket.
  255. array( '/page/2/%E2%80%9C', '/page/2/', 20383 ), // Encoded opening curly quote.
  256. array( '/page/2/%E2%80%9D', '/page/2/', 20383 ), // Encoded closing curly quote.
  257. array( '/?page_id=1', '/?p=1' ), // Redirect page_id to p (should cover page_id|p|attachment_id to one another).
  258. array( '/?page_id=1&post_type=revision', '/?p=1' ),
  259. array( '/?feed=rss2&p=1', '/?feed=rss2&p=1', 21841 ),
  260. array( '/?feed=rss&p=1', '/?feed=rss2&p=1', 24623 ),
  261. array( '/?comp=East+(North)', '/?comp=East+(North)', 49347 ),
  262. );
  263. }
  264. }