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