From 03c4b346094e26bcd3fb5309b0979b95f68d3856 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Thu, 24 Nov 2022 20:06:53 -0500 Subject: [PATCH 1/3] test for wp_maybe_load_widgets --- .../tests/functions/wpMaybeLoadWidgets.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 tests/phpunit/tests/functions/wpMaybeLoadWidgets.php diff --git a/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php new file mode 100644 index 0000000000000..2bc07c66dea85 --- /dev/null +++ b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php @@ -0,0 +1,31 @@ +assertFalse( class_exists( 'WP_Nav_Menu_Widget' ) ); + $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); + + add_filter( 'load_default_widgets', '__return_false' ); + wp_maybe_load_widgets(); + remove_filter( 'load_default_widgets', '__return_false' ); + + $this->assertFalse( class_exists( 'WP_Nav_Menu_Widget' ) ); + $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); + + wp_maybe_load_widgets(); + + $this->assertTrue( class_exists( 'WP_Nav_Menu_Widget' ) ); + $this->assertTrue( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); + + } +} From f1370da3a1f90dc1e0860cf974ad71e6db0e0103 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Fri, 26 Jun 2026 13:38:56 -0400 Subject: [PATCH 2/3] Update tests/phpunit/tests/functions/wpMaybeLoadWidgets.php Co-authored-by: Colin Stewart <79332690+costdev@users.noreply.github.com> --- tests/phpunit/tests/functions/wpMaybeLoadWidgets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php index 2bc07c66dea85..d05006d546d45 100644 --- a/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php +++ b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php @@ -5,7 +5,7 @@ * @group functions.php * * @covers ::wp_maybe_load_widgets - */# + */ class Tests_Functions_WpMaybeLoadWidgets extends WP_UnitTestCase { /** From f8733f6ceec0f2e805189e5e5ff6a96b33a5d155 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Fri, 26 Jun 2026 13:53:31 -0400 Subject: [PATCH 3/3] Handle cases where `WP_Nav_Menu_Widget` class is already loaded in `test_wp_maybe_load_widgets`. --- .../tests/functions/wpMaybeLoadWidgets.php | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php index 2bc07c66dea85..5cfd86bdfefb8 100644 --- a/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php +++ b/tests/phpunit/tests/functions/wpMaybeLoadWidgets.php @@ -12,20 +12,22 @@ class Tests_Functions_WpMaybeLoadWidgets extends WP_UnitTestCase { * @ticket 57201 */ public function test_wp_maybe_load_widgets() { - $this->assertFalse( class_exists( 'WP_Nav_Menu_Widget' ) ); - $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); + // If the class already exists, we can't test the initial "not loaded" state. + if ( ! class_exists( 'WP_Nav_Menu_Widget' ) ) { + $this->assertFalse( class_exists( 'WP_Nav_Menu_Widget' ), 'WP_Nav_Menu_Widget class should not be loaded initially.' ); + $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ), 'wp_widgets_add_menu should not be hooked to _admin_menu initially.' ); - add_filter( 'load_default_widgets', '__return_false' ); - wp_maybe_load_widgets(); - remove_filter( 'load_default_widgets', '__return_false' ); + add_filter( 'load_default_widgets', '__return_false' ); + wp_maybe_load_widgets(); + remove_filter( 'load_default_widgets', '__return_false' ); - $this->assertFalse( class_exists( 'WP_Nav_Menu_Widget' ) ); - $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); + $this->assertFalse( class_exists( 'WP_Nav_Menu_Widget' ), 'WP_Nav_Menu_Widget class should not be loaded when load_default_widgets filter returns false.' ); + $this->assertFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ), 'wp_widgets_add_menu should not be hooked to _admin_menu when load_default_widgets filter returns false.' ); + } wp_maybe_load_widgets(); - $this->assertTrue( class_exists( 'WP_Nav_Menu_Widget' ) ); - $this->assertTrue( has_action( '_admin_menu', 'wp_widgets_add_menu' ) ); - + $this->assertTrue( class_exists( 'WP_Nav_Menu_Widget' ), 'WP_Nav_Menu_Widget class should be loaded.' ); + $this->assertNotFalse( has_action( '_admin_menu', 'wp_widgets_add_menu' ), 'wp_widgets_add_menu should be hooked to _admin_menu.' ); } }