From 30e825d0a4dafa6722149c4e2a3952689a87137d Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Mon, 27 Apr 2026 14:09:45 -0400 Subject: [PATCH 1/5] Add unit tests for got_url_rewrite() in src/wp-admin/includes/misc.php Reference: https://core.trac.wordpress.org/ticket/65135 --- .../admin/includes/misc/gotUrlRewrite.php | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php diff --git a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php new file mode 100644 index 0000000000000..6d8ce3ca26b52 --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php @@ -0,0 +1,121 @@ +assertSame( $expected, got_url_rewrite() ); + + // Cleanup. + remove_filter( 'got_rewrite', $mod_rewrite ? '__return_true' : '__return_false' ); + if ( null !== $filter_val ) { + remove_filter( 'got_url_rewrite', $filter_val ? '__return_true' : '__return_false' ); + } + $is_nginx = $prev_nginx; + $is_caddy = $prev_caddy; + } + + /** + * Data provider for test_got_url_rewrite. + * + * @return array[] { + * @type bool $expected The expected result. + * @type bool $mod_rewrite Whether mod_rewrite is supported. + * @type bool $is_nginx Whether server is nginx. + * @type bool $is_caddy Whether server is Caddy. + * @type bool $iis7_perm Whether IIS7 supports permalinks. + * @type bool|null $filter_val Optional filter value. + * } + */ + public function data_got_url_rewrite() { + return array( + 'All false' => array( + 'expected' => false, + 'mod_rewrite' => false, + 'is_nginx' => false, + 'is_caddy' => false, + 'iis7_perm' => false, + ), + 'Apache mod_rewrite supported' => array( + 'expected' => true, + 'mod_rewrite' => true, + 'is_nginx' => false, + 'is_caddy' => false, + 'iis7_perm' => false, + ), + 'Nginx supported' => array( + 'expected' => true, + 'mod_rewrite' => false, + 'is_nginx' => true, + 'is_caddy' => false, + 'iis7_perm' => false, + ), + 'Caddy supported' => array( + 'expected' => true, + 'mod_rewrite' => false, + 'is_nginx' => false, + 'is_caddy' => true, + 'iis7_perm' => false, + ), + 'Filter overrides to true' => array( + 'expected' => true, + 'mod_rewrite' => false, + 'is_nginx' => false, + 'is_caddy' => false, + 'iis7_perm' => false, + 'filter_val' => true, + ), + 'Filter overrides to false' => array( + 'expected' => false, + 'mod_rewrite' => true, + 'is_nginx' => true, + 'is_caddy' => true, + 'iis7_perm' => true, + 'filter_val' => false, + ), + ); + } +} From 3deedc07846dc5913435694170b78b6151b4266f Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Mon, 27 Apr 2026 14:51:26 -0400 Subject: [PATCH 2/5] fixed white space --- .../admin/includes/misc/gotUrlRewrite.php | 85 +++++++++++++------ 1 file changed, 57 insertions(+), 28 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php index 6d8ce3ca26b52..e3ac0165c8372 100644 --- a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php +++ b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php @@ -10,6 +10,32 @@ */ class Tests_got_url_rewrite extends WP_UnitTestCase { + /** + * Saved value of the $is_nginx global. + * @var bool + */ + private $prev_nginx; + + /** + * Saved value of the $is_caddy global. + * @var bool + */ + private $prev_caddy; + + public function set_up() { + parent::set_up(); + global $is_nginx, $is_caddy; + $this->prev_nginx = $is_nginx; + $this->prev_caddy = $is_caddy; + } + + public function tear_down() { + global $is_nginx, $is_caddy; + $is_nginx = $this->prev_nginx; + $is_caddy = $this->prev_caddy; + parent::tear_down(); + } + /** * Tests that got_url_rewrite() correctly detects URL rewrite support based on server and filters. * @@ -19,20 +45,16 @@ class Tests_got_url_rewrite extends WP_UnitTestCase { * * @param bool $expected The expected result from got_url_rewrite(). * @param bool $mod_rewrite Whether mod_rewrite is reported as supported. - * @param bool $is_nginx Value for the $is_nginx global. - * @param bool $is_caddy Value for the $is_caddy global. + * @param bool $is_nginx_val Value for the $is_nginx global. + * @param bool $is_caddy_val Value for the $is_caddy global. * @param bool $iis7_perm Whether IIS7 supports permalinks (simulated). * @param bool|null $filter_val Optional value for the 'got_url_rewrite' filter. */ - public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx, $is_caddy, $iis7_perm, $filter_val = null ) { + public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx_val, $is_caddy_val, $iis7_perm, $filter_val = null ) { global $is_nginx, $is_caddy; - // Backup globals. - $prev_nginx = $is_nginx; - $prev_caddy = $is_caddy; - - $is_nginx = $is_nginx; - $is_caddy = $is_caddy; + $is_nginx = $is_nginx_val; + $is_caddy = $is_caddy_val; // Mock got_mod_rewrite and iis7_supports_permalinks via filters if possible. // However, got_url_rewrite calls got_mod_rewrite() which calls apache_mod_loaded. @@ -54,25 +76,32 @@ public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx, $is_ca if ( null !== $filter_val ) { remove_filter( 'got_url_rewrite', $filter_val ? '__return_true' : '__return_false' ); } - $is_nginx = $prev_nginx; - $is_caddy = $prev_caddy; } - /** - * Data provider for test_got_url_rewrite. - * - * @return array[] { - * @type bool $expected The expected result. - * @type bool $mod_rewrite Whether mod_rewrite is supported. - * @type bool $is_nginx Whether server is nginx. - * @type bool $is_caddy Whether server is Caddy. - * @type bool $iis7_perm Whether IIS7 supports permalinks. - * @type bool|null $filter_val Optional filter value. - * } - */ + /** + * Data provider for test_got_url_rewrite. + * + * @return array[] { + * @type bool $expected The expected result. + * @type bool $mod_rewrite Whether mod_rewrite is supported. + * @type bool $is_nginx Whether server is nginx. + * @type bool $is_caddy Whether server is Caddy. + * @type bool $iis7_perm Whether IIS7 supports permalinks. + * @type bool|null $filter_val Optional filter value. + * } + * + * @phpstan-return array + */ public function data_got_url_rewrite() { return array( - 'All false' => array( + 'All false' => array( 'expected' => false, 'mod_rewrite' => false, 'is_nginx' => false, @@ -86,21 +115,21 @@ public function data_got_url_rewrite() { 'is_caddy' => false, 'iis7_perm' => false, ), - 'Nginx supported' => array( + 'Nginx supported' => array( 'expected' => true, 'mod_rewrite' => false, 'is_nginx' => true, 'is_caddy' => false, 'iis7_perm' => false, ), - 'Caddy supported' => array( + 'Caddy supported' => array( 'expected' => true, 'mod_rewrite' => false, 'is_nginx' => false, 'is_caddy' => true, 'iis7_perm' => false, ), - 'Filter overrides to true' => array( + 'Filter overrides to true' => array( 'expected' => true, 'mod_rewrite' => false, 'is_nginx' => false, @@ -108,7 +137,7 @@ public function data_got_url_rewrite() { 'iis7_perm' => false, 'filter_val' => true, ), - 'Filter overrides to false' => array( + 'Filter overrides to false' => array( 'expected' => false, 'mod_rewrite' => true, 'is_nginx' => true, From 1b979a2003a46387a51a5fb888cfb516f4cd437a Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Tue, 28 Apr 2026 16:00:33 -0400 Subject: [PATCH 3/5] Declare return type for data_got_url_rewrite() in unit tests --- tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php index e3ac0165c8372..6d7e4fa56aed4 100644 --- a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php +++ b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php @@ -99,7 +99,7 @@ public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx_val, $i * filter_val?: bool|null, * }> */ - public function data_got_url_rewrite() { + public function data_got_url_rewrite(): array { return array( 'All false' => array( 'expected' => false, From 12b5972460cfb9b8e5198fb4277c35072d080675 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 29 Apr 2026 08:22:09 -0400 Subject: [PATCH 4/5] Fix formatting of docblock in gotUrlRewrite.php --- tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php index 6d7e4fa56aed4..61bcabee82b15 100644 --- a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php +++ b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php @@ -78,7 +78,7 @@ public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx_val, $i } } - /** + /** * Data provider for test_got_url_rewrite. * * @return array[] { From 58f6e5b53924154ebc3c725da0891cefaa5ad5da Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 29 Apr 2026 08:22:18 -0400 Subject: [PATCH 5/5] Apply suggestions from code review Co-authored-by: Weston Ruter --- .../admin/includes/misc/gotUrlRewrite.php | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php index 61bcabee82b15..9e1bdf164a62d 100644 --- a/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php +++ b/tests/phpunit/tests/admin/includes/misc/gotUrlRewrite.php @@ -12,15 +12,13 @@ class Tests_got_url_rewrite extends WP_UnitTestCase { /** * Saved value of the $is_nginx global. - * @var bool */ - private $prev_nginx; + private bool $prev_nginx; /** * Saved value of the $is_caddy global. - * @var bool */ - private $prev_caddy; + private bool $prev_caddy; public function set_up() { parent::set_up(); @@ -75,22 +73,12 @@ public function test_got_url_rewrite( $expected, $mod_rewrite, $is_nginx_val, $i remove_filter( 'got_rewrite', $mod_rewrite ? '__return_true' : '__return_false' ); if ( null !== $filter_val ) { remove_filter( 'got_url_rewrite', $filter_val ? '__return_true' : '__return_false' ); - } } /** * Data provider for test_got_url_rewrite. * - * @return array[] { - * @type bool $expected The expected result. - * @type bool $mod_rewrite Whether mod_rewrite is supported. - * @type bool $is_nginx Whether server is nginx. - * @type bool $is_caddy Whether server is Caddy. - * @type bool $iis7_perm Whether IIS7 supports permalinks. - * @type bool|null $filter_val Optional filter value. - * } - * - * @phpstan-return array