-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Backport theme.json tests from Core #58476
Merged
Merged
Changes from all commits
Commits
Show all changes
20 commits
Select commit
Hold shift + click to select a range
b4e0826
Merge class-wp-theme-json-resolver-test tests from core
ajlende 6b17bf3
Merge class-wp-theme-json-schema-test tests from core
ajlende 5515177
Fix PHP lint
ajlende a0e0d70
Fix PHP lint
ajlende ab49684
Merge class-wp-rest-global-styles-controller-gutenberg-test.php tests…
ajlende 9506fa2
Add comments for diff with core
ajlende 4b01428
Fix doc comment type
ajlende e59cea4
Clean up theme support at the end of the test
ajlende c75829f
Add comments from core
ajlende 28d387c
Disable phpcs unused var warning
ajlende 2c3af7f
Switch theme at beginning of test
ajlende ebb38a4
Merge class-wp-theme-json-test get_stylesheet tests from Core
ajlende a4c5a00
Merge more class-wp-theme-json-test tests from Core
ajlende 51756c4
Finish merging class-wp-theme-json-test tests from Core
ajlende 6e31182
Fix merged tests for GB new features
ajlende e779a7c
Fix spacing to match core
ajlende 5ee08b4
Fix after rebasing backport
ajlende c7724f6
Clean up resolver tests
ajlende f50f857
Clean up rest controller tests
ajlende da92f2e
Fix class name in WP_REST_Global_Styles_Controller_Gutenberg_Test com…
ajlende File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -695,7 +695,7 @@ public function __construct( $theme_json = array(), $origin = 'theme' ) { | |
$origin = 'theme'; | ||
} | ||
|
||
$this->theme_json = WP_Theme_JSON_Schema::migrate( $theme_json ); | ||
$this->theme_json = WP_Theme_JSON_Schema_Gutenberg::migrate( $theme_json ); | ||
$registry = WP_Block_Type_Registry::get_instance(); | ||
$valid_block_names = array_keys( $registry->get_all_registered() ); | ||
$valid_element_names = array_keys( static::ELEMENTS ); | ||
|
@@ -2638,7 +2638,7 @@ public function get_root_layout_rules( $selector, $block_metadata ) { | |
$css .= '--wp--style--global--wide-size: ' . $wide_size . ';'; | ||
} | ||
|
||
$css .= '}'; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There were a bunch of places in the tests where this was different from core, so I figured I'd just add the space to make them the same. This is the only non-test change. |
||
$css .= ' }'; | ||
|
||
if ( $use_root_padding ) { | ||
// Top and bottom padding are applied to the outer block container. | ||
|
@@ -2723,7 +2723,7 @@ protected static function get_metadata_boolean( $data, $path, $default_value = f | |
* @since 5.8.0 | ||
* @since 5.9.0 Duotone preset also has origins. | ||
* | ||
* @param WP_Theme_JSON $incoming Data to merge. | ||
* @param WP_Theme_JSON_Gutenberg $incoming Data to merge. | ||
*/ | ||
public function merge( $incoming ) { | ||
$incoming_data = $incoming->get_raw_data(); | ||
|
@@ -2997,7 +2997,7 @@ protected static function filter_slugs( $node, $slugs ) { | |
public static function remove_insecure_properties( $theme_json ) { | ||
$sanitized = array(); | ||
|
||
$theme_json = WP_Theme_JSON_Schema::migrate( $theme_json ); | ||
$theme_json = WP_Theme_JSON_Schema_Gutenberg::migrate( $theme_json ); | ||
|
||
$valid_block_names = array_keys( static::get_blocks_metadata() ); | ||
$valid_element_names = array_keys( static::ELEMENTS ); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
<?php | ||
/** | ||
* WP_Theme_JSON_Schema_Gutenberg class | ||
* | ||
* @package Gutenberg | ||
* @since 5.9.0 | ||
*/ | ||
|
||
if ( class_exists( 'WP_Theme_JSON_Schema_Gutenberg' ) ) { | ||
return; | ||
} | ||
|
||
/** | ||
* Class that migrates a given theme.json structure to the latest schema. | ||
* | ||
* This class is for internal core usage and is not supposed to be used by extenders (plugins and/or themes). | ||
* This is a low-level API that may need to do breaking changes. Please, | ||
* use get_global_settings, get_global_styles, and get_global_stylesheet instead. | ||
* | ||
* @since 5.9.0 | ||
* @access private | ||
*/ | ||
#[AllowDynamicProperties] | ||
class WP_Theme_JSON_Schema_Gutenberg { | ||
|
||
/** | ||
* Maps old properties to their new location within the schema's settings. | ||
* This will be applied at both the defaults and individual block levels. | ||
*/ | ||
const V1_TO_V2_RENAMED_PATHS = array( | ||
'border.customRadius' => 'border.radius', | ||
'spacing.customMargin' => 'spacing.margin', | ||
'spacing.customPadding' => 'spacing.padding', | ||
'typography.customLineHeight' => 'typography.lineHeight', | ||
); | ||
|
||
/** | ||
* Function that migrates a given theme.json structure to the last version. | ||
* | ||
* @since 5.9.0 | ||
* | ||
* @param array $theme_json The structure to migrate. | ||
* | ||
* @return array The structure in the last version. | ||
*/ | ||
public static function migrate( $theme_json ) { | ||
if ( ! isset( $theme_json['version'] ) ) { | ||
$theme_json = array( | ||
'version' => WP_Theme_JSON::LATEST_SCHEMA, | ||
); | ||
} | ||
|
||
if ( 1 === $theme_json['version'] ) { | ||
$theme_json = self::migrate_v1_to_v2( $theme_json ); | ||
} | ||
|
||
return $theme_json; | ||
} | ||
|
||
/** | ||
* Removes the custom prefixes for a few properties | ||
* that were part of v1: | ||
* | ||
* 'border.customRadius' => 'border.radius', | ||
* 'spacing.customMargin' => 'spacing.margin', | ||
* 'spacing.customPadding' => 'spacing.padding', | ||
* 'typography.customLineHeight' => 'typography.lineHeight', | ||
* | ||
* @since 5.9.0 | ||
* | ||
* @param array $old Data to migrate. | ||
* | ||
* @return array Data without the custom prefixes. | ||
*/ | ||
private static function migrate_v1_to_v2( $old ) { | ||
// Copy everything. | ||
$new = $old; | ||
|
||
// Overwrite the things that changed. | ||
if ( isset( $old['settings'] ) ) { | ||
$new['settings'] = self::rename_paths( $old['settings'], self::V1_TO_V2_RENAMED_PATHS ); | ||
} | ||
|
||
// Set the new version. | ||
$new['version'] = 2; | ||
|
||
return $new; | ||
} | ||
|
||
/** | ||
* Processes the settings subtree. | ||
* | ||
* @since 5.9.0 | ||
* | ||
* @param array $settings Array to process. | ||
* @param array $paths_to_rename Paths to rename. | ||
* | ||
* @return array The settings in the new format. | ||
*/ | ||
private static function rename_paths( $settings, $paths_to_rename ) { | ||
$new_settings = $settings; | ||
|
||
// Process any renamed/moved paths within default settings. | ||
self::rename_settings( $new_settings, $paths_to_rename ); | ||
|
||
// Process individual block settings. | ||
if ( isset( $new_settings['blocks'] ) && is_array( $new_settings['blocks'] ) ) { | ||
foreach ( $new_settings['blocks'] as &$block_settings ) { | ||
self::rename_settings( $block_settings, $paths_to_rename ); | ||
} | ||
} | ||
|
||
return $new_settings; | ||
} | ||
|
||
/** | ||
* Processes a settings array, renaming or moving properties. | ||
* | ||
* @since 5.9.0 | ||
* | ||
* @param array $settings Reference to settings either defaults or an individual block's. | ||
* @param array $paths_to_rename Paths to rename. | ||
*/ | ||
private static function rename_settings( &$settings, $paths_to_rename ) { | ||
foreach ( $paths_to_rename as $original => $renamed ) { | ||
$original_path = explode( '.', $original ); | ||
$renamed_path = explode( '.', $renamed ); | ||
$current_value = _wp_array_get( $settings, $original_path, null ); | ||
|
||
if ( null !== $current_value ) { | ||
_wp_array_set( $settings, $renamed_path, $current_value ); | ||
self::unset_setting_by_path( $settings, $original_path ); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Removes a property from within the provided settings by its path. | ||
* | ||
* @since 5.9.0 | ||
* | ||
* @param array $settings Reference to the current settings array. | ||
* @param array $path Path to the property to be removed. | ||
*/ | ||
private static function unset_setting_by_path( &$settings, $path ) { | ||
$tmp_settings = &$settings; // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable | ||
$last_key = array_pop( $path ); | ||
foreach ( $path as $key ) { | ||
$tmp_settings = &$tmp_settings[ $key ]; | ||
} | ||
|
||
unset( $tmp_settings[ $last_key ] ); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be great if this renaming was part of the build process....