WordPress.org

Make WordPress Core

Ticket #17923: 17923_unit_test.patch

File 17923_unit_test.patch, 3.4 KB (added by kurtpayne, 6 years ago)

Unit test for add_query_arg and remove_query_arg

  • wp-testcase/test_includes_functions.php

     
    430430        }
    431431}
    432432
     433class TestQueryArgs extends WPTestCase {
     434
     435        private $_backup_request_uri = '';
     436
     437        public function setup(){
     438                $this->_backup_request_uri = $_SERVER['REQUEST_URI'];
     439        }
     440       
     441        public function teardown() {
     442                $_SERVER['REQUEST_URI'] = $this->_backup_request_uri;
     443        }
     444
     445        public function test_array_usage() {
     446                $urls = array(
     447                        '/wordpress/?p=123'                 => '/wordpress/?p=456&q=abc&r&s&t=u&v&w=@',
     448                        '/wordpress/2011/12/08/sample-post' => '/wordpress/2011/12/08/sample-post?p=456&q=abc&r&s&t=u&v&w=@',
     449                );
     450                $encode_urls = array(
     451                        '/wordpress/?p=123'                 => '/wordpress/?p=456&q=abc&r=%26s&t=u%26v&w=%40',
     452                        '/wordpress/2011/12/08/sample-post' => '/wordpress/2011/12/08/sample-post?p=456&q=abc&r=%26s&t=u%26v&w=%40',
     453                );
     454                $args = array(
     455                        'p' => '456',
     456                        'q' => 'abc',
     457                        'r' => '&s',
     458                        't' => 'u&v',
     459                        'w' => '@'
     460                );
     461                foreach ( $urls as $k => $v ) {
     462                        $_SERVER['REQUEST_URI'] = $k;
     463                        $this->assertEquals( $v, add_query_arg( $args ) );
     464                }
     465                foreach ( $encode_urls as $k => $v ) {
     466                        $_SERVER['REQUEST_URI'] = $k;
     467                        $this->assertEquals( $v, add_query_arg( $args, false, false, true ) );
     468                }
     469        }
     470
     471        public function test_key_value_usage() {
     472                $urls = array(
     473                        '/wordpress/?p=123'                 => '/wordpress/?p=456&q=abc&r&s&t=u&v&w=@',
     474                        '/wordpress/2011/12/08/sample-post' => '/wordpress/2011/12/08/sample-post?p=456&q=abc&r&s&t=u&v&w=@',
     475                );
     476                $encode_urls = array(
     477                        '/wordpress/?p=123'                 => '/wordpress/?p=456&q=abc&r=%26s&t=u%26v&w=%40',
     478                        '/wordpress/2011/12/08/sample-post' => '/wordpress/2011/12/08/sample-post?p=456&q=abc&r=%26s&t=u%26v&w=%40',
     479                );
     480                $args = array(
     481                        'p' => '456',
     482                        'q' => 'abc',
     483                        'r' => '&s',
     484                        't' => 'u&v',
     485                        'w' => '@'
     486                );
     487                foreach ( $urls as $k => $v ) {
     488                        $url = $k;
     489                        foreach ( $args as $_k => $_v )
     490                                $url = add_query_arg( $_k, $_v, $url );
     491                        $this->assertEquals( $v, $url );
     492                }
     493                foreach ( $encode_urls as $k => $v ) {
     494                        $url = $k;
     495                        foreach ( $args as $_k => $_v )
     496                                $url = add_query_arg( $_k, $_v, $url, true );
     497                        $this->assertEquals( $v, $url );
     498                }
     499        }
     500       
     501        public function test_encoding() {
     502                $url = '/wordpress/';
     503                $args = '!@#$%^&*()_+=-[]{}\|";:\',.<>/?`~';
     504                $this->assertEquals( $url . '?args=' . $args, add_query_arg('args', $args, $url) );
     505                $this->assertEquals( $url . '?args=' . rawurlencode($args), add_query_arg('args', $args, $url, true) );
     506        }
     507
     508        public function test_remove_arg() {
     509
     510                // Arg from the end
     511                $url = '/wordpress/?p=123';
     512                $this->assertEquals( '/wordpress/', remove_query_arg('p', $url) );
     513
     514                // Arg from the middle
     515                $url = '/wordpress/?p=123&q=456&r&s';
     516                $this->assertEquals( '/wordpress/?p=123&q=456&s', remove_query_arg('r', $url) );       
     517
     518                // Multiple calls
     519                $url = '/wordpress/?p=123&q=456&r&s';
     520                $url = remove_query_arg('s', $url);
     521                $url = remove_query_arg('r', $url);
     522                $url = remove_query_arg('q', $url);
     523                $url = remove_query_arg('p', $url);
     524                $this->assertEquals( '/wordpress/', $url );     
     525       
     526                // Trailing ampersand
     527                $url = '/wordpress/?p=123&';
     528                $this->assertEquals( '/wordpress/', remove_query_arg('p', $url) );
     529        }
     530}
     531
    433532?>