General: Introduce WP_DEVELOPMENT_MODE constant to signify context-specific development mode.

In recent releases, WordPress core added several instances of cache usage around specific files. While those caches are safe to use in a production context, in development certain nuances apply for whether or not those caches make sense to use. Initially, `WP_DEBUG` was used as a temporary workaround, but it was clear that a more granular method to signify a specific development mode was required: For example, caches around `theme.json` should be disabled when working on a theme as otherwise it would disrupt the theme developer's workflow, but when working on a plugin or WordPress core, this consideration does not apply.

This changeset introduces a `WP_DEVELOPMENT_MODE` constant which, for now, can be set to either "core", "plugin", "theme", or an empty string, the latter of which means no development mode, which is also the default. A new function `wp_get_development_mode()` is the recommended way to retrieve that configuration value.

With the new function available, this changeset replaces all existing instances of the aforementioned `WP_DEBUG` workaround to use `wp_get_development_mode()` with a more specific check.

Props azaozz, sergeybiryukov, peterwilsoncc, spacedmonkey.
Fixes #57487.


git-svn-id: https://develop.svn.wordpress.org/trunk@56042 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Felix Arntz
2023-06-26 19:55:28 +00:00
parent 88de9a9d8e
commit 4a16702090
8 changed files with 160 additions and 21 deletions

View File

@@ -0,0 +1,46 @@
<?php
/**
* Unit tests for `wp_get_development_mode()`.
*
* @package WordPress
* @subpackage UnitTests
* @since 6.3.0
*
* @group load.php
* @covers ::wp_get_development_mode
*/
class Test_WP_Get_Development_Mode extends WP_UnitTestCase {
/**
* Tests that `wp_get_development_mode()` returns the value of the `WP_DEVELOPMENT_MODE` constant.
*
* @ticket 57487
*/
public function test_wp_get_development_mode_constant() {
$this->assertSame( WP_DEVELOPMENT_MODE, wp_get_development_mode() );
}
/**
* Tests that `wp_get_development_mode()` allows test overrides.
*
* @ticket 57487
*/
public function test_wp_get_development_mode_test_overrides() {
global $_wp_tests_development_mode;
$_wp_tests_development_mode = 'plugin';
$this->assertSame( 'plugin', wp_get_development_mode() );
}
/**
* Tests that `wp_get_development_mode()` ignores invalid filter values.
*
* @ticket 57487
*/
public function test_wp_get_development_mode_filter_invalid_value() {
global $_wp_tests_development_mode;
$_wp_tests_development_mode = 'invalid';
$this->assertSame( '', wp_get_development_mode() );
}
}