123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- <?php
- // tests for link-template.php and related URL functions
- class Tests_URL extends WP_UnitTestCase {
- var $_old_server;
- function setUp() {
- parent::setUp();
- $this->_old_server = $_SERVER;
- $GLOBALS['pagenow'] = '';
- }
- function tearDown() {
- $_SERVER = $this->_old_server;
- parent::tearDown();
- }
- function test_is_ssl_positive() {
- $_SERVER['HTTPS'] = 'on';
- $this->assertTrue( is_ssl() );
- $_SERVER['HTTPS'] = 'ON';
- $this->assertTrue( is_ssl() );
- $_SERVER['HTTPS'] = '1';
- $this->assertTrue( is_ssl() );
- unset( $_SERVER['HTTPS'] );
- $_SERVER['SERVER_PORT'] = '443';
- $this->assertTrue( is_ssl() );
- }
- function test_is_ssl_negative() {
- $_SERVER['HTTPS'] = 'off';
- $this->assertFalse( is_ssl() );
- $_SERVER['HTTPS'] = 'OFF';
- $this->assertFalse( is_ssl() );
- unset($_SERVER['HTTPS']);
- $this->assertFalse( is_ssl() );
- }
- function test_admin_url_valid() {
- $paths = array(
- '' => "/wp-admin/",
- 'foo' => "/wp-admin/foo",
- '/foo' => "/wp-admin/foo",
- '/foo/' => "/wp-admin/foo/",
- 'foo.php' => "/wp-admin/foo.php",
- '/foo.php' => "/wp-admin/foo.php",
- '/foo.php?bar=1' => "/wp-admin/foo.php?bar=1",
- );
- $https = array('on', 'off');
- foreach ($https as $val) {
- $_SERVER['HTTPS'] = $val;
- $siteurl = get_option('siteurl');
- if ( $val == 'on' )
- $siteurl = str_replace('http://', 'https://', $siteurl);
- foreach ($paths as $in => $out) {
- $this->assertEquals( $siteurl.$out, admin_url($in), "admin_url('{$in}') should equal '{$siteurl}{$out}'");
- }
- }
- }
- function test_admin_url_invalid() {
- $paths = array(
- null => "/wp-admin/",
- 0 => "/wp-admin/",
- -1 => "/wp-admin/",
- '///' => "/wp-admin/",
- );
- $https = array('on', 'off');
- foreach ($https as $val) {
- $_SERVER['HTTPS'] = $val;
- $siteurl = get_option('siteurl');
- if ( $val == 'on' )
- $siteurl = str_replace('http://', 'https://', $siteurl);
- foreach ($paths as $in => $out) {
- $this->assertEquals( $siteurl.$out, admin_url($in), "admin_url('{$in}') should equal '{$siteurl}{$out}'");
- }
- }
- }
- function test_home_url_valid() {
- $paths = array(
- '' => "",
- 'foo' => "/foo",
- '/foo' => "/foo",
- '/foo/' => "/foo/",
- 'foo.php' => "/foo.php",
- '/foo.php' => "/foo.php",
- '/foo.php?bar=1' => "/foo.php?bar=1",
- );
- $https = array('on', 'off');
- foreach ($https as $val) {
- $_SERVER['HTTPS'] = $val;
- $home = get_option('home');
- if ( $val == 'on' )
- $home = str_replace('http://', 'https://', $home);
- foreach ($paths as $in => $out) {
- $this->assertEquals( $home.$out, home_url($in), "home_url('{$in}') should equal '{$home}{$out}'");
- }
- }
- }
- function test_home_url_invalid() {
- $paths = array(
- null => "",
- 0 => "",
- -1 => "",
- '///' => "/",
- );
- $https = array('on', 'off');
- foreach ($https as $val) {
- $_SERVER['HTTPS'] = $val;
- $home = get_option('home');
- if ( $val == 'on' )
- $home = str_replace('http://', 'https://', $home);
- foreach ($paths as $in => $out) {
- $this->assertEquals( $home.$out, home_url($in), "home_url('{$in}') should equal '{$home}{$out}'");
- }
- }
- }
- function test_home_url_from_admin() {
- $screen = get_current_screen();
- // Pretend to be in the site admin
- set_current_screen( 'dashboard' );
- $home = get_option('home');
- // home_url() should return http when in the admin
- $_SERVER['HTTPS'] = 'on';
- $this->assertEquals( $home, home_url() );
- $_SERVER['HTTPS'] = 'off';
- $this->assertEquals( $home, home_url() );
- // If not in the admin, is_ssl() should determine the scheme
- set_current_screen( 'front' );
- $this->assertEquals( $home, home_url() );
- $_SERVER['HTTPS'] = 'on';
- $home = str_replace('http://', 'https://', $home);
- $this->assertEquals( $home, home_url() );
- // Test with https in home
- update_option( 'home', set_url_scheme( $home, 'https' ) );
- // Pretend to be in the site admin
- set_current_screen( 'dashboard' );
- $home = get_option('home');
- // home_url() should return whatever scheme is set in the home option when in the admin
- $_SERVER['HTTPS'] = 'on';
- $this->assertEquals( $home, home_url() );
- $_SERVER['HTTPS'] = 'off';
- $this->assertEquals( $home, home_url() );
- // If not in the admin, is_ssl() should determine the scheme unless https hard-coded in home
- set_current_screen( 'front' );
- $this->assertEquals( $home, home_url() );
- $_SERVER['HTTPS'] = 'on';
- $this->assertEquals( $home, home_url() );
- $_SERVER['HTTPS'] = 'off';
- $this->assertEquals( $home, home_url() );
- update_option( 'home', set_url_scheme( $home, 'http' ) );
- $GLOBALS['current_screen'] = $screen;
- }
- function test_network_home_url_from_admin() {
- $screen = get_current_screen();
- // Pretend to be in the site admin
- set_current_screen( 'dashboard' );
- $home = network_home_url();
- // home_url() should return http when in the admin
- $this->assertEquals( 0, strpos( $home, 'http://') );
- $_SERVER['HTTPS'] = 'on';
- $this->assertEquals( $home, network_home_url() );
- $_SERVER['HTTPS'] = 'off';
- $this->assertEquals( $home, network_home_url() );
- // If not in the admin, is_ssl() should determine the scheme
- set_current_screen( 'front' );
- $this->assertEquals( $home, network_home_url() );
- $_SERVER['HTTPS'] = 'on';
- $home = str_replace('http://', 'https://', $home);
- $this->assertEquals( $home, network_home_url() );
- $GLOBALS['current_screen'] = $screen;
- }
- function test_set_url_scheme() {
- if ( ! function_exists( 'set_url_scheme' ) )
- return;
- $links = array(
- 'http://wordpress.org/',
- 'https://wordpress.org/',
- 'http://wordpress.org/news/',
- 'http://wordpress.org',
- );
- $https_links = array(
- 'https://wordpress.org/',
- 'https://wordpress.org/',
- 'https://wordpress.org/news/',
- 'https://wordpress.org',
- );
- $http_links = array(
- 'http://wordpress.org/',
- 'http://wordpress.org/',
- 'http://wordpress.org/news/',
- 'http://wordpress.org',
- );
- $relative_links = array(
- '/',
- '/',
- '/news/',
- ''
- );
- $forced_admin = force_ssl_admin();
- $forced_login = force_ssl_login();
- $i = 0;
- foreach ( $links as $link ) {
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'https' ) );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'http' ) );
- $this->assertEquals( $relative_links[ $i ], set_url_scheme( $link, 'relative' ) );
- $_SERVER['HTTPS'] = 'on';
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link ) );
- $_SERVER['HTTPS'] = 'off';
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link ) );
- force_ssl_login( false );
- force_ssl_admin( true );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'admin' ) );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'login_post' ) );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'login' ) );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'rpc' ) );
- force_ssl_admin( false );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'admin' ) );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'login_post' ) );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'login' ) );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'rpc' ) );
- force_ssl_login( true );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'admin' ) );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'login_post' ) );
- $this->assertEquals( $http_links[ $i ], set_url_scheme( $link, 'login' ) );
- $this->assertEquals( $https_links[ $i ], set_url_scheme( $link, 'rpc' ) );
- $i++;
- }
- force_ssl_admin( $forced_admin );
- force_ssl_login( $forced_login );
- }
- function test_get_adjacent_post() {
- $post_id = $this->factory->post->create();
- sleep( 1 ); // get_adjacent_post() doesn't handle posts created in the same second.
- $post_id2 = $this->factory->post->create();
- if ( ! isset( $GLOBALS['post'] ) )
- $GLOBALS['post'] = null;
- $orig_post = $GLOBALS['post'];
- $GLOBALS['post'] = get_post( $post_id2 );
- $p = get_adjacent_post();
- $this->assertInstanceOf( 'WP_Post', $p );
- $this->assertEquals( $post_id, $p->ID );
- // The same again to make sure a cached query returns the same result
- $p = get_adjacent_post();
- $this->assertInstanceOf( 'WP_Post', $p );
- $this->assertEquals( $post_id, $p->ID );
- // Test next
- $p = get_adjacent_post( false, '', false );
- $this->assertEquals( '', $p );
- unset( $GLOBALS['post'] );
- $this->assertNull( get_adjacent_post() );
- $GLOBALS['post'] = $orig_post;
- // Tests requiring creating more posts can't be run since the query
- // cache in get_adjacent_post() requires a fresh page load to invalidate.
- }
- /**
- * Test that *_url functions handle paths with ".."
- *
- * @ticket 19032
- */
- public function test_url_functions_for_dots_in_paths() {
- $functions = array(
- 'site_url',
- 'home_url',
- 'admin_url',
- 'network_admin_url',
- 'user_admin_url',
- 'includes_url',
- 'network_site_url',
- 'network_home_url',
- 'content_url',
- 'plugins_url',
- );
- foreach ( $functions as $function ) {
- $this->assertEquals( call_user_func( $function, '/' ) . '../',
- call_user_func( $function, '../' ) );
- $this->assertEquals( call_user_func( $function, '/' ) . 'something...here',
- call_user_func( $function, 'something...here' ) );
- }
- // These functions accept a blog ID argument.
- foreach ( array( 'get_site_url', 'get_home_url', 'get_admin_url' ) as $function ) {
- $this->assertEquals( call_user_func( $function, null, '/' ) . '../',
- call_user_func( $function, null, '../' ) );
- $this->assertEquals( call_user_func( $function, null, '/' ) . 'something...here',
- call_user_func( $function, null, 'something...here' ) );
- }
- }
- }
|