| | 433 | class 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 | |