EscUrl.php 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * @group formatting
  4. */
  5. class Tests_Formatting_EscUrl extends WP_UnitTestCase {
  6. function test_spaces() {
  7. $this->assertEquals('http://example.com/MrWordPress', esc_url('http://example.com/Mr WordPress'));
  8. $this->assertEquals('http://example.com/Mr%20WordPress', esc_url('http://example.com/Mr%20WordPress'));
  9. }
  10. function test_bad_characters() {
  11. $this->assertEquals('http://example.com/watchthelinefeedgo', esc_url('http://example.com/watchthelinefeed%0Ago'));
  12. $this->assertEquals('http://example.com/watchthelinefeedgo', esc_url('http://example.com/watchthelinefeed%0ago'));
  13. $this->assertEquals('http://example.com/watchthecarriagereturngo', esc_url('http://example.com/watchthecarriagereturn%0Dgo'));
  14. $this->assertEquals('http://example.com/watchthecarriagereturngo', esc_url('http://example.com/watchthecarriagereturn%0dgo'));
  15. //Nesting Checks
  16. $this->assertEquals('http://example.com/watchthecarriagereturngo', esc_url('http://example.com/watchthecarriagereturn%0%0ddgo'));
  17. $this->assertEquals('http://example.com/watchthecarriagereturngo', esc_url('http://example.com/watchthecarriagereturn%0%0DDgo'));
  18. $this->assertEquals('http://example.com/', esc_url('http://example.com/%0%0%0DAD'));
  19. $this->assertEquals('http://example.com/', esc_url('http://example.com/%0%0%0ADA'));
  20. $this->assertEquals('http://example.com/', esc_url('http://example.com/%0%0%0DAd'));
  21. $this->assertEquals('http://example.com/', esc_url('http://example.com/%0%0%0ADa'));
  22. }
  23. function test_relative() {
  24. $this->assertEquals('/example.php', esc_url('/example.php'));
  25. $this->assertEquals('example.php', esc_url('example.php'));
  26. $this->assertEquals('#fragment', esc_url('#fragment'));
  27. $this->assertEquals('?foo=bar', esc_url('?foo=bar'));
  28. }
  29. function test_protocol() {
  30. $this->assertEquals('http://example.com', esc_url('http://example.com'));
  31. $this->assertEquals('', esc_url('nasty://example.com/'));
  32. }
  33. /**
  34. * @ticket 23187
  35. */
  36. function test_protocol_case() {
  37. $this->assertEquals('http://example.com', esc_url('HTTP://example.com'));
  38. $this->assertEquals('http://example.com', esc_url('Http://example.com'));
  39. }
  40. function test_display_extras() {
  41. $this->assertEquals('http://example.com/&#039;quoted&#039;', esc_url('http://example.com/\'quoted\''));
  42. $this->assertEquals('http://example.com/\'quoted\'', esc_url('http://example.com/\'quoted\'',null,'notdisplay'));
  43. }
  44. function test_non_ascii() {
  45. $this->assertEquals( 'http://example.org/баба', esc_url( 'http://example.org/баба' ) );
  46. $this->assertEquals( 'http://баба.org/баба', esc_url( 'http://баба.org/баба' ) );
  47. $this->assertEquals( 'http://müller.com/', esc_url( 'http://müller.com/' ) );
  48. }
  49. function test_feed() {
  50. $this->assertEquals( '', esc_url( 'feed:javascript:alert(1)' ) );
  51. $this->assertEquals( '', esc_url( 'feed:javascript:feed:alert(1)' ) );
  52. $this->assertEquals( '', esc_url( 'feed:feed:javascript:alert(1)' ) );
  53. $this->assertEquals( 'feed:feed:alert(1)', esc_url( 'feed:feed:alert(1)' ) );
  54. $this->assertEquals( 'feed:http://wordpress.org/feed/', esc_url( 'feed:http://wordpress.org/feed/' ) );
  55. }
  56. /**
  57. * @ticket 16859
  58. */
  59. function test_square_brackets() {
  60. $this->assertEquals( 'http://example.com/?foo%5Bbar%5D=baz', esc_url( 'http://example.com/?foo[bar]=baz' ) );
  61. $this->assertEquals( 'http://example.com/?baz=bar&#038;foo%5Bbar%5D=baz', esc_url( 'http://example.com/?baz=bar&foo[bar]=baz' ) );
  62. //IPv6 addresses in urls - RFC2732
  63. $this->assertEquals( 'http://[::FFFF::127.0.0.1]', esc_url( 'http://[::FFFF::127.0.0.1]' ) );
  64. $this->assertEquals( 'http://[::127.0.0.1]', esc_url( 'http://[::127.0.0.1]' ) );
  65. $this->assertEquals( 'http://[::DEAD:BEEF:DEAD:BEEF:DEAD:BEEF:DEAD:BEEF]', esc_url( 'http://[::DEAD:BEEF:DEAD:BEEF:DEAD:BEEF:DEAD:BEEF]' ) );
  66. }
  67. /**
  68. * @ticket 21974
  69. */
  70. function test_protocol_relative_with_colon() {
  71. $this->assertEquals( '//example.com/foo?foo=abc:def', esc_url( '//example.com/foo?foo=abc:def' ) );
  72. }
  73. }