diff --git a/changelog.txt b/changelog.txt
index b24b8294744d6..193fe8dfe70f6 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,22 @@
== Changelog ==
+= 17.5.1 =
+
+## Changelog
+
+### Bug Fixes
+
+- (Preferences)(hotfix)(17.5) Hotfix for missing preferences in the `core` scope([58031](https://github.com/WordPress/gutenberg/pull/58031))
+
+## Contributors
+
+The following contributors merged PRs in this release:
+
+@youknowriad @fullofcaffeine
+
+
+
+
= 17.5.0 =
## Changelog
diff --git a/docs/contributors/code/back-merging-to-wp-core.md b/docs/contributors/code/back-merging-to-wp-core.md
new file mode 100644
index 0000000000000..2b1ec77df1e55
--- /dev/null
+++ b/docs/contributors/code/back-merging-to-wp-core.md
@@ -0,0 +1,31 @@
+# Back-merging code to WordPress Core
+
+For major releases of the WordPress software, Gutenberg features need to be merged into WordPress Core. Typically this involves taking changes made in `.php` files within the Gutenberg repository and making the equivalent updates in the WP Core codebase.
+
+## Files/Directories
+
+Changes to files within the following files/directories will typically require back-merging to WP Core:
+
+- `lib/`
+- `phpunit/`
+
+## Ignored directories/files
+
+The following directories/files do _not_ require back-merging to WP Core:
+
+- `lib/load.php` - Plugin specific code.
+- `lib/experiments-page.php` - experiments are Plugin specific.
+- `packages/block-library` - this is handled automatically during the packages sync process.
+- `packages/e2e-tests/plugins` - PHP files related to e2e tests only. Mostly fixture data generators.
+- `phpunit/blocks` - the code is maintained in Gutenberg so the test should be as well.
+
+Please note this list is not exhaustive.
+
+## Pull Request Criteria
+
+In general, all PHP code committed to the Gutenberg repository since the date of the final Gutenberg release that was included in [the _last_ stable WP Core release](https://developer.wordpress.org/block-editor/contributors/versions-in-wordpress/) should be considered for back merging to WP Core.
+
+There are however certain exceptions to that rule. PRs with the following criteria do _not_ require back-merging to WP Core:
+
+- Does not contain changes to PHP code.
+- Has label `Backport from WordPress Core` - this code is already in WP Core.
diff --git a/docs/reference-guides/filters/block-filters.md b/docs/reference-guides/filters/block-filters.md
index 4c7e3df7cec12..7e164a10e6c93 100644
--- a/docs/reference-guides/filters/block-filters.md
+++ b/docs/reference-guides/filters/block-filters.md
@@ -19,11 +19,11 @@ _Example_:
```php
post ) ) {
return array( 'core/paragraph', 'core/heading' );
}
return $allowed_block_types;
}
-add_filter( 'allowed_block_types_all', 'filter_allowed_block_types_when_post_provided', 10, 2 );
+add_filter( 'allowed_block_types_all', 'wpdocs_filter_allowed_block_types_when_post_provided', 10, 2 );
```
## Managing block categories
@@ -374,7 +374,7 @@ It is possible to filter the list of default block categories using the `block_c
post ) ) {
array_push(
$block_categories,
@@ -388,7 +388,7 @@ function filter_block_categories_when_post_provided( $block_categories, $editor_
return $block_categories;
}
-add_filter( 'block_categories_all', 'filter_block_categories_when_post_provided', 10, 2 );
+add_filter( 'block_categories_all', 'wpdocs_filter_block_categories_when_post_provided', 10, 2 );
```
### `wp.blocks.updateCategory`
diff --git a/docs/reference-guides/filters/editor-filters.md b/docs/reference-guides/filters/editor-filters.md
index 59f6d7ef8213f..943e161a1df49 100644
--- a/docs/reference-guides/filters/editor-filters.md
+++ b/docs/reference-guides/filters/editor-filters.md
@@ -84,14 +84,14 @@ _Example:_
post ) ) {
$editor_settings['maxUploadFileSize'] = 12345;
}
return $editor_settings;
}
-add_filter( 'block_editor_settings_all', 'filter_block_editor_settings_when_post_provided', 10, 2 );
+add_filter( 'block_editor_settings_all', 'wpdocs_filter_block_editor_settings_when_post_provided', 10, 2 );
```
#### `block_editor_rest_api_preload_paths`
@@ -104,14 +104,14 @@ _Example:_
post ) ) {
array_push( $preload_paths, array( '/wp/v2/blocks', 'OPTIONS' ) );
}
return $preload_paths;
}
-add_filter( 'block_editor_rest_api_preload_paths', 'filter_block_editor_rest_api_preload_paths_when_post_provided', 10, 2 );
+add_filter( 'block_editor_rest_api_preload_paths', 'wpdocs_filter_block_editor_rest_api_preload_paths_when_post_provided', 10, 2 );
```
### Available default editor settings
diff --git a/docs/reference-guides/filters/global-styles-filters.md b/docs/reference-guides/filters/global-styles-filters.md
index 7d3b6be95768b..59bbbfcd5921d 100644
--- a/docs/reference-guides/filters/global-styles-filters.md
+++ b/docs/reference-guides/filters/global-styles-filters.md
@@ -14,7 +14,7 @@ _Example:_
This is how to pass a new color palette for the theme and disable the text color UI:
```php
-function filter_theme_json_theme( $theme_json ){
+function wpdocs_filter_theme_json_theme( $theme_json ){
$new_data = array(
'version' => 2,
'settings' => array(
@@ -38,5 +38,5 @@ function filter_theme_json_theme( $theme_json ){
return $theme_json->update_with( $new_data );
}
-add_filter( 'wp_theme_json_data_theme', 'filter_theme_json_theme' );
+add_filter( 'wp_theme_json_data_theme', 'wpdocs_filter_theme_json_theme' );
```
diff --git a/docs/reference-guides/filters/parser-filters.md b/docs/reference-guides/filters/parser-filters.md
index 3acfb2489182d..7adc68cc0bf7e 100644
--- a/docs/reference-guides/filters/parser-filters.md
+++ b/docs/reference-guides/filters/parser-filters.md
@@ -26,11 +26,11 @@ class EmptyParser {
}
}
-function my_plugin_select_empty_parser( $prev_parser_class ) {
+function wpdocs_select_empty_parser( $prev_parser_class ) {
return 'EmptyParser';
}
-add_filter( 'block_parser_class', 'my_plugin_select_empty_parser', 10, 1 );
+add_filter( 'block_parser_class', 'wpdocs_select_empty_parser', 10, 1 );
```
> **Note**: At the present time it's not possible to replace the client-side parser.
diff --git a/lib/class-wp-theme-json-gutenberg.php b/lib/class-wp-theme-json-gutenberg.php
index a063ab34d9069..f4266a7ef66dd 100644
--- a/lib/class-wp-theme-json-gutenberg.php
+++ b/lib/class-wp-theme-json-gutenberg.php
@@ -1010,7 +1010,7 @@ protected static function get_blocks_metadata() {
if ( $duotone_support ) {
$root_selector = wp_get_block_css_selector( $block_type );
- $duotone_selector = WP_Theme_JSON_Gutenberg::scope_selector( $root_selector, $duotone_support );
+ $duotone_selector = static::scope_selector( $root_selector, $duotone_support );
}
}
@@ -1185,7 +1185,7 @@ public function get_stylesheet( $types = array( 'variables', 'styles', 'presets'
$setting_nodes[ $root_settings_key ]['selector'] = $options['root_selector'];
}
if ( false !== $root_style_key ) {
- $setting_nodes[ $root_style_key ]['selector'] = $options['root_selector'];
+ $style_nodes[ $root_style_key ]['selector'] = $options['root_selector'];
}
}
diff --git a/lib/experimental/fonts-api/bc-layer/class-gutenberg-fonts-api-bc-layer.php b/lib/experimental/fonts-api/bc-layer/class-gutenberg-fonts-api-bc-layer.php
deleted file mode 100644
index 8c85976987523..0000000000000
--- a/lib/experimental/fonts-api/bc-layer/class-gutenberg-fonts-api-bc-layer.php
+++ /dev/null
@@ -1,96 +0,0 @@
-variation_property_defaults = apply_filters( 'wp_webfont_variation_defaults', $this->variation_property_defaults );
-
- /**
- * Fires when the WP_Webfonts instance is initialized.
- *
- * @since X.X.X
- *
- * @param WP_Web_Fonts $wp_webfonts WP_Web_Fonts instance (passed by reference).
- */
- do_action_ref_array( 'wp_default_webfonts', array( &$this ) );
- }
-
- /**
- * Get the list of registered providers.
- *
- * @since X.X.X
- *
- * @return array $providers {
- * An associative array of registered providers, keyed by their unique ID.
- *
- * @type string $provider_id => array {
- * An associate array of provider's class name and fonts.
- *
- * @type string $class_name Fully qualified name of the provider's class.
- * @type string[] $fonts An array of enqueued font handles for this provider.
- * }
- * }
- */
- public function get_providers() {
- return $this->providers;
- }
-
- /**
- * Register a provider.
- *
- * @since X.X.X
- *
- * @param string $provider_id The provider's unique ID.
- * @param string $class_name The provider class name.
- * @return bool True if successfully registered, else false.
- */
- public function register_provider( $provider_id, $class_name ) {
- if ( empty( $provider_id ) || empty( $class_name ) || ! class_exists( $class_name ) ) {
- return false;
- }
-
- $this->providers[ $provider_id ] = array(
- 'class' => $class_name,
- 'fonts' => array(),
- );
- return true;
- }
-
- /**
- * Get the list of all registered font family handles.
- *
- * @since X.X.X
- *
- * @return string[]
- */
- public function get_registered_font_families() {
- $font_families = array();
- foreach ( $this->registered as $handle => $obj ) {
- if ( $obj->extra['is_font_family'] ) {
- $font_families[] = $handle;
- }
- }
- return $font_families;
- }
-
- /**
- * Get the list of all registered font families and their variations.
- *
- * @since X.X.X
- *
- * @return string[]
- */
- public function get_registered() {
- return array_keys( $this->registered );
- }
-
- /**
- * Get the list of enqueued font families and their variations.
- *
- * @since X.X.X
- *
- * @return array[]
- */
- public function get_enqueued() {
- return $this->queue;
- }
-
- /**
- * Registers a font family.
- *
- * @since X.X.X
- *
- * @param string $font_family Font family name to register.
- * @return string|null Font family handle when registration successes. Null on failure.
- */
- public function add_font_family( $font_family ) {
- $font_family_handle = WP_Fonts_Utils::convert_font_family_into_handle( $font_family );
- if ( ! $font_family_handle ) {
- return null;
- }
-
- if ( isset( $this->registered[ $font_family_handle ] ) ) {
- return $font_family_handle;
- }
-
- $registered = $this->add( $font_family_handle, false );
- if ( ! $registered ) {
- return null;
- }
-
- $this->add_data( $font_family_handle, 'font-properties', array( 'font-family' => $font_family ) );
- $this->add_data( $font_family_handle, 'is_font_family', true );
-
- return $font_family_handle;
- }
-
- /**
- * Removes a font family and all registered variations.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle The font family to remove.
- */
- public function remove_font_family( $font_family_handle ) {
- if ( ! isset( $this->registered[ $font_family_handle ] ) ) {
- return;
- }
-
- $variations = $this->registered[ $font_family_handle ]->deps;
-
- foreach ( $variations as $variation ) {
- $this->remove( $variation );
- }
-
- $this->remove( $font_family_handle );
- }
-
- /**
- * Add a variation to an existing family or register family if none exists.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- * @param string $variation_handle Optional. The variation's handle. When none is provided, the
- * handle will be dynamically generated.
- * Default empty string.
- * @return string|null Variation handle on success. Else null.
- */
- public function add_variation( $font_family_handle, array $variation, $variation_handle = '' ) {
- if ( ! WP_Fonts_Utils::is_defined( $font_family_handle ) ) {
- trigger_error( 'Font family handle must be a non-empty string.' );
- return null;
- }
-
- // When there is a variation handle, check it.
- if ( '' !== $variation_handle && ! WP_Fonts_Utils::is_defined( $variation_handle ) ) {
- trigger_error( 'Variant handle must be a non-empty string.' );
- return null;
- }
-
- // Register the font family when it does not yet exist.
- if ( ! isset( $this->registered[ $font_family_handle ] ) ) {
- if ( ! $this->add_font_family( $font_family_handle ) ) {
- return null;
- }
- }
-
- $variation = $this->validate_variation( $variation );
-
- // Variation validation failed.
- if ( ! $variation ) {
- return null;
- }
-
- // When there's no variation handle, attempt to create one.
- if ( '' === $variation_handle ) {
- $variation_handle = WP_Fonts_Utils::convert_variation_into_handle( $font_family_handle, $variation );
- if ( is_null( $variation_handle ) ) {
- return null;
- }
- }
-
- // Bail out if the variant is already registered.
- if ( $this->is_variation_registered( $font_family_handle, $variation_handle ) ) {
- return $variation_handle;
- }
-
- $variation_src = array_key_exists( 'src', $variation ) ? $variation['src'] : false;
- $result = $this->add( $variation_handle, $variation_src );
-
- // Bail out if the registration failed.
- if ( ! $result ) {
- return null;
- }
-
- $this->add_data( $variation_handle, 'font-properties', $variation );
- $this->add_data( $variation_handle, 'is_font_family', false );
-
- // Add the font variation as a dependency to the registered font family.
- $this->add_dependency( $font_family_handle, $variation_handle );
-
- $this->providers[ $variation['provider'] ]['fonts'][] = $variation_handle;
-
- return $variation_handle;
- }
-
- /**
- * Removes a variation.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle The font family for this variation.
- * @param string $variation_handle The variation's handle to remove.
- */
- public function remove_variation( $font_family_handle, $variation_handle ) {
- if ( isset( $this->registered[ $variation_handle ] ) ) {
- $this->remove( $variation_handle );
- }
-
- if ( ! $this->is_variation_registered( $font_family_handle, $variation_handle ) ) {
- return;
- }
-
- // Remove the variation as a dependency from its font family.
- $this->registered[ $font_family_handle ]->deps = array_values(
- array_diff(
- $this->registered[ $font_family_handle ]->deps,
- array( $variation_handle )
- )
- );
- }
-
- /**
- * Checks if the variation is registered.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param string $variation_handle Variation's handle.
- * @return bool True when registered to the given font family. Else false.
- */
- private function is_variation_registered( $font_family_handle, $variation_handle ) {
- if ( ! isset( $this->registered[ $font_family_handle ] ) ) {
- return false;
- }
-
- return in_array( $variation_handle, $this->registered[ $font_family_handle ]->deps, true );
- }
-
- /**
- * Adds a variation as a dependency to the given font family.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param string $variation_handle The variation's handle.
- */
- private function add_dependency( $font_family_handle, $variation_handle ) {
- $this->registered[ $font_family_handle ]->deps[] = $variation_handle;
- }
-
- /**
- * Validates and sanitizes a variation.
- *
- * @since X.X.X
- *
- * @param array $variation Variation properties to add.
- * @return false|array Validated variation on success. Else, false.
- */
- private function validate_variation( $variation ) {
- $variation = wp_parse_args( $variation, $this->variation_property_defaults );
-
- // Check the font-family.
- if ( empty( $variation['font-family'] ) || ! is_string( $variation['font-family'] ) ) {
- trigger_error( 'Webfont font-family must be a non-empty string.' );
- return false;
- }
-
- // Local fonts need a "src".
- if ( 'local' === $variation['provider'] ) {
- // Make sure that local fonts have 'src' defined.
- if ( empty( $variation['src'] ) || ( ! is_string( $variation['src'] ) && ! is_array( $variation['src'] ) ) ) {
- trigger_error( 'Webfont src must be a non-empty string or an array of strings.' );
- return false;
- }
- } elseif ( ! isset( $this->providers[ $variation['provider'] ] ) ) {
- trigger_error( sprintf( 'The provider "%s" is not registered', $variation['provider'] ) );
- return false;
- } elseif ( ! class_exists( $this->providers[ $variation['provider'] ]['class'] ) ) {
- trigger_error( sprintf( 'The provider class "%s" does not exist', $variation['provider'] ) );
- return false;
- }
-
- // Validate the 'src' property.
- if ( ! empty( $variation['src'] ) ) {
- foreach ( (array) $variation['src'] as $src ) {
- if ( empty( $src ) || ! is_string( $src ) ) {
- trigger_error( 'Each webfont src must be a non-empty string.' );
- return false;
- }
- }
- }
-
- // Check the font-weight.
- if ( ! is_string( $variation['font-weight'] ) && ! is_int( $variation['font-weight'] ) ) {
- trigger_error( 'Webfont font-weight must be a properly formatted string or integer.' );
- return false;
- }
-
- // Check the font-display.
- if ( ! in_array( $variation['font-display'], array( 'auto', 'block', 'fallback', 'swap', 'optional' ), true ) ) {
- $variation['font-display'] = 'fallback';
- }
-
- $valid_props = array(
- 'ascent-override',
- 'descent-override',
- 'font-display',
- 'font-family',
- 'font-stretch',
- 'font-style',
- 'font-weight',
- 'font-variant',
- 'font-feature-settings',
- 'font-variation-settings',
- 'line-gap-override',
- 'size-adjust',
- 'src',
- 'unicode-range',
-
- // Exceptions.
- 'provider',
- );
-
- foreach ( $variation as $prop => $value ) {
- if ( ! in_array( $prop, $valid_props, true ) ) {
- unset( $variation[ $prop ] );
- }
- }
-
- return $variation;
- }
-
- /**
- * Processes the items and dependencies.
- *
- * Processes the items passed to it or the queue, and their dependencies.
- *
- * @since X.X.X
- *
- * @param string|string[]|bool $handles Optional. Items to be processed: queue (false),
- * single item (string), or multiple items (array of strings).
- * Default false.
- * @param int|false $group Optional. Group level: level (int), no group (false).
- *
- * @return array|string[] Array of web font handles that have been processed.
- * An empty array if none were processed.
- */
- public function do_items( $handles = false, $group = false ) {
- $handles = $this->prepare_handles_for_printing( $handles );
-
- if ( empty( $handles ) ) {
- return $this->done;
- }
-
- $this->all_deps( $handles );
- if ( empty( $this->to_do ) ) {
- return $this->done;
- }
-
- $this->to_do_keyed_handles = array_flip( $this->to_do );
-
- foreach ( $this->get_providers() as $provider_id => $provider ) {
- // Alert and skip if the provider class does not exist.
- if ( ! class_exists( $provider['class'] ) ) {
- /* translators: %s is the provider name. */
- trigger_error(
- sprintf(
- 'Class "%s" not found for "%s" web font provider',
- $provider['class'],
- $provider_id
- )
- );
- continue;
- }
-
- $this->do_item( $provider_id, $group );
- }
-
- $this->process_font_families_after_printing( $handles );
-
- return $this->done;
- }
-
- /**
- * Prepares the given handles for printing.
- *
- * @since X.X.X
- *
- * @param string|string[]|bool $handles Optional. Handles to prepare.
- * Default false.
- * @return array Array of handles.
- */
- private function prepare_handles_for_printing( $handles = false ) {
- if ( false !== $handles ) {
- $handles = $this->validate_handles( $handles );
- // Bail out when invalid.
- if ( empty( $handles ) ) {
- return array();
- }
- }
-
- // Use the enqueued queue.
- if ( empty( $handles ) ) {
- if ( empty( $this->queue ) ) {
- return array();
- }
- $handles = $this->queue;
- }
-
- return $handles;
- }
-
- /**
- * Validates handle(s) to ensure each is a non-empty string.
- *
- * @since X.X.X
- *
- * @param string|string[] $handles Handles to prepare.
- * @return string[]|null Array of handles on success. Else null.
- */
- private function validate_handles( $handles ) {
- // Validate each element is a non-empty string handle.
- $handles = array_filter( (array) $handles, array( WP_Fonts_Utils::class, 'is_defined' ) );
-
- if ( empty( $handles ) ) {
- trigger_error( 'Handles must be a non-empty string or array of non-empty strings' );
- return null;
- }
-
- return $handles;
- }
-
- /**
- * Invokes each provider to process and print its styles.
- *
- * @since X.X.X
- *
- * @see WP_Dependencies::do_item()
- *
- * @param string $provider_id The provider to process.
- * @param int|false $group Not used.
- * @return bool
- */
- public function do_item( $provider_id, $group = false ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
- // Bail out if the provider is not registered.
- if ( ! isset( $this->providers[ $provider_id ] ) ) {
- return false;
- }
-
- $font_handles = $this->get_enqueued_fonts_for_provider( $provider_id );
- if ( empty( $font_handles ) ) {
- return false;
- }
-
- $properties_by_font = $this->get_font_properties_for_provider( $font_handles );
- if ( empty( $properties_by_font ) ) {
- return false;
- }
-
- // Invoke provider to print its styles.
- $provider = $this->get_provider_instance( $provider_id );
- $provider->set_fonts( $properties_by_font );
- $provider->print_styles();
-
- // Clean up.
- $this->update_queues_for_printed_fonts( $font_handles );
-
- return true;
- }
-
- /**
- * Retrieves a list of enqueued web font variations for a provider.
- *
- * @since X.X.X
- *
- * @param string $provider_id The provider to process.
- * @return array[] Webfonts organized by providers.
- */
- private function get_enqueued_fonts_for_provider( $provider_id ) {
- $providers = $this->get_providers();
-
- if ( empty( $providers[ $provider_id ] ) ) {
- return array();
- }
-
- return array_intersect(
- $providers[ $provider_id ]['fonts'],
- $this->to_do
- );
- }
-
- /**
- * Gets a list of font properties for each of the given font handles.
- *
- * @since X.X.X
- *
- * @param array $font_handles Font handles to get properties.
- * @return array A list of fonts with each font's properties.
- */
- private function get_font_properties_for_provider( array $font_handles ) {
- $font_properties = array();
-
- foreach ( $font_handles as $font_handle ) {
- $properties = $this->get_data( $font_handle, 'font-properties' );
- if ( ! $properties ) {
- continue;
- }
- $font_properties[ $font_handle ] = $properties;
- }
-
- return $font_properties;
- }
-
- /**
- * Gets the instance of the provider from the WP_Webfonts::$provider_instance store.
- *
- * @since X.X.X
- *
- * @param string $provider_id The provider to get.
- * @return object Instance of the provider.
- */
- private function get_provider_instance( $provider_id ) {
- if ( ! isset( $this->provider_instances[ $provider_id ] ) ) {
- $this->provider_instances[ $provider_id ] = new $this->providers[ $provider_id ]['class']();
- }
- return $this->provider_instances[ $provider_id ];
- }
-
- /**
- * Update queues for the given printed fonts.
- *
- * @since X.X.X
- *
- * @param array $font_handles Font handles to get properties.
- */
- private function update_queues_for_printed_fonts( array $font_handles ) {
- foreach ( $font_handles as $font_handle ) {
- $this->set_as_done( $font_handle );
- $this->remove_from_to_do_queues( $font_handle );
- }
- }
-
- /**
- * Processes the font families after printing the variations.
- *
- * For each queued font family:
- *
- * a. if any of their variations were printed, the font family is added to the `done` list.
- * b. removes each from the to_do queues.
- *
- * @since X.X.X
- *
- * @param array $handles Handles to process.
- */
- private function process_font_families_after_printing( array $handles ) {
- foreach ( $handles as $handle ) {
- if (
- ! $this->get_data( $handle, 'is_font_family' ) ||
- ! isset( $this->to_do_keyed_handles[ $handle ] )
- ) {
- continue;
- }
- $font_family = $this->registered[ $handle ];
-
- // Add the font family to `done` list if any of its variations were printed.
- if ( ! empty( $font_family->deps ) ) {
- $processed = array_intersect( $font_family->deps, $this->done );
- if ( ! empty( $processed ) ) {
- $this->set_as_done( $handle );
- }
- }
-
- $this->remove_from_to_do_queues( $handle );
- }
- }
-
- /**
- * Removes the handle from the `to_do` and `to_do_keyed_handles` lists.
- *
- * @since X.X.X
- *
- * @param string $handle Handle to remove.
- */
- private function remove_from_to_do_queues( $handle ) {
- unset(
- $this->to_do[ $this->to_do_keyed_handles[ $handle ] ],
- $this->to_do_keyed_handles[ $handle ]
- );
- }
-
- /**
- * Sets the given handle to done by adding it to the `done` list.
- *
- * @since X.X.X
- *
- * @param string $handle Handle to set as done.
- */
- private function set_as_done( $handle ) {
- if ( ! is_array( $this->done ) ) {
- $this->done = array();
- }
- $this->done[] = $handle;
- }
-
- /**
- * Converts the font family and its variations into theme.json structural format.
- *
- * @since X.X.X
- *
- * @param string $font_family_handle Font family to convert.
- * @return array Webfonts in theme.json structural format.
- */
- public function to_theme_json( $font_family_handle ) {
- if ( ! isset( $this->registered[ $font_family_handle ] ) ) {
- return array();
- }
-
- $font_family_name = $this->registered[ $font_family_handle ]->extra['font-properties']['font-family'];
- $theme_json_format = array(
- 'fontFamily' => str_contains( $font_family_name, ' ' ) ? "'{$font_family_name}'" : $font_family_name,
- 'name' => $font_family_name,
- 'slug' => $font_family_handle,
- 'fontFace' => array(),
- );
-
- foreach ( $this->registered[ $font_family_handle ]->deps as $variation_handle ) {
- if ( ! isset( $this->registered[ $variation_handle ] ) ) {
- continue;
- }
-
- $variation_obj = $this->registered[ $variation_handle ];
- $variation_properties = array( 'origin' => 'gutenberg_wp_fonts_api' );
- foreach ( $variation_obj->extra['font-properties'] as $property_name => $property_value ) {
- $property_in_camelcase = lcfirst( str_replace( '-', '', ucwords( $property_name, '-' ) ) );
- $variation_properties[ $property_in_camelcase ] = $property_value;
- }
- $theme_json_format['fontFace'][ $variation_obj->handle ] = $variation_properties;
- }
-
- return $theme_json_format;
- }
-}
diff --git a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider-local.php b/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider-local.php
deleted file mode 100644
index b6fd5d78a1435..0000000000000
--- a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider-local.php
+++ /dev/null
@@ -1,284 +0,0 @@
-style_tag_atts = array( 'type' => 'text/css' );
- }
- }
-
- /**
- * Gets the `@font-face` CSS styles for locally-hosted font files.
- *
- * This method does the following processing tasks:
- * 1. Orchestrates an optimized `src` (with format) for browser support.
- * 2. Generates the `@font-face` for all its webfonts.
- *
- * For example, when given these webfonts:
- *
- * array(
- * 'source-serif-pro.normal.200 900' => array(
- * 'provider' => 'local',
- * 'font_family' => 'Source Serif Pro',
- * 'font_weight' => '200 900',
- * 'font_style' => 'normal',
- * 'src' => 'https://example.com/wp-content/themes/twentytwentytwo/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ),
- * ),
- * 'source-serif-pro.italic.400 900' => array(
- * 'provider' => 'local',
- * 'font_family' => 'Source Serif Pro',
- * 'font_weight' => '200 900',
- * 'font_style' => 'italic',
- * 'src' => 'https://example.com/wp-content/themes/twentytwentytwo/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2' ),
- * ),
- * )
- *
- *
- * the following `@font-face` styles are generated and returned:
- *
- *
- * @font-face{
- * font-family:"Source Serif Pro";
- * font-style:normal;
- * font-weight:200 900;
- * font-stretch:normal;
- * src:local("Source Serif Pro"), url('/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2') format('woff2');
- * }
- * @font-face{
- * font-family:"Source Serif Pro";
- * font-style:italic;
- * font-weight:200 900;
- * font-stretch:normal;
- * src:local("Source Serif Pro"), url('/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2') format('woff2');
- * }
- *
- *
- * @since X.X.X
- *
- * @return string The `@font-face` CSS.
- */
- public function get_css() {
- $css = '';
-
- foreach ( $this->webfonts as $webfont ) {
- // Order the webfont's `src` items to optimize for browser support.
- $webfont = $this->order_src( $webfont );
-
- // Build the @font-face CSS for this webfont.
- $css .= '@font-face{' . $this->build_font_face_css( $webfont ) . '}';
- }
-
- return $css;
- }
-
- /**
- * Order `src` items to optimize for browser support.
- *
- * @since 6.0.0
- *
- * @param array $webfont Webfont to process.
- * @return array
- */
- private function order_src( array $webfont ) {
- if ( ! is_array( $webfont['src'] ) ) {
- $webfont['src'] = (array) $webfont['src'];
- }
-
- $src = array();
- $src_ordered = array();
-
- foreach ( $webfont['src'] as $url ) {
- // Add data URIs first.
- if ( str_starts_with( trim( $url ), 'data:' ) ) {
- $src_ordered[] = array(
- 'url' => $url,
- 'format' => 'data',
- );
- continue;
- }
- $format = pathinfo( $url, PATHINFO_EXTENSION );
- $src[ $format ] = $url;
- }
-
- // Add woff2.
- if ( ! empty( $src['woff2'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['woff2'],
- 'format' => 'woff2',
- );
- }
-
- // Add woff.
- if ( ! empty( $src['woff'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['woff'],
- 'format' => 'woff',
- );
- }
-
- // Add ttf.
- if ( ! empty( $src['ttf'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['ttf'],
- 'format' => 'truetype',
- );
- }
-
- // Add eot.
- if ( ! empty( $src['eot'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['eot'],
- 'format' => 'embedded-opentype',
- );
- }
-
- // Add otf.
- if ( ! empty( $src['otf'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['otf'],
- 'format' => 'opentype',
- );
- }
- $webfont['src'] = $src_ordered;
-
- return $webfont;
- }
-
- /**
- * Builds the font-family's CSS.
- *
- * @since 6.0.0
- *
- * @param array $webfont Webfont to process.
- * @return string This font-family's CSS.
- */
- private function build_font_face_css( array $webfont ) {
- $css = '';
-
- // Wrap font-family in quotes if it contains spaces
- // and is not already wrapped in quotes.
- if (
- str_contains( $webfont['font-family'], ' ' ) &&
- ! str_contains( $webfont['font-family'], '"' ) &&
- ! str_contains( $webfont['font-family'], "'" )
- ) {
- $webfont['font-family'] = '"' . $webfont['font-family'] . '"';
- }
-
- foreach ( $webfont as $key => $value ) {
-
- // Skip "provider", since it's for internal API use,
- // and not a valid CSS property.
- if ( 'provider' === $key ) {
- continue;
- }
-
- // Compile the "src" parameter.
- if ( 'src' === $key ) {
- $value = $this->compile_src( $webfont['font-family'], $value );
- }
-
- // If font-variation-settings is an array, convert it to a string.
- if ( 'font-variation-settings' === $key && is_array( $value ) ) {
- $value = $this->compile_variations( $value );
- }
-
- if ( ! empty( $value ) ) {
- $css .= "$key:$value;";
- }
- }
-
- return $css;
- }
-
- /**
- * Compiles the `src` into valid CSS.
- *
- * @since 6.0.0
- *
- * @param string $font_family Font family.
- * @param array $value Value to process.
- * @return string The CSS.
- */
- private function compile_src( $font_family, array $value ) {
- $src = "local($font_family)";
-
- foreach ( $value as $item ) {
-
- if ( str_starts_with( $item['url'], get_site_url() ) ) {
- $item['url'] = wp_make_link_relative( $item['url'] );
- }
-
- $src .= ( 'data' === $item['format'] )
- ? ", url({$item['url']})"
- : ", url('{$item['url']}') format('{$item['format']}')";
- }
- return $src;
- }
-
- /**
- * Compiles the font variation settings.
- *
- * @since 6.0.0
- *
- * @param array $font_variation_settings Array of font variation settings.
- * @return string The CSS.
- */
- private function compile_variations( array $font_variation_settings ) {
- $variations = '';
-
- foreach ( $font_variation_settings as $key => $value ) {
- $variations .= "$key $value";
- }
-
- return $variations;
- }
-}
diff --git a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider.php b/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider.php
deleted file mode 100644
index 5b7f5ece335b1..0000000000000
--- a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-provider.php
+++ /dev/null
@@ -1,66 +0,0 @@
-webfonts = $this->fonts;
- }
-
- /**
- * This method is here to wire WP_Fonts_Provider::do_item() to this
- * deprecated class to ensure the fonts get set.
- *
- * @param array[] $fonts Fonts to be processed.
- */
- public function set_fonts( array $fonts ) {
- parent::set_fonts( $fonts );
- $this->webfonts = $this->fonts;
- }
-}
diff --git a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-utils.php b/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-utils.php
deleted file mode 100644
index d0242acf9a2b6..0000000000000
--- a/lib/experimental/fonts-api/bc-layer/class-wp-webfonts-utils.php
+++ /dev/null
@@ -1,85 +0,0 @@
-wp_fonts = ! empty( $wp_fonts ) ? $wp_fonts : wp_fonts();
- }
-
- /**
- * Gets the font slug.
- *
- * @since X.X.X
- * @deprecated Use WP_Fonts_Utils::convert_font_family_into_handle() or WP_Fonts_Utils::get_font_family_from_variation().
- *
- * @param array|string $to_convert The value to convert into a slug. Expected as the web font's array
- * or a font-family as a string.
- * @return string|false The font slug on success, or false if the font-family cannot be determined.
- */
- public static function get_font_slug( $to_convert ) {
- $message = is_array( $to_convert )
- ? 'Use WP_Fonts_Utils::get_font_family_from_variation() to get the font family from an array and then WP_Fonts_Utils::convert_font_family_into_handle() to convert the font-family name into a handle'
- : 'Use WP_Fonts_Utils::convert_font_family_into_handle() to convert the font-family name into a handle';
- _deprecated_function( __METHOD__, 'GB 14.9.1', $message );
-
- if ( empty( $to_convert ) ) {
- return false;
- }
-
- $font_family_name = is_array( $to_convert )
- ? WP_Fonts_Utils::get_font_family_from_variation( $to_convert )
- : $to_convert;
-
- $slug = false;
- if ( ! empty( $font_family_name ) ) {
- $slug = WP_Fonts_Utils::convert_font_family_into_handle( $font_family_name );
- }
-
- return $slug;
- }
-
- /**
- * Initializes the API.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_fonts().
- */
- public static function init() {
- _deprecated_function( __METHOD__, 'GB 14.9.1', 'wp_fonts()' );
- }
-
- /**
- * Get the list of all registered font family handles.
- *
- * @since X.X.X
- * @deprecated GB 15.8.0 Use wp_fonts()->get_registered_font_families().
- *
- * @return string[]
- */
- public function get_registered_font_families() {
- _deprecated_function( __METHOD__, 'GB 15.8.0', 'wp_fonts()->get_registered_font_families()' );
-
- return $this->wp_fonts->get_registered_font_families();
- }
-
- /**
- * Gets the list of registered fonts.
- *
- * @since 6.0.0
- * @deprecated 14.9.1 Use wp_fonts()->get_registered().
- *
- * @return array[]
- */
- public function get_registered_webfonts() {
- _deprecated_function( __METHOD__, '14.9.1', 'wp_fonts()->get_registered()' );
-
- return $this->_get_registered_webfonts();
- }
-
- /**
- * Gets the list of enqueued fonts.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_fonts()->get_enqueued().
- *
- * @return array[]
- */
- public function get_enqueued_webfonts() {
- _deprecated_function( __METHOD__, 'GB 14.9.1', 'wp_fonts()->get_enqueued()' );
-
- return $this->wp_fonts->queue;
- }
-
- /**
- * Gets the list of all fonts.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_fonts()->get_registered().
- *
- * @return array[]
- */
- public function get_all_webfonts() {
- _deprecated_function( __METHOD__, 'GB 14.9.1', 'wp_fonts()->get_registered()' );
-
- return $this->_get_registered_webfonts();
- }
-
- /**
- * Registers a webfont.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_register_fonts().
- *
- * @param array $webfont Web font to register.
- * @param string $font_family_handle Optional. Font family handle for the given variation.
- * Default empty string.
- * @param string $variation_handle Optional. Handle for the variation to register.
- * @param bool $silence_deprecation Optional. Silences the deprecation notice. For internal use.
- * @return string|false The font family slug if successfully registered, else false.
- */
- public function register_webfont( array $webfont, $font_family_handle = '', $variation_handle = '', $silence_deprecation = false ) {
- if ( ! $silence_deprecation ) {
- _deprecated_function( __METHOD__, 'GB 14.9.1', 'wp_register_fonts()' );
- }
-
- // Bail out if no variation passed as there's not to register.
- if ( empty( $webfont ) ) {
- return false;
- }
-
- // Restructure definition: keyed by font-family and array of variations.
- $font = array( $webfont );
- if ( WP_Fonts_Utils::is_defined( $font_family_handle ) ) {
- $font = array( $font_family_handle => $font );
- } else {
- $font = Gutenberg_Fonts_API_BC_Layer::migrate_deprecated_structure( $font, true );
- $font_family_handle = array_key_first( $font );
- }
-
- if ( empty( $font ) || empty( $font_family_handle ) ) {
- return false;
- }
-
- // If the variation handle was passed, add it as variation key.
- if ( WP_Fonts_Utils::is_defined( $variation_handle ) ) {
- $font[ $font_family_handle ] = array( $variation_handle => $font[ $font_family_handle ][0] );
- }
-
- // Register with the Fonts API.
- $handle = wp_register_fonts( $font );
- if ( empty( $handle ) ) {
- return false;
- }
- return array_pop( $handle );
- }
-
- /**
- * Enqueue a font-family that has been already registered.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_enqueue_fonts().
- *
- * @param string $font_family_name The font family name to be enqueued.
- * @return bool True if successfully enqueued, else false.
- */
- public function enqueue_webfont( $font_family_name ) {
- _deprecated_function( __METHOD__, 'GB 14.9.1', 'wp_enqueue_fonts()' );
-
- wp_enqueue_fonts( array( $font_family_name ) );
- return true;
- }
-
- /**
- * Gets the registered webfonts in the original web font property structure keyed by each handle.
- *
- * @return array[]
- */
- private function _get_registered_webfonts() {
- $font_families = array();
- $registered = array();
-
- // Find the registered font families.
- foreach ( $this->wp_fonts->registered as $handle => $obj ) {
- if ( ! $obj->extra['is_font_family'] ) {
- continue;
- }
-
- if ( ! isset( $registered[ $handle ] ) ) {
- $registered[ $handle ] = array();
- }
-
- $font_families[ $handle ] = $obj->deps;
- }
-
- // Build the return array structure.
- foreach ( $font_families as $font_family_handle => $variations ) {
- foreach ( $variations as $variation_handle ) {
- $variation_obj = $this->wp_fonts->registered[ $variation_handle ];
-
- $registered[ $font_family_handle ][ $variation_handle ] = $variation_obj->extra['font-properties'];
- }
- }
-
- return $registered;
- }
-}
diff --git a/lib/experimental/fonts-api/bc-layer/webfonts-deprecations.php b/lib/experimental/fonts-api/bc-layer/webfonts-deprecations.php
deleted file mode 100644
index 7a3a7bd013eea..0000000000000
--- a/lib/experimental/fonts-api/bc-layer/webfonts-deprecations.php
+++ /dev/null
@@ -1,260 +0,0 @@
- array[] $variations {
- * An array of web font variations for this font-family.
- * Each variation has the following structure.
- *
- * @type array $variation {
- * @type string $provider The provider ID. Default 'local'.
- * @type string $font-style The font-style property. Default 'normal'.
- * @type string $font-weight The font-weight property. Default '400'.
- * @type string $font-display The font-display property. Default 'fallback'.
- * }
- * }
- * }
- * @return string[] Array of registered font family handles.
- */
- function wp_register_webfonts( array $webfonts ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_register_fonts()' );
-
- $webfonts = Gutenberg_Fonts_API_BC_Layer::migrate_deprecated_structure( $webfonts );
-
- return wp_register_fonts( $webfonts );
- }
-}
-
-if ( ! function_exists( 'wp_register_webfont' ) ) {
- /**
- * Registers a single webfont.
- *
- * Example of how to register Source Serif Pro font with font-weight range of 200-900:
- *
- * If the font file is contained within the theme:
- *
- *
- * wp_register_webfont(
- * array(
- * 'provider' => 'local',
- * 'font-family' => 'Source Serif Pro',
- * 'font-weight' => '200 900',
- * 'font-style' => 'normal',
- * 'src' => get_theme_file_uri( 'assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ),
- * )
- * );
- *
- *
- * @since 6.0.0
- * @deprecated 14.9.1 Use wp_register_fonts().
- *
- * @param array $webfont Webfont to be registered.
- * @return string|false The font family slug if successfully registered, else false.
- */
- function wp_register_webfont( array $webfont ) {
- _deprecated_function( __FUNCTION__, '14.9.1', 'wp_register_fonts()' );
-
- return wp_fonts()->register_webfont( $webfont, '', '', false );
- }
-}
-
-if ( ! function_exists( 'wp_enqueue_webfonts' ) ) {
- /**
- * Enqueues one or more font family and all of its variations.
- *
- * @since X.X.X
- * @since GB 15.1 Use wp_enqueue_fonts() ihstead.
- *
- * @param string[] $font_families Font family(ies) to enqueue.
- */
- function wp_enqueue_webfonts( array $font_families ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_enqueue_fonts()' );
-
- wp_enqueue_fonts( $font_families );
- }
-}
-
-if ( ! function_exists( 'wp_enqueue_webfont' ) ) {
- /**
- * Enqueue a single font family that has been registered beforehand.
- *
- * Example of how to enqueue Source Serif Pro font:
- *
- *
- * wp_enqueue_webfont( 'Source Serif Pro' );
- *
- *
- * Font families should be enqueued from the `init` hook or later.
- *
- * @since 6.0.0
- * @deprecated GB 14.9.1 Use wp_enqueue_fonts() instead.
- *
- * @param string $font_family_name The font family name to be enqueued.
- * @return bool True if successfully enqueued, else false.
- */
- function wp_enqueue_webfont( $font_family_name ) {
- _deprecated_function( __FUNCTION__, 'GB 14.9.1', 'wp_enqueue_fonts()' );
-
- wp_enqueue_fonts( array( $font_family_name ) );
- return true;
- }
-}
-
-if ( ! function_exists( 'wp_enqueue_webfont_variations' ) ) {
- /**
- * Enqueues a specific set of web font variations.
- *
- * @since X.X.X
- * @deprecated GB 15.1 Use wp_enqueue_font_variations() instead.
- *
- * @param string|string[] $variation_handles Variation handle (string) or handles (array of strings).
- */
- function wp_enqueue_webfont_variations( $variation_handles ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_enqueue_font_variations()' );
-
- wp_enqueue_font_variations( $variation_handles );
- }
-}
-
-if ( ! function_exists( 'wp_deregister_webfont_variation' ) ) {
- /**
- * Deregisters a font variation.
- *
- * @since GB 14.9.1
- * @deprecated GB 15.1 Use wp_deregister_font_variation() instead.
- *
- * @param string $font_family_handle The font family for this variation.
- * @param string $variation_handle The variation's handle to remove.
- */
- function wp_deregister_webfont_variation( $font_family_handle, $variation_handle ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_deregister_font_variation()' );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- }
-}
-
-if ( ! function_exists( 'wp_get_webfont_providers' ) ) {
- /**
- * Gets all registered providers.
- *
- * Return an array of providers, each keyed by their unique
- * ID (i.e. the `$id` property in the provider's object) with
- * an instance of the provider (object):
- * ID => provider instance
- *
- * Each provider contains the business logic for how to
- * process its specific font service (i.e. local or remote)
- * and how to generate the `@font-face` styles for its service.
- *
- * @since X.X.X
- * @deprecated GB 14.9.1 Use wp_fonts()->get_providers().
- *
- * @return string[] All registered providers, each keyed by their unique ID.
- */
- function wp_get_webfont_providers() {
- _deprecated_function( __FUNCTION__, '14.9.1', 'wp_fonts()->get_providers()' );
-
- $providers = array();
- foreach ( wp_fonts()->get_providers() as $id => $config ) {
- $providers[ $id ] = $config['class'];
- }
-
- return $providers;
- }
-}
-
-if ( ! function_exists( 'wp_register_webfont_provider' ) ) {
- /**
- * Registers a custom font service provider.
- *
- * A webfont provider contains the business logic for how to
- * interact with a remote font service and how to generate
- * the `@font-face` styles for that remote service.
- *
- * How to register a custom font service provider:
- * 1. Load its class file into memory before registration.
- * 2. Pass the class' name to this function.
- *
- * For example, for a class named `My_Custom_Font_Service_Provider`:
- * ```
- * wp_register_webfont_provider( My_Custom_Font_Service_Provider::class );
- * ```
- *
- * @since X.X.X
- * @deprecated GB 15.1 Use wp_register_font_provider() instead.
- *
- * @param string $name The provider's name.
- * @param string $classname The provider's class name.
- * The class should be a child of `WP_Webfonts_Provider`.
- * See {@see WP_Webfonts_Provider}.
- *
- * @return bool True if successfully registered, else false.
- */
- function wp_register_webfont_provider( $name, $classname ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_register_font_provider' );
-
- return wp_register_font_provider( $name, $classname );
- }
-}
-
-if ( ! function_exists( 'wp_print_webfonts' ) ) {
- /**
- * Invokes each provider to process and print its styles.
- *
- * @since GB 14.9.1
- * @deprecated GB 15.1 Use wp_print_fonts() instead.
- *
- * @param string|string[]|false $handles Optional. Items to be processed: queue (false),
- * single item (string), or multiple items (array of strings).
- * Default false.
- * @return array|string[] Array of web font handles that have been processed.
- * An empty array if none were processed.
- */
- function wp_print_webfonts( $handles = false ) {
- _deprecated_function( __FUNCTION__, 'GB 15.1', 'wp_print_fonts' );
-
- return wp_print_fonts( $handles );
- }
-}
diff --git a/lib/experimental/fonts-api/class-wp-fonts-provider-local.php b/lib/experimental/fonts-api/class-wp-fonts-provider-local.php
deleted file mode 100644
index 019861a9ae191..0000000000000
--- a/lib/experimental/fonts-api/class-wp-fonts-provider-local.php
+++ /dev/null
@@ -1,236 +0,0 @@
-style_tag_atts = array( 'type' => 'text/css' );
- }
- }
-
- /**
- * Gets the `@font-face` CSS styles for locally-hosted font files.
- *
- * This method does the following processing tasks:
- * 1. Orchestrates an optimized `src` (with format) for browser support.
- * 2. Generates the `@font-face` for all its fonts.
- *
- * @since X.X.X
- *
- * @return string The `@font-face` CSS.
- */
- public function get_css() {
- $css = '';
-
- foreach ( $this->fonts as $font ) {
- // Order the font's `src` items to optimize for browser support.
- $font = $this->order_src( $font );
-
- // Build the @font-face CSS for this font.
- $css .= '@font-face{' . $this->build_font_face_css( $font ) . '}';
- }
-
- return $css;
- }
-
- /**
- * Order `src` items to optimize for browser support.
- *
- * @since X.X.X
- *
- * @param array $font Font to process.
- * @return array
- */
- private function order_src( array $font ) {
- if ( ! is_array( $font['src'] ) ) {
- $font['src'] = (array) $font['src'];
- }
-
- $src = array();
- $src_ordered = array();
-
- foreach ( $font['src'] as $url ) {
- // Add data URIs first.
- if ( str_starts_with( trim( $url ), 'data:' ) ) {
- $src_ordered[] = array(
- 'url' => $url,
- 'format' => 'data',
- );
- continue;
- }
- $format = pathinfo( $url, PATHINFO_EXTENSION );
- $src[ $format ] = $url;
- }
-
- // Add woff2.
- if ( ! empty( $src['woff2'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['woff2'],
- 'format' => 'woff2',
- );
- }
-
- // Add woff.
- if ( ! empty( $src['woff'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['woff'],
- 'format' => 'woff',
- );
- }
-
- // Add ttf.
- if ( ! empty( $src['ttf'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['ttf'],
- 'format' => 'truetype',
- );
- }
-
- // Add eot.
- if ( ! empty( $src['eot'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['eot'],
- 'format' => 'embedded-opentype',
- );
- }
-
- // Add otf.
- if ( ! empty( $src['otf'] ) ) {
- $src_ordered[] = array(
- 'url' => $src['otf'],
- 'format' => 'opentype',
- );
- }
- $font['src'] = $src_ordered;
-
- return $font;
- }
-
- /**
- * Builds the font-family's CSS.
- *
- * @since X.X.X
- *
- * @param array $font Font to process.
- * @return string This font-family's CSS.
- */
- private function build_font_face_css( array $font ) {
- $css = '';
-
- // Wrap font-family in quotes if it contains spaces
- // and is not already wrapped in quotes.
- if (
- str_contains( $font['font-family'], ' ' ) &&
- ! str_contains( $font['font-family'], '"' ) &&
- ! str_contains( $font['font-family'], "'" )
- ) {
- $font['font-family'] = '"' . $font['font-family'] . '"';
- }
-
- foreach ( $font as $key => $value ) {
-
- // Skip "provider", since it's for internal API use,
- // and not a valid CSS property.
- if ( 'provider' === $key ) {
- continue;
- }
-
- // Compile the "src" parameter.
- if ( 'src' === $key ) {
- $value = $this->compile_src( $value );
- }
-
- // If font-variation-settings is an array, convert it to a string.
- if ( 'font-variation-settings' === $key && is_array( $value ) ) {
- $value = $this->compile_variations( $value );
- }
-
- if ( ! empty( $value ) ) {
- $css .= "$key:$value;";
- }
- }
-
- return $css;
- }
-
- /**
- * Compiles the `src` into valid CSS.
- *
- * @since X.X.X
- *
- * @param array $value Value to process.
- * @return string The CSS.
- */
- private function compile_src( array $value ) {
- $src = '';
-
- foreach ( $value as $item ) {
- $src .= ( 'data' === $item['format'] )
- ? ", url({$item['url']})"
- : ", url('{$item['url']}') format('{$item['format']}')";
- }
-
- $src = ltrim( $src, ', ' );
- return $src;
- }
-
- /**
- * Compiles the font variation settings.
- *
- * @since X.X.X
- *
- * @param array $font_variation_settings Array of font variation settings.
- * @return string The CSS.
- */
- private function compile_variations( array $font_variation_settings ) {
- $variations = '';
-
- foreach ( $font_variation_settings as $key => $value ) {
- $variations .= "$key $value";
- }
-
- return $variations;
- }
-}
diff --git a/lib/experimental/fonts-api/class-wp-fonts-provider.php b/lib/experimental/fonts-api/class-wp-fonts-provider.php
deleted file mode 100644
index b59c59d6b8938..0000000000000
--- a/lib/experimental/fonts-api/class-wp-fonts-provider.php
+++ /dev/null
@@ -1,129 +0,0 @@
-fonts = $fonts;
- }
-
- /**
- * Prints the generated styles.
- *
- * @since X.X.X
- */
- public function print_styles() {
- printf(
- $this->get_style_element(),
- $this->get_css()
- );
- }
-
- /**
- * Gets the `@font-face` CSS for the provider's fonts.
- *
- * This method is where the provider does it processing to build the
- * needed `@font-face` CSS for all of its fonts. Specifics of how
- * this processing is done is contained in each provider.
- *
- * @since X.X.X
- *
- * @return string The `@font-face` CSS.
- */
- abstract public function get_css();
-
- /**
- * Gets the `\n";
- }
-
- /**
- * Gets the defined \n",
- $font_faces['merriweather-200-900-normal']
- ),
- ),
- 'print Source Serif Pro for local provider' => array(
- 'setup' => array(
- 'provider' => array( 'local' => $providers['local'] ),
- 'provider_handles' => array( 'local' => $local_font_handles ),
- 'registered' => $local_fonts,
- 'enqueued' => array( 'source-serif-pro' ),
- ),
- 'expected_done' => array( 'source-serif-pro', 'Source Serif Pro-300-normal', 'Source Serif Pro-900-italic' ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
- 'print all fonts for local provider' => array(
- 'setup' => array(
- 'provider' => array( 'local' => $providers['local'] ),
- 'provider_handles' => array( 'local' => $local_font_handles ),
- 'registered' => $local_fonts,
- 'enqueued' => array( 'merriweather', 'source-serif-pro' ),
- ),
- 'expected_done' => array(
- 'merriweather',
- 'merriweather-200-900-normal',
- 'source-serif-pro',
- 'Source Serif Pro-300-normal',
- 'Source Serif Pro-900-italic',
- ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
-
- // All providers registered with multiple fonts.
-
- 'print font1 when all providers registered' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'font1' ) ) ),
- 'expected_done' => array( 'font1', 'font1-300-normal', 'font1-300-italic', 'font1-900-normal' ),
- 'expected_output' => sprintf(
- '%s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal']
- ),
- ),
- 'print all mock fonts when all providers registered' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'font1', 'font2', 'font3' ) ) ),
- 'expected_done' => array(
- 'font1',
- 'font1-300-normal',
- 'font1-300-italic',
- 'font1-900-normal',
- 'font2',
- 'font2-200-900-normal',
- 'font2-200-900-italic',
- 'font3',
- 'font3-bold-normal',
- ),
- 'expected_output' => sprintf(
- '%s; %s; %s; %s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal'],
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic'],
- $font_faces['font3-bold-normal']
- ),
- ),
- 'print merriweather when all providers registered' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'merriweather' ) ) ),
- 'expected_done' => array( 'merriweather', 'merriweather-200-900-normal' ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal']
- ),
- ),
- 'print all local fonts when all providers registered' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'merriweather', 'source-serif-pro' ) ) ),
- 'expected_done' => array(
- 'merriweather',
- 'merriweather-200-900-normal',
- 'source-serif-pro',
- 'Source Serif Pro-300-normal',
- 'Source Serif Pro-900-italic',
- ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
-
- 'print all fonts for all providers' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => $all_variation_handles ) ),
- 'expected_done' => $all_variation_handles,
- 'expected_output' =>
- sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ) .
- sprintf(
- '%s; %s; %s; %s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal'],
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic'],
- $font_faces['font3-bold-normal']
- ),
- ),
-
- // Specific variations enqueued.
- // Validates that only these specific variations print once.
-
- 'specific variation: 1 local' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'merriweather-200-900-normal' ) ) ),
- 'expected_done' => array( 'merriweather-200-900-normal' ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal']
- ),
- ),
- 'specific variation: 1 local from different font families' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'merriweather-200-900-normal', 'Source Serif Pro-900-italic' ) ) ),
- 'expected_done' => array( 'merriweather-200-900-normal', 'Source Serif Pro-900-italic' ),
- 'expected_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
- 'specific variation: 1 local and 1 mock' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'merriweather-200-900-normal', 'font2-200-900-normal' ) ) ),
- 'expected_done' => array( 'merriweather-200-900-normal', 'font2-200-900-normal' ),
- 'expected_output' => sprintf(
- "\n" .
- '%s\n',
- $font_faces['merriweather-200-900-normal'],
- $font_faces['font2-200-900-normal']
- ),
- ),
- 'specific variation: 1 mock and 1 local' => array(
- 'setup' => array_merge( $setup_all, array( 'enqueued' => array( 'font2-200-900-normal', 'Source Serif Pro-300-normal' ) ) ),
- 'expected_done' => array( 'font2-200-900-normal', 'Source Serif Pro-300-normal' ),
- 'expected_output' => sprintf(
- "\n" .
- '%s\n',
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['font2-200-900-normal']
- ),
- ),
- );
- }
-
- protected function get_data_registry() {
- return array(
- 'lato' => array(),
- 'merriweather' => array(
- 'merriweather-200-900-normal' => array(
- 'font-family' => 'Merriweather',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/merriweather.ttf.woff2',
- ),
- ),
- 'Source Serif Pro' => array(
- 'Source Serif Pro-300-normal' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '300',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'Source Serif Pro-900-italic' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'italic',
- 'font-weight' => '900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- ),
- 'my-font' => array(
- 'my-font-300-normal' => array(
- 'font-family' => 'My Font',
- 'font-weight' => '300',
- 'src' => 'https://example.com/assets/fonts/my-font.ttf.woff2',
- ),
- 'my-font-300-italic' => array(
- 'font-family' => 'My Font',
- 'font-weight' => '300',
- 'font-style' => 'italic',
- 'src' => 'https://example.com/assets/fonts/my-font.ttf.woff2',
- ),
- 'my-font-900-normal' => array(
- 'font-family' => 'My Font',
- 'font-weight' => '900',
- 'src' => 'https://example.com/assets/fonts/my-font.ttf.woff2',
- ),
- ),
- );
- }
-
- /**
- * Gets the provider definitions.
- *
- * @since X.X.X
- *
- * @param string $provider_id Optional. Provider ID to get. Default empty string.
- * @return array
- */
- protected function get_provider_definitions( $provider_id = '' ) {
- $providers = array(
- 'mock' => array(
- 'id' => 'mock',
- 'class' => Mock_Provider::class,
- ),
- 'local' => array(
- 'id' => 'local',
- 'class' => WP_Fonts_Provider_Local::class,
- ),
- );
-
- if ( '' === $provider_id ) {
- return $providers;
- }
-
- if ( isset( $providers[ $provider_id ] ) ) {
- return $providers[ $provider_id ];
- }
-
- return array(
- 'id' => $provider_id,
- 'class' => '',
- );
- }
-
- /**
- * Gets font definitions for both local and mock providers.
- *
- * @since X.X.X
- *
- * @return array|string[][][]
- */
- protected function get_registered_fonts() {
- return array_merge(
- $this->get_registered_local_fonts(),
- $this->get_registered_mock_fonts()
- );
- }
-
- /**
- * Returns an array of font-face styles that matches the font definitions
- * in get_registered_local_fonts() and get_registered_mock_fonts().
- *
- * @since X.X.X
- *
- * @return string[]
- */
- protected function get_registered_fonts_css() {
- return array(
- 'merriweather-200-900-normal' => << << << 'font1-300-normal',
- 'font1-300-italic' => 'font1-300-italic',
- 'font1-900-normal' => 'font1-900-normal',
- 'font2-200-900-normal' => 'font2-200-900-normal',
- 'font2-200-900-italic' => 'font2-200-900-italic',
- 'font3-bold-normal' => 'font3-bold-normal',
- );
- }
-
- /**
- * Gets font definitions for local provider.
- *
- * @since X.X.X
- *
- * @return string[][][]
- */
- protected function get_registered_local_fonts() {
- return array(
- 'lato' => array(),
- 'merriweather' => array(
- 'merriweather-200-900-normal' => array(
- 'provider' => 'local',
- 'font-family' => 'Merriweather',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-display' => 'fallback',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/merriweather.ttf.woff2',
- ),
- ),
- 'Source Serif Pro' => array(
- 'Source Serif Pro-300-normal' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '300',
- 'font-display' => 'fallback',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'Source Serif Pro-900-italic' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'italic',
- 'font-weight' => '900',
- 'font-display' => 'fallback',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- ),
- );
- }
-
- /**
- * Gets font definitions for mock provider.
- *
- * @since X.X.X
- *
- * @return string[][][]
- */
- protected function get_registered_mock_fonts() {
- return array(
- 'font1' => array(
- 'font1-300-normal' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 1',
- 'font-weight' => '300',
- 'font-style' => 'normal',
- 'font-display' => 'fallback',
- ),
- 'font1-300-italic' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 1',
- 'font-weight' => '300',
- 'font-style' => 'italic',
- 'font-display' => 'fallback',
- ),
- 'font1-900-normal' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 1',
- 'font-weight' => '900',
- 'font-style' => 'normal',
- 'font-display' => 'fallback',
- ),
- ),
- 'font2' => array(
- 'font2-200-900-normal' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 2',
- 'font-weight' => '200 900',
- 'font-style' => 'normal',
- 'font-display' => 'fallback',
- ),
- 'font2-200-900-italic' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 2',
- 'font-weight' => '200 900',
- 'font-style' => 'italic',
- 'font-display' => 'fallback',
- ),
- ),
- 'font3' => array(
- 'font3-bold-normal' => array(
- 'provider' => 'mock',
- 'font-family' => 'Font 3',
- 'font-weight' => 'bold',
- 'font-style' => 'normal',
- 'font-display' => 'fallback',
- 'font-stretch' => 'normal',
- ),
- ),
- );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_print_user_selected_fonts() {
- $global_styles = $this->get_mock_user_selected_fonts_global_styles();
- $font_faces = $this->get_registered_fonts_css();
-
- return array(
- 'print font1' => array(
- 'global_styles' => $global_styles['font1'],
- 'expected_done' => array(
- 'font1-300-normal',
- 'font1-300-italic',
- 'font1-900-normal',
- 'font1',
- ),
- 'expected_output' => sprintf(
- '%s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal']
- ),
- ),
- 'print font2' => array(
- 'global_styles' => $global_styles['font2'],
- 'expected_done' => array( 'font2-200-900-normal', 'font2-200-900-italic', 'font2' ),
- 'expected_output' => sprintf(
- '%s; %s\n',
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic']
- ),
- ),
- 'print font3' => array(
- 'global_styles' => $global_styles['font3'],
- 'expected_done' => array( 'font3', 'font3-bold-normal' ),
- 'expected_output' => sprintf(
- '%s\n',
- $font_faces['font3-bold-normal']
- ),
- ),
- 'print all fonts' => array(
- 'global_styles' => $global_styles['all'],
- 'expected_done' => array(
- 'font1-300-normal',
- 'font1-300-italic',
- 'font1-900-normal',
- 'font1',
- 'font2-200-900-normal',
- 'font2-200-900-italic',
- 'font2',
- 'font3-bold-normal',
- 'font3',
- ),
- 'expected_output' => sprintf(
- '%s; %s; %s; %s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal'],
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic'],
- $font_faces['font3-bold-normal']
- ),
- ),
- 'print all valid fonts' => array(
- 'global_styles' => $global_styles['all with invalid element'],
- 'expected_done' => array(
- 'font1-300-normal',
- 'font1-300-italic',
- 'font1-900-normal',
- 'font1',
- 'font2-200-900-normal',
- 'font2-200-900-italic',
- 'font2',
- 'font3-bold-normal',
- 'font3',
- ),
- 'expected_output' => sprintf(
- '%s; %s; %s; %s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal'],
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic'],
- $font_faces['font3-bold-normal']
- ),
- ),
- );
- }
-
- /**
- * Gets user-selected fonts for global styles for the mock provider.
- *
- * @since X.X.X
- *
- * @return array
- */
- protected function get_mock_user_selected_fonts_global_styles() {
- return array(
- 'font1' => array(
- 'elements' => array(
- 'heading' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'normal',
- 'fontWeight' => '300',
- ),
- ),
- 'caption' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'italic',
- 'fontWeight' => '300',
- ),
- ),
- ),
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'normal',
- 'fontWeight' => '900',
- ),
- ),
- 'font2' => array(
- 'elements' => array(
- 'heading' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font2',
- 'fontStyle' => 'normal',
- 'fontWeight' => '200-900',
- ),
- ),
- 'button' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font2',
- 'fontStyle' => 'italic',
- 'fontWeight' => '200-900',
- ),
- ),
- ),
- ),
- 'font3' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font3',
- 'fontStyle' => 'normal',
- 'fontWeight' => 'bold',
- ),
- ),
- 'all' => array(
- 'elements' => array(
- 'link' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'italic',
- 'fontWeight' => '300',
- ),
- ),
- 'heading' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'normal',
- 'fontWeight' => '900',
- ),
- ),
- 'caption' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'italic',
- 'fontWeight' => '300',
- ),
- ),
- 'button' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font2',
- 'fontStyle' => 'normal',
- 'fontWeight' => '200-900',
- ),
- ),
- ),
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font3',
- 'fontStyle' => 'normal',
- 'fontWeight' => 'bold',
- ),
- ),
- 'all with invalid element' => array(
- 'elements' => array(
- 'link' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'italic',
- 'fontWeight' => '300',
- ),
- ),
- 'heading' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'normal',
- 'fontWeight' => '900',
- ),
- ),
- 'caption' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'italic',
- 'fontWeight' => '300',
- ),
- ),
- 'button' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font2',
- 'fontStyle' => 'normal',
- 'fontWeight' => '200-900',
- ),
- ),
- 'invalid' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font2',
- 'fontStyle' => 'italic',
- 'fontWeight' => '200-900',
- ),
- ),
- ),
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font3',
- 'fontStyle' => 'normal',
- 'fontWeight' => 'bold',
- ),
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpDeregisterFontFamily.php b/phpunit/tests/fonts-api/wpDeregisterFontFamily.php
deleted file mode 100644
index 59db2e2abc826..0000000000000
--- a/phpunit/tests/fonts-api/wpDeregisterFontFamily.php
+++ /dev/null
@@ -1,74 +0,0 @@
-set_up_mock( 'remove_font_family' );
- $mock->expects( $this->once() )
- ->method( 'remove_font_family' )
- ->with(
- $this->identicalTo( $font_family_handle )
- );
-
- wp_deregister_font_family( $font_family_handle );
- }
-
- /**
- * Integration test for enqueuing before registering a font family and all of its variations.
- *
- * @dataProvider data_font_family_handles
- *
- * @param string $font_family Font family to test.
- */
- public function test_should_deregister_before_registration( $font_family ) {
- wp_deregister_font_family( $font_family );
-
- $this->assertIsArray( $this->get_registered(), 'Registration queue should be an array' );
- $this->assertEmpty( $this->get_registered(), 'Registration queue should be empty after deregistering' );
- }
-
- /**
- * Integration test for deregistering a font family and all of its variations.
- *
- * @dataProvider data_one_to_many_font_families_and_zero_to_many_variations
- *
- * @param string $font_family Font family to test.
- * @param array $inputs Font family(ies) and variations to pre-register.
- * @param array $registered_handles Expected handles after registering.
- * @param array $expected Array of expected handles.
- */
- public function test_deregister_after_registration( $font_family, array $inputs, array $registered_handles, array $expected ) {
- foreach ( $inputs as $handle => $variations ) {
- $this->setup_register( $handle, $variations );
- }
- // Test the before state, just to make sure.
- $this->assertSame( $registered_handles, $this->get_registered_handles(), 'Font family and variations should be registered before deregistering' );
-
- wp_deregister_font_family( $font_family );
-
- // Test after deregistering.
- $this->assertIsArray( $this->get_registered_handles(), 'Registration queue should be an array' );
- $this->assertSame( $expected, $this->get_registered_handles(), 'Registration queue should match after deregistering' );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpDeregisterFontVariation.php b/phpunit/tests/fonts-api/wpDeregisterFontVariation.php
deleted file mode 100644
index 78b4bf51f758a..0000000000000
--- a/phpunit/tests/fonts-api/wpDeregisterFontVariation.php
+++ /dev/null
@@ -1,298 +0,0 @@
-wp_fonts = wp_fonts();
- $this->fonts_to_register = $this->get_registered_local_fonts();
- }
-
- /**
- * Sets up the unit test by mocking the WP_Dependencies object using stdClass and
- * registering each font family directly to the WP_Webfonts::$registered property
- * and its variations to the mocked $deps property.
- */
- private function setup_unit_test() {
- $this->setup_registration_mocks( $this->fonts_to_register, $this->wp_fonts );
- }
-
- /**
- * Sets up the integration test by properly registering each font family and its variations
- * by using the WP_Webfonts::add() and WP_Webfonts::add_variation() methods.
- */
- private function setup_integration_test() {
- foreach ( $this->fonts_to_register as $font_family_handle => $variations ) {
- $this->setup_register( $font_family_handle, $variations, $this->wp_fonts );
- }
- }
-
- /**
- * Testing the test setup to ensure it works.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_mocked_setup( $font_family_handle, $variation_handle ) {
- $this->setup_unit_test();
-
- $this->assertArrayHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be in the registered queue before removal' );
- $this->assertContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should be in its font family deps before removal' );
- }
-
- /**
- * Unit test for deregistering a font-family's variation using mock of WP_Webfonts.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family to test.
- * @param string $variation_handle Variation's handle to test.
- */
- public function test_should_deregister_when_mocked( $font_family_handle, $variation_handle ) {
- $mock = $this->set_up_mock( 'remove_variation' );
- $mock->expects( $this->once() )
- ->method( 'remove_variation' )
- ->with(
- $this->identicalTo( $font_family_handle, $variation_handle )
- );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_should_do_nothing
- *
- * @param string $font_family Font family name.
- * @param string $font_family_handle Font family handle.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_unit_should_do_nothing_when_variation_and_font_family_not_registered( $font_family, $font_family_handle, $variation_handle ) {
- // Set up the test.
- unset( $this->fonts_to_register[ $font_family ] );
- $this->setup_unit_test();
- $registered_queue = $this->wp_fonts->registered;
-
- // Run the tests.
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $font_family_handle, $this->wp_fonts->registered, 'Font family should not be registered' );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertSame( $registered_queue, $this->wp_fonts->registered, 'Registered queue should not have changed' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_should_do_nothing
- *
- * @param string $font_family Font family name.
- * @param string $font_family_handle Font family handle.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_should_do_nothing_when_variation_and_font_family_not_registered( $font_family, $font_family_handle, $variation_handle ) {
- // Set up the test.
- unset( $this->fonts_to_register[ $font_family ] );
- $this->setup_integration_test();
- $registered_queue = $this->wp_fonts->get_registered();
-
- // Run the tests.
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $font_family_handle, $this->wp_fonts->registered, 'Font family should not be registered' );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertSameSets( $registered_queue, $this->wp_fonts->get_registered(), 'Registered queue should not have changed' );
- }
-
- /**
- * Data provider for testing removal of variations.
- *
- * @return array
- */
- public function data_should_do_nothing() {
- return array(
- 'Font with 1 variation' => array(
- 'font_family' => 'merriweather',
- 'font_family_handle' => 'merriweather',
- 'variation_handle' => 'merriweather-200-900-normal',
- ),
- 'Font with multiple variations' => array(
- 'font_family' => 'Source Serif Pro',
- 'font_family_handle' => 'source-serif-pro',
- 'variation_handle' => 'Source Serif Pro-300-normal',
- ),
- );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_only_remove_from_font_family_deps_when_variation_not_in_queue( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
- $this->setup_remove_variation_from_registered( $variation_handle );
-
- // Run the tests.
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_only_remove_from_font_family_deps_when_variation_not_in_queue( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
- $this->setup_remove_variation_from_registered( $variation_handle );
-
- // Run the tests.
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_remove_variation_from_registered_queue_though_font_family_not_registered( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
- $this->setup_remove_from_font_family_deps( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should not be in its font family deps before removal' );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
-
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_remove_variation_from_registered_queue_though_font_family_not_registered( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
- $this->setup_remove_from_font_family_deps( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should not be in its font family deps before removal' );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
-
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_remove_variation_from_queue_and_font_family_deps( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
-
- $this->assertArrayHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should be in its font family deps before removal' );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be not be in registered queue' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_remove_variation_from_queue_and_font_family_deps( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
-
- $this->assertArrayHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should be in its font family deps before removal' );
-
- wp_deregister_font_variation( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be not be in registered queue' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Remove the variation handle from the font family's deps.
- *
- * @param string $font_family_handle Font family.
- * @param string $variation_handle The variation handle to remove.
- */
- private function setup_remove_from_font_family_deps( $font_family_handle, $variation_handle ) {
- foreach ( $this->wp_fonts->registered[ $font_family_handle ]->deps as $index => $vhandle ) {
- if ( $variation_handle !== $vhandle ) {
- continue;
- }
- unset( $this->wp_fonts->registered[ $font_family_handle ]->deps[ $index ] );
- break;
- }
- }
-
- /**
- * Removes the variation from the WP_Webfonts::$registered queue.
- *
- * @param string $variation_handle The variation handle to remove.
- */
- private function setup_remove_variation_from_registered( $variation_handle ) {
- unset( $this->wp_fonts->registered[ $variation_handle ] );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpEnqueueFontVariations.php b/phpunit/tests/fonts-api/wpEnqueueFontVariations.php
deleted file mode 100644
index 6e026d99f5889..0000000000000
--- a/phpunit/tests/fonts-api/wpEnqueueFontVariations.php
+++ /dev/null
@@ -1,82 +0,0 @@
-set_up_mock( 'enqueue' );
- $mock->expects( $this->once() )
- ->method( 'enqueue' )
- ->with(
- $this->identicalTo( $handles )
- );
-
- wp_enqueue_font_variations( $handles );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_variation_handles() {
- return array(
- '1 variation handle' => array( 'merriweather-200-900-normal' ),
- 'multiple same font family handles' => array( array( 'Source Serif Pro-300-normal', 'Source Serif Pro-900-italic' ) ),
- 'handles from different font families' => array( array( 'merriweather-200-900-normal', 'Source Serif Pro-900-italic' ) ),
- );
- }
-
- /**
- * Integration test for enqueuing one or more specific variations.
- *
- * @dataProvider data_enqueue_variations
- *
- * @param string|string[] $handles Variation handles to test.
- * @param array $expected Expected queue.
- */
- public function test_should_enqueue_after_registration( $handles, array $expected ) {
- foreach ( $this->get_data_registry() as $handle => $variations ) {
- $this->setup_register( $handle, $variations );
- }
-
- wp_enqueue_font_variations( $handles );
- $this->assertEmpty( $this->get_queued_before_register(), '"queued_before_register" queue should be empty' );
- $this->assertSame( $expected, $this->get_enqueued_handles(), 'Queue should contain the given handles' );
- }
-
- /**
- * Integration test for enqueuing before registering one or more specific variations.
- *
- * @dataProvider data_enqueue_variations
- *
- * @param string|string[] $handles Variation handles to test.
- * @param array $not_used Not used.
- * @param array $expected Expected "queued_before_register" queue.
- */
- public function test_should_enqueue_before_registration( $handles, array $not_used, array $expected ) {
- wp_enqueue_font_variations( $handles );
-
- $this->assertSame( $expected, $this->get_queued_before_register(), '"queued_before_register" queue should contain the given handles' );
- $this->assertEmpty( $this->get_enqueued_handles(), 'Queue should be empty' );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpEnqueueFonts.php b/phpunit/tests/fonts-api/wpEnqueueFonts.php
deleted file mode 100644
index c00fb0f2dfdae..0000000000000
--- a/phpunit/tests/fonts-api/wpEnqueueFonts.php
+++ /dev/null
@@ -1,122 +0,0 @@
-set_up_mock( 'enqueue' );
- $mock->expects( $this->once() )
- ->method( 'enqueue' )
- ->with(
- $this->identicalTo( $expected_handles )
- );
-
- wp_enqueue_fonts( $font_families );
- }
-
- /**
- * Integration test for enqueuing a font family and all of its variations.
- *
- * @dataProvider data_should_enqueue
- *
- * @param string[] $font_families Font families to test.
- * @param string[] $expected_handles Expected handles passed to WP_Fonts::enqueue().
- */
- public function test_should_enqueue_after_registration( $font_families, $expected_handles ) {
- // Register the font-families.
- foreach ( $this->get_data_registry() as $handle => $variations ) {
- $this->setup_register( $handle, $variations );
- }
-
- wp_enqueue_fonts( $font_families );
-
- $this->assertEmpty( $this->get_queued_before_register(), '"queued_before_register" queue should be empty' );
- $this->assertSame( $expected_handles, $this->get_enqueued_handles(), 'Queue should contain the given font family(ies)' );
- }
-
- /**
- * Integration test for enqueuing before registering a font family and all of its variations.
- *
- * @dataProvider data_should_enqueue
- *
- * @param string[] $font_families Font families to test.
- * @param string[] $expected_handles Expected handles passed to WP_Fonts::enqueue().
- */
- public function test_should_enqueue_before_registration( $font_families, $expected_handles ) {
- wp_enqueue_fonts( $font_families );
-
- // Set up what "queued_before_register" queue should be.
- $expected = array();
- foreach ( $expected_handles as $handle ) {
- $expected[ $handle ] = null;
- }
- $this->assertSame( $expected, $this->get_queued_before_register(), '"queued_before_register" queue should contain the given font family(ies)' );
- $this->assertEmpty( $this->get_enqueued_handles(), 'Queue should be empty' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_should_enqueue() {
- return array(
- '1: single word handle' => array(
- 'font_families' => array( 'lato' ),
- 'expected_handles' => array( 'lato' ),
- ),
- '1: multiple word handle' => array(
- 'font_families' => array( 'source-serif-pro' ),
- 'expected_handles' => array( 'source-serif-pro' ),
- ),
- '1: single word name' => array(
- 'font_families' => array( 'Merriweather' ),
- 'expected_handles' => array( 'merriweather' ),
- ),
- '1: multiple word name' => array(
- 'font_families' => array( 'My Font' ),
- 'expected_handles' => array( 'my-font' ),
- ),
- '>1: single word handle' => array(
- 'font_families' => array( 'lato', 'merriweather' ),
- 'expected_handles' => array( 'lato', 'merriweather' ),
- ),
- '>1: multiple word handle' => array(
- 'font_families' => array( 'source-serif-pro', 'my-font' ),
- 'expected_handles' => array( 'source-serif-pro', 'my-font' ),
- ),
- '>1: single word name' => array(
- 'font_families' => array( 'Lato', 'Merriweather' ),
- 'expected_handles' => array( 'lato', 'merriweather' ),
- ),
- '>1: multiple word name' => array(
- 'font_families' => array( 'My Font', 'Source Serif Pro' ),
- 'expected_handles' => array( 'my-font', 'source-serif-pro' ),
- ),
- '>1: mixture of word handles and names' => array(
- 'font_families' => array( 'Source Serif Pro', 'Merriweather', 'my-font', 'Lato' ),
- 'expected_handles' => array( 'source-serif-pro', 'merriweather', 'my-font', 'lato' ),
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts.php b/phpunit/tests/fonts-api/wpFonts.php
deleted file mode 100644
index 3b33e58edf299..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts.php
+++ /dev/null
@@ -1,38 +0,0 @@
-assertInstanceOf( WP_Fonts::class, wp_fonts() );
- }
-
- public function test_global_set() {
- global $wp_fonts;
- $this->assertNull( $wp_fonts );
- $instance = wp_fonts();
- $this->assertInstanceOf( WP_Fonts::class, $wp_fonts );
- $this->assertSame( $instance, $wp_fonts );
- }
-
- public function test_local_provider_is_automatically_registered() {
- $expected = array(
- 'local' => array(
- 'class' => 'WP_Fonts_Provider_Local',
- 'fonts' => array(),
- ),
- );
- $this->assertSame( $expected, wp_fonts()->get_providers() );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/add.php b/phpunit/tests/fonts-api/wpFonts/add.php
deleted file mode 100644
index 85d3d98c0f355..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/add.php
+++ /dev/null
@@ -1,44 +0,0 @@
-assertTrue( $wp_fonts->add( $handle, false ), 'Registering a handle should return true' );
- $this->assertCount( 1, $wp_fonts->registered );
- $this->assertArrayHasKey( $handle, $wp_fonts->registered, 'Font family handle should be in the registry after registration' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_handles() {
- return array(
- 'name: multiple' => array( 'Source Serif Pro' ),
- 'handle: multiple' => array( 'source-serif-pro' ),
- 'name: single' => array( 'Merriweather' ),
- 'handle: single' => array( 'merriweather' ),
- 'handle: variation' => array( 'my-custom-font-200-900-normal' ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/addFontFamily.php b/phpunit/tests/fonts-api/wpFonts/addFontFamily.php
deleted file mode 100644
index 69b6bccf5ae35..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/addFontFamily.php
+++ /dev/null
@@ -1,65 +0,0 @@
-add_font_family( $font_family );
-
- $this->assertSame( $expected, $font_family_handle, 'Registering a font-family should return its handle' );
- $this->assertCount( 1, $wp_fonts->registered );
- $this->assertArrayHasKey( $font_family_handle, $wp_fonts->registered, 'Font family handle should be in the registry after registration' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_handles() {
- return array(
- 'name: multiple' => array(
- 'font_family' => 'Source Serif Pro',
- 'expected' => 'source-serif-pro',
- ),
- 'handle: multiple' => array(
- 'font_family' => 'source-serif-pro',
- 'expected' => 'source-serif-pro',
- ),
- 'name: single' => array(
- 'font_family' => 'Merriweather',
- 'expected' => 'merriweather',
- ),
- 'handle: single' => array(
- 'font_family' => 'merriweather',
- 'expected' => 'merriweather',
- ),
- 'handle: variation' => array(
- 'font_family' => 'my-custom-font-200-900-normal',
- 'expected' => 'my-custom-font-200-900-normal',
- ),
- 'name: multiple font-families' => array(
- 'font_family' => 'Source Serif Pro, Merriweather',
- 'expected' => 'source-serif-pro',
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/addVariation.php b/phpunit/tests/fonts-api/wpFonts/addVariation.php
deleted file mode 100644
index 5b6d93bcc99fe..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/addVariation.php
+++ /dev/null
@@ -1,149 +0,0 @@
-add( $font_family_handle, false );
-
- $variation_handle = $wp_fonts->add_variation( $font_family_handle, $variation, $variation_handle );
- $this->assertSame( $expected, $variation_handle, 'Registering a variation should return its handle' );
- $this->assertArrayHasKey( $variation_handle, $wp_fonts->registered, 'Variation handle should be in the registry after registration' );
- $this->assertSame( array( $expected ), $this->get_variations( $font_family_handle, $wp_fonts ), 'Variation should be registered to font family' );
- }
-
- /**
- * @dataProvider data_valid_variation
- *
- * @param string|bool $expected Expected results.
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- * @param string $variation_handle Optional. The variation's handle.
- */
- public function test_should_not_reregister_font_family( $expected, $font_family_handle, array $variation, $variation_handle = '' ) {
- $wp_fonts = new WP_Fonts();
- $wp_fonts->add( $font_family_handle, false );
-
- $variation_handle = $wp_fonts->add_variation( $font_family_handle, $variation, $variation_handle );
-
- // Font family should appear only once in the registered queue.
- $expected = array( $font_family_handle, $variation_handle );
- $this->assertSame( $expected, array_keys( $wp_fonts->registered ), 'Font family should not be re-registered after registering a variation' );
- }
-
- /**
- * @dataProvider data_valid_variation
- *
- * @param string|bool $expected Expected results.
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- * @param string $variation_handle Optional. The variation's handle.
- */
- public function test_should_not_reregister_variation( $expected, $font_family_handle, array $variation, $variation_handle = '' ) {
- $wp_fonts = new WP_Fonts();
- $wp_fonts->add( $font_family_handle, false );
-
- // Set up the test.
- $variation_handle = $wp_fonts->add_variation( $font_family_handle, $variation, $variation_handle );
-
- // Run the test.
- $variant_handle_on_reregister = $wp_fonts->add_variation( $font_family_handle, $variation, $variation_handle );
- $this->assertSame( $expected, $variant_handle_on_reregister, 'Variation should be registered to font family' );
- $this->assertSame( $variation_handle, $variant_handle_on_reregister, 'Variation should return the previously registered variant handle' );
- $this->assertSame( array( $variation_handle ), $this->get_variations( $font_family_handle, $wp_fonts ), 'Variation should only be registered once' );
-
- $this->assertCount( 2, $wp_fonts->registered );
- $this->assertArrayHasKey( $variation_handle, $wp_fonts->registered, 'Variation handle should be in the registry after registration' );
- }
-
- /**
- * @dataProvider data_valid_variation
- *
- * @param string|bool $expected Expected results.
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- * @param string $variation_handle Optional. The variation's handle.
- */
- public function test_should_register_font_family_and_variation( $expected, $font_family_handle, array $variation, $variation_handle = '' ) {
- $wp_fonts = new WP_Fonts();
-
- $variation_handle = $wp_fonts->add_variation( $font_family_handle, $variation, $variation_handle );
- $this->assertSame( $expected, $variation_handle, 'Variation should return its registered handle' );
-
- // Extra checks to ensure both are registered.
- $this->assertCount( 2, $wp_fonts->registered );
- $this->assertArrayHasKey( $font_family_handle, $wp_fonts->registered, 'Font family handle should be in the registry after registration' );
- $this->assertArrayHasKey( $variation_handle, $wp_fonts->registered, 'Variation handle should be in the registry after registration' );
- $this->assertSame( array( $variation_handle ), $this->get_variations( $font_family_handle, $wp_fonts ), 'Variation should be registered to the font family' );
- }
-
- /**
- * @dataProvider data_font_family_handle_undefined
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- */
- public function test_should_not_register_font_family_or_variant( $font_family_handle, array $variation ) {
- $this->expectNotice();
- $this->expectNoticeMessage( 'Font family handle must be a non-empty string.' );
-
- $wp_fonts = new WP_Fonts();
- $wp_fonts->add_variation( $font_family_handle, $variation );
-
- $this->assertEmpty( $wp_fonts->registered, 'Registered queue should be empty' );
- $this->assertEmpty( $this->get_variations( $font_family_handle, $wp_fonts ), 'Variation should not be registered to the font family' );
- }
-
- /**
- * @dataProvider data_font_family_undefined_in_variation
- * @dataProviders data_unable_determine_variation_handle
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- * @param string $expected_message Expected notice message.
- */
- public function test_should_not_register_variation_when_font_family_not_defined( $font_family_handle, array $variation, $expected_message ) {
- $this->expectNotice();
- $this->expectNoticeMessage( $expected_message );
-
- $wp_fonts = new WP_Fonts();
- $this->assertNull( $wp_fonts->add_variation( $font_family_handle, $variation ) );
- }
-
- /**
- * @dataProvider data_unable_determine_variation_handle
- *
- * @param string $font_family_handle The font family's handle for this variation.
- * @param array $variation An array of variation properties to add.
- */
- public function test_should_register_font_family_when_variant_fails_to_register( $font_family_handle, array $variation ) {
- $this->expectNotice();
- $this->expectNoticeMessage( 'Variant handle could not be determined as font-weight and/or font-style are require' );
-
- $wp_fonts = new WP_Fonts();
- $wp_fonts->add_variation( $font_family_handle, $variation );
-
- $this->assertCount( 1, $wp_fonts->registered );
- $this->assertArrayHasKey( $font_family_handle, $wp_fonts->registered );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/dequeue.php b/phpunit/tests/fonts-api/wpFonts/dequeue.php
deleted file mode 100644
index 6cd11dc55b937..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/dequeue.php
+++ /dev/null
@@ -1,72 +0,0 @@
-dequeue( $handles );
- $this->assertEmpty( $this->get_queued_before_register( $wp_fonts ), 'Prequeue should be empty' );
- $this->assertEmpty( $wp_fonts->queue, 'Queue should be empty' );
- }
-
- /**
- * Integration test for dequeuing from queue. It first registers and then enqueues before dequeuing.
- *
- * @dataProvider data_enqueue
- * @dataProvider data_enqueue_variations
- *
- * @param string|string[] $handles Handles to test.
- */
- public function test_should_dequeue_from_queue( $handles ) {
- $wp_fonts = new WP_Fonts();
-
- // Register and enqueue.
- foreach ( $this->get_data_registry() as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $wp_fonts );
- }
- $wp_fonts->enqueue( $handles );
-
- // To make sure the handles are in the queue before dequeuing.
- $this->assertNotEmpty( $wp_fonts->queue, 'Queue not be empty before dequeueing' );
-
- // Run the test.
- $wp_fonts->dequeue( $handles );
- $this->assertEmpty( $wp_fonts->queue, 'Queue should be empty after dequeueing' );
- }
-
- /**
- * Integration test for dequeuing from prequeue. It enqueues first.
- *
- * @dataProvider data_enqueue
- * @dataProvider data_enqueue_variations
- *
- * @param string|string[] $handles Handles to test.
- */
- public function test_should_dequeue_from_prequeue( $handles ) {
- $wp_fonts = new WP_Fonts();
- $wp_fonts->enqueue( $handles );
- $this->assertNotEmpty( $this->get_queued_before_register( $wp_fonts ), 'Prequeue not be empty before dequeueing' );
-
- $wp_fonts->dequeue( $handles );
- $this->assertEmpty( $this->get_queued_before_register( $wp_fonts ), 'Prequeue should be empty after dequeueing' );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/doItem.php b/phpunit/tests/fonts-api/wpFonts/doItem.php
deleted file mode 100644
index a92bd244d1f2a..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/doItem.php
+++ /dev/null
@@ -1,336 +0,0 @@
-wp_fonts = new WP_Fonts();
- }
-
- public function test_should_return_false_when_provider_not_registered() {
- $this->assertFalse( $this->wp_fonts->do_item( 'provider_not_registered' ) );
- }
-
- /**
- * @dataProvider data_provider_definitions
- *
- * @param array $provider Provider to mock.
- */
- public function test_should_return_false_when_no_fonts_enqueued_for_provider( array $provider ) {
- $this->setup_provider_property_mock( $this->wp_fonts, $provider );
- $this->assertFalse( $this->wp_fonts->do_item( $provider['id'] ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_provider_definitions() {
- $providers = $this->get_provider_definitions();
-
- return array(
- 'mock' => array( $providers['mock'] ),
- 'local' => array( $providers['local'] ),
- );
- }
-
- /**
- * Test the test set up to ensure the `Tests_Fonts_WpFonts_DoItem_::setup_provider_property_mock()`
- * method works as expected.
- */
- public function test_mocking_providers_property() {
- $font_handles = array( 'font1', 'font2', 'font3' );
- $expected = array(
- 'mock' => array(
- 'class' => Mock_Provider::class,
- 'fonts' => $font_handles,
- ),
- );
-
- $this->setup_provider_property_mock( $this->wp_fonts, $this->get_provider_definitions( 'mock' ), $font_handles );
- $actual = $this->property['WP_Fonts::$providers']->getValue( $this->wp_fonts );
- $this->assertSame( $expected, $actual );
- }
-
- /**
- * Test the private method WP_Fonts::get_enqueued_fonts_for_provider().
- *
- * Why? This test validates the right fonts are returned for use within
- * WP_Fonts::do_item().
- *
- * @dataProvider data_get_enqueued_fonts_for_provider
- *
- * @param array $font_handles Array of handles for the provider.
- * @param array $to_do Handles to set for the WP_Fonts::$to_do property.
- * @param array $expected Expected result.
- */
- public function test_get_enqueued_fonts_for_provider( $font_handles, $to_do, $expected ) {
- // Set up the `to_do` property.
- $this->wp_fonts->to_do = $to_do;
-
- // Open the method's visibility for testing.
- $get_enqueued_fonts_for_provider = $this->get_reflection_method( 'get_enqueued_fonts_for_provider' );
-
- // Mock the WP_Fonts::$property to set up the test.
- $this->setup_provider_property_mock( $this->wp_fonts, $this->get_provider_definitions( 'mock' ), $font_handles );
-
- $actual = $get_enqueued_fonts_for_provider->invoke( $this->wp_fonts, 'mock' );
- $this->assertSameSets( $expected, $actual );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_get_enqueued_fonts_for_provider() {
- return array(
- 'to_do queue is empty' => array(
- 'font_handles ' => array( 'font1', 'font2', 'font3' ),
- 'to_do' => array(),
- 'expected' => array(),
- ),
- 'fonts not in to_do queue' => array(
- 'font_handles ' => array( 'font1', 'font2', 'font3' ),
- 'to_do' => array( 'font12', 'font13' ),
- 'expected' => array(),
- ),
- '2 of the provider fonts in to_do queue' => array(
- 'font_handles ' => array( 'font11', 'font12', 'font13' ),
- 'to_do' => array( 'font11', 'font13' ),
- 'expected' => array( 'font11', 'font13' ),
- ),
- 'do all of the provider fonts' => array(
- 'font_handles ' => array( 'font21', 'font22', 'font23' ),
- 'to_do' => array( 'font21', 'font22', 'font23' ),
- 'expected' => array( 'font21', 'font22', 'font23' ),
- ),
- );
- }
-
- /**
- * Test the private method WP_Fonts::get_font_properties_for_provider().
- *
- * Why? This test validates the right font properties are returned for use within
- * WP_Fonts::do_item().
- *
- * @dataProvider data_get_font_properties_for_provider
- *
- * @param array $font_handles Web fonts for testing.
- * @param array $expected Expected result.
- */
- public function test_get_font_properties_for_provider( $font_handles, $expected ) {
- // Set up the fonts for WP_Dependencies:get_data().
- $fonts = $this->get_registered_fonts();
- // Set all variations to 'mock' provider.
-
- // Mock the WP_Fonts::$property to set up the test.
- $this->setup_provider_property_mock( $this->wp_fonts, $this->get_provider_definitions( 'mock' ), $font_handles );
- $this->setup_registration_mocks( $fonts, $this->wp_fonts );
-
- // Open the method's visibility for testing.
- $method = $this->get_reflection_method( 'get_font_properties_for_provider' );
-
- $actual = $method->invoke( $this->wp_fonts, $font_handles );
- $this->assertSame( $expected, $actual );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_get_font_properties_for_provider() {
- $fonts = $this->get_registered_fonts();
-
- return array(
- 'handles not registered' => array(
- 'font_handles' => array( 'font-not-registered1', 'font-not-registered2', 'font-not-registered3' ),
- 'expected' => array(),
- ),
- 'registered and non-registered handles' => array(
- 'font_handles' => array( 'Source Serif Pro-300-normal', 'not-registered-handle', 'Source Serif Pro-900-italic' ),
- 'expected' => array(
- 'Source Serif Pro-300-normal' => $fonts['Source Serif Pro']['Source Serif Pro-300-normal'],
- 'Source Serif Pro-900-italic' => $fonts['Source Serif Pro']['Source Serif Pro-900-italic'],
- ),
- ),
- 'font-family handles, ie no "font-properties" extra data' => array(
- 'font_handles' => array( 'font1', 'font2', 'merriweather' ),
- 'expected' => array(),
- ),
- );
- }
-
- /**
- * @dataProvider data_print_enqueued_fonts
- *
- * @param array $provider Define provider.
- * @param array $fonts Fonts to register and enqueue.
- * @param array $expected Expected results.
- */
- public function test_should_trigger_provider_when_mocked( array $provider, array $fonts, array $expected ) {
- $this->setup_print_deps( $provider, $fonts );
-
- $provider_mock = $this->setup_object_mock( array( 'set_fonts', 'print_styles' ), $provider['class'] );
-
- // Test the provider's methods are invoked.
- $provider_mock->expects( $this->once() )->method( 'set_fonts' )->with( $this->identicalTo( $expected['set_fonts'] ) );
- $provider_mock->expects( $this->once() )->method( 'print_styles' );
-
- // Set up the WP_Fonts::$provider_instances property.
- $provider_instances = $this->get_reflection_property( 'provider_instances' );
- $provider_instances->setValue( $this->wp_fonts, array( $provider['id'] => $provider_mock ) );
-
- // Test the method successfully processes the provider.
- $this->expectOutputString( '' );
- $this->assertTrue( $this->wp_fonts->do_item( $provider['id'] ), 'WP_Fonts::do_item() should return true' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_print_enqueued_fonts
- *
- * @param array $provider Define provider.
- * @param array $fonts Fonts to register and enqueue.
- * @param array $expected Expected results.
- */
- public function test_should_print( array $provider, array $fonts, array $expected ) {
- $this->setup_print_deps( $provider, $fonts );
-
- // Test the method successfully processes the provider.
- $this->expectOutputString( $expected['printed_output'] );
- $this->assertTrue( $this->wp_fonts->do_item( $provider['id'] ), 'WP_Fonts::do_item() should return true' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_print_enqueued_fonts() {
- $mock = $this->get_registered_mock_fonts();
- $local = $this->get_registered_local_fonts();
- $font_faces = $this->get_registered_fonts_css();
-
- return array(
- 'mock' => array(
- 'provider' => $this->get_provider_definitions( 'mock' ),
- 'fonts' => $mock,
- 'expected' => array(
- 'set_fonts' => array_merge( $mock['font1'], $mock['font2'], $mock['font3'] ),
- 'printed_output' => sprintf(
- '%s; %s; %s; %s; %s; %s\n',
- $font_faces['font1-300-normal'],
- $font_faces['font1-300-italic'],
- $font_faces['font1-900-normal'],
- $font_faces['font2-200-900-normal'],
- $font_faces['font2-200-900-italic'],
- $font_faces['font3-bold-normal']
- ),
- ),
- ),
- 'local' => array(
- 'provider' => $this->get_provider_definitions( 'local' ),
- 'fonts' => $local,
- 'expected' => array(
- 'set_fonts' => array_merge( $local['merriweather'], $local['Source Serif Pro'] ),
- 'printed_output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
- ),
- );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_not_print_enqueued_fonts
- *
- * @param array $provider Define provider.
- * @param array $fonts Fonts to register and enqueue.
- * @param array $expected Not used.
- * @param array $to_do_queue Value to set in the WP_Fonts::$to_do queue.
- */
- public function test_should_not_print_when_to_do_queue_empty( array $provider, array $fonts, $expected, $to_do_queue ) {
- $this->setup_print_deps( $provider, $fonts, $to_do_queue );
-
- // Test the method successfully processes the provider.
- $this->expectOutputString( '' );
- $this->assertFalse( $this->wp_fonts->do_item( $provider['id'] ), 'WP_Fonts::do_item() should return false' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_not_print_enqueued_fonts() {
- $mock = $this->get_registered_mock_fonts();
- $local = $this->get_registered_local_fonts();
-
- return array(
- 'mock provider when to_do queue is empty' => array(
- 'provider' => $this->get_provider_definitions( 'mock' ),
- 'fonts' => $mock,
- 'expected' => array(),
- 'to_do_queue' => array(),
- ),
- 'local provider when to_do queue is empty' => array(
- 'provider' => $this->get_provider_definitions( 'local' ),
- 'fonts' => $local,
- 'expected' => array(),
- 'to_do_queue' => array(),
- ),
- 'fonts not in to_do queue' => array(
- 'provider' => $this->get_provider_definitions( 'mock' ),
- 'fonts' => $mock,
- 'expected' => array(),
- 'to_do_queue' => array(),
- ),
- );
- }
-
- /**
- * Sets up the print dependencies.
- *
- * @param array $provider Provider id and class.
- * @param array $fonts Fonts to register and enqueue.
- * @param array|null $to_do_queue Set the WP_Fonts:$to_do queue.
- */
- private function setup_print_deps( $provider, $fonts, $to_do_queue = null ) {
- // Set up the fonts for WP_Dependencies:get_data().
- $mocks = $this->setup_registration_mocks( $fonts, $this->wp_fonts );
- $handles = array_keys( $mocks );
- $this->setup_provider_property_mock( $this->wp_fonts, $provider, $handles );
-
- // Set up the `WP_Fonts::$to_do` and `WP_Fonts::$to_do_keyed_handles` properties.
- if ( null === $to_do_queue ) {
- $to_do_queue = $handles;
- }
-
- $this->wp_fonts->to_do = $to_do_queue;
- $to_do_keyed_handles = $this->get_reflection_property( 'to_do_keyed_handles' );
- $to_do_keyed_handles->setValue( $this->wp_fonts, array_flip( $to_do_queue ) );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/doItems.php b/phpunit/tests/fonts-api/wpFonts/doItems.php
deleted file mode 100644
index 8a29e7463406a..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/doItems.php
+++ /dev/null
@@ -1,196 +0,0 @@
-wp_fonts = new WP_Fonts();
- }
-
- public function test_should_not_process_when_no_providers_registered() {
- $this->setup_deps( array( 'enqueued' => 'font1' ) );
-
- $done = $this->wp_fonts->do_items();
-
- $this->assertSame( array(), $done, 'WP_Fonts::do_items() should return an empty array' );
- $this->assertSame( array(), $this->wp_fonts->to_do, 'WP_Fonts::$to_do should be an empty array' );
- }
-
- /**
- * @dataProvider data_invalid_handles
- *
- * @param mixed $handles Handles to test.
- */
- public function test_should_throw_notice_when_invalid_handles( $handles ) {
- $this->expectNotice();
- $this->expectNoticeMessage( 'Handles must be a non-empty string or array of non-empty strings' );
-
- $this->wp_fonts->do_items( $handles );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_invalid_handles() {
- return array(
- 'null' => array( null ),
- 'empty array' => array( array() ),
- 'empty string' => array( '' ),
- 'array of empty strings' => array( array( '', '' ) ),
- 'array of mixed falsey values' => array( array( '', false, null, array() ) ),
- );
- }
-
- public function test_should_throw_notice_when_provider_class_not_found() {
- $this->expectNotice();
- $this->expectNoticeMessage( 'Class "Provider_Does_Not_Exist" not found for "doesnotexist" font provider' );
-
- $setup = array(
- 'provider' => array(
- 'doesnotexist' => array(
- 'id' => 'doesnotexist',
- 'class' => 'Provider_Does_Not_Exist',
- ),
- ),
- 'provider_handles' => array( 'doesnotexist' => array( 'font1' ) ),
- 'registered' => array(
- 'doesnotexist' => array(
- 'font1' => array(
- 'font1-300-normal' => array(
- 'provider' => 'doesnotexist',
- 'font-weight' => '300',
- 'font-style' => 'normal',
- 'font-display' => 'fallback',
- ),
- ),
- ),
- ),
- 'enqueued' => array( 'font1', 'font1-300-normal' ),
- );
- $this->setup_deps( $setup );
-
- $this->wp_fonts->do_items();
- }
-
- /**
- * @dataProvider data_print_enqueued
- *
- * @param array $setup Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_mocked_enqueued( $setup, $expected_done, $expected_output ) {
- $this->setup_deps( $setup );
-
- $this->expectOutputString( $expected_output );
- $actual_done = $this->wp_fonts->do_items();
- $this->assertSameSets( $expected_done, $actual_done, 'Printed handles should match' );
- }
-
- /**
- * Integration test that registers providers and fonts and then enqueues before
- * testing the printing functionality.
- *
- * @dataProvider data_print_enqueued
- *
- * @param array $setup Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_enqueued( $setup, $expected_done, $expected_output ) {
- $this->setup_integrated_deps( $setup );
-
- $this->expectOutputString( $expected_output, 'Printed @font-face styles should match' );
- $actual_done = $this->wp_fonts->do_items();
- $this->assertSameSets( $expected_done, $actual_done, 'Printed handles should match' );
- }
-
- /**
- * Integration test to validate printing given handles. Rather than mocking internal functionality,
- * it registers providers and fonts but does not enqueue.
- *
- * @dataProvider data_print_enqueued
- *
- * @param array $setup Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_handles_when_not_enqueued( $setup, $expected_done, $expected_output ) {
- $this->setup_integrated_deps( $setup, false );
- // Do not enqueue. Instead, pass the handles to WP_Fonts::do_items().
- $handles = $setup['enqueued'];
- $this->assertEmpty( $this->wp_fonts->queue, 'No fonts should be enqueued' );
-
- $this->expectOutputString( $expected_output );
- $actual_done = $this->wp_fonts->do_items( $handles );
- $this->assertSameSets( $expected_done, $actual_done, 'Printed handles should match' );
- }
-
- /**
- * Sets up the dependencies for the mocked test.
- *
- * @param array $setup Dependencies to set up.
- */
- private function setup_deps( array $setup ) {
- $setup = array_merge(
- array(
- 'provider' => array(),
- 'provider_handles' => array(),
- 'registered' => array(),
- 'enqueued' => array(),
- ),
- $setup
- );
-
- if ( ! empty( $setup['provider'] ) ) {
- foreach ( $setup['provider'] as $provider_id => $provider ) {
- $this->setup_provider_property_mock( $this->wp_fonts, $provider, $setup['provider_handles'][ $provider_id ] );
- }
- }
-
- if ( ! empty( $setup['registered'] ) ) {
- $this->setup_registration_mocks( $setup['registered'], $this->wp_fonts );
- }
-
- if ( ! empty( $setup['enqueued'] ) ) {
- $queue = $this->get_reflection_property( 'queue' );
- $queue->setValue( $this->wp_fonts, $setup['enqueued'] );
- }
- }
-
- /**
- * Sets up the dependencies for integration test.
- *
- * @param array $setup Dependencies to set up.
- * @param bool $enqueue Whether to enqueue. Default true.
- */
- private function setup_integrated_deps( array $setup, $enqueue = true ) {
- foreach ( $setup['provider'] as $provider ) {
- $this->wp_fonts->register_provider( $provider['id'], $provider['class'] );
- }
- foreach ( $setup['registered'] as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $this->wp_fonts );
- }
-
- if ( $enqueue ) {
- $this->wp_fonts->enqueue( $setup['enqueued'] );
- }
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/enqueue.php b/phpunit/tests/fonts-api/wpFonts/enqueue.php
deleted file mode 100644
index 09c14676c7ae0..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/enqueue.php
+++ /dev/null
@@ -1,53 +0,0 @@
-enqueue( $handles );
-
- $this->assertSame( $expected, $this->get_queued_before_register( $wp_fonts ), 'Handles should be added to before registered queue' );
- $this->assertEmpty( $wp_fonts->queue, 'Handles should not be added to the enqueue queue when not registered' );
- }
-
- /**
- * Integration test for enqueuing (a) a font family and all of its variations or (b) specific variations.
- *
- * @dataProvider data_enqueue
- * @dataProviders data_enqueue_variations
- *
- * @param string|string[] $handles Handles to test.
- * @param array $expected Expected queue.
- */
- public function test_should_enqueue_when_registered( $handles, array $expected ) {
- $wp_fonts = new WP_Fonts();
- foreach ( $this->get_data_registry() as $font_family => $variations ) {
- $this->setup_register( $font_family, $variations, $wp_fonts );
- }
-
- $wp_fonts->enqueue( $handles );
-
- $this->assertEmpty( $this->get_queued_before_register( $wp_fonts ), '"queued_before_register" queue should be empty' );
- $this->assertSame( $expected, $wp_fonts->queue, 'Queue should contain the given handles' );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/getEnqueued.php b/phpunit/tests/fonts-api/wpFonts/getEnqueued.php
deleted file mode 100644
index bacb8a31aa650..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/getEnqueued.php
+++ /dev/null
@@ -1,57 +0,0 @@
-assertEmpty( $wp_fonts->get_enqueued() );
- }
-
- /**
- * Unit test for when font families are enqueued.
- *
- * @dataProvider data_enqueue
- *
- * @param string|string[] $not_used Not used.
- * @param array $expected Expected queue.
- */
- public function test_should_return_queue_when_property_has_font_families( $not_used, array $expected ) {
- $wp_fonts = new WP_Fonts();
- $wp_fonts->queue = $expected;
-
- $this->assertSame( $expected, $wp_fonts->get_enqueued() );
- }
-
- /**
- * Full integration test that registers and enqueues the queue
- * is properly wired for "get_enqueued()".
- *
- * @dataProvider data_enqueue
- *
- * @param string|string[] $font_family Font family to test.
- * @param array $expected Expected queue.
- */
- public function test_should_return_queue_when_font_families_registered_and_enqueued( $font_family, array $expected ) {
- $wp_fonts = new WP_Fonts();
-
- // Register and enqueue.
- foreach ( $this->get_data_registry() as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $wp_fonts );
- }
- $wp_fonts->enqueue( $font_family );
-
- $this->assertSame( $expected, $wp_fonts->get_enqueued() );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/getProviders.php b/phpunit/tests/fonts-api/wpFonts/getProviders.php
deleted file mode 100644
index 410adaace286a..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/getProviders.php
+++ /dev/null
@@ -1,62 +0,0 @@
-wp_fonts = new WP_Fonts();
-
- $this->providers_property = new ReflectionProperty( WP_Fonts::class, 'providers' );
- $this->providers_property->setAccessible( true );
- }
-
- public function test_should_be_empty() {
- $actual = $this->wp_fonts->get_providers();
- $this->assertIsArray( $actual, 'Should return an empty array' );
- $this->assertEmpty( $actual, 'Should return an empty array when no providers are registered' );
- }
-
- /**
- * @dataProvider data_get_providers
- *
- * @param array $providers Array of providers to test.
- * @param array $expected Expected results.
- */
- public function test_get_providers( array $providers, array $expected ) {
- $this->setup_providers( $providers );
- $this->assertSame( $expected, $this->wp_fonts->get_providers() );
- }
-
- /**
- * Sets up the given providers and stores them in the `WP_Fonts::providers` property.
- *
- * @param array $providers Array of providers to set up.
- */
- private function setup_providers( array $providers ) {
- $data = array();
-
- foreach ( $providers as $provider_id => $class ) {
- $data[ $provider_id ] = array(
- 'class' => $class,
- 'fonts' => array(),
- );
- }
-
- $this->providers_property->setValue( $this->wp_fonts, $data );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/getRegistered.php b/phpunit/tests/fonts-api/wpFonts/getRegistered.php
deleted file mode 100644
index 7dc116f587539..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/getRegistered.php
+++ /dev/null
@@ -1,90 +0,0 @@
-assertEmpty( $wp_fonts->get_registered() );
- }
-
- /**
- * Unit test for when font families are enqueued.
- *
- * @dataProvider data_get_registered
- *
- * @param array $inputs Font family(ies) and variations to register.
- */
- public function test_should_return_queue_when_mocking_registered_property( array $inputs ) {
- $wp_fonts = new WP_Fonts();
- $mocks = $this->setup_registration_mocks( $inputs, $wp_fonts );
- $expected = array_keys( $mocks );
-
- $this->assertSame( $expected, $wp_fonts->get_registered() );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_get_registered() {
- return array(
- 'no variations' => array(
- 'inputs' => array(
- 'lato' => array(),
- ),
- ),
- 'with 1 variation' => array(
- 'inputs' => array(
- 'Source Serif Pro' => array( 'variation-1' ),
- ),
- ),
- 'with 2 variations' => array(
- 'inputs' => array(
- 'my-cool-font' => array( 'cool-1', 'cool-2' ),
- ),
- ),
- 'when multiple font families registered' => array(
- 'inputs' => array(
- 'font-family-1' => array( 'variation-11', 'variation-12' ),
- 'font-family-2' => array( 'variation-21', 'variation-22' ),
- 'font-family-3' => array( 'variation-31', 'variation-32' ),
- ),
- ),
- );
- }
-
- /**
- * Full integration test that registers varying number of font families and variations
- * to validate if "get_registered()" internals is property wired to the registered queue.
- *
- * @dataProvider data_one_to_many_font_families_and_zero_to_many_variations
- *
- * @param string $font_family Not used.
- * @param array $inputs Font family(ies) and variations to register.
- * @param array $expected Expected results.
- */
- public function test_should_return_queue_when_items_are_registered( $font_family, array $inputs, array $expected ) {
- $wp_fonts = new WP_Fonts();
-
- // Register before testing.
- foreach ( $inputs as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $wp_fonts );
- }
-
- $this->assertSame( $expected, $wp_fonts->get_registered() );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/query.php b/phpunit/tests/fonts-api/wpFonts/query.php
deleted file mode 100644
index 0e56b515e7ebf..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/query.php
+++ /dev/null
@@ -1,151 +0,0 @@
-wp_fonts = new WP_Fonts();
- }
-
- /**
- * @dataProvider data_invalid_query
- * @dataProvider data_valid_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_should_fail_when_handles_not_registered( $query_handle ) {
- $this->assertFalse( $this->wp_fonts->query( $query_handle, 'registered' ) );
- }
-
- /**
- * @dataProvider data_invalid_query
- * @dataProvider data_valid_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_should_fail_when_handles_not_registered_or_enqueued( $query_handle ) {
- $this->assertFalse( $this->wp_fonts->query( $query_handle, 'queue' ) );
- }
-
- /**
- * @dataProvider data_valid_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_registered_query_should_succeed_when_registered( $query_handle ) {
- $this->setup_registry();
-
- $actual = $this->wp_fonts->query( $query_handle, 'registered' );
- $this->assertInstanceOf( '_WP_Dependency', $actual, 'Query should return an instance of _WP_Dependency' );
- $this->assertSame( $query_handle, $actual->handle, 'Query object handle should match the given handle to query' );
- }
-
- /**
- * @dataProvider data_valid_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_enqueued_query_should_succeed_when_registered_and_enqueued( $query_handle ) {
- $this->setup_registry();
- $this->wp_fonts->enqueue( $query_handle );
-
- $this->assertTrue( $this->wp_fonts->query( $query_handle, 'enqueued' ) );
- }
-
- /**
- * @dataProvider data_valid_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_enqueued_query_should_fail_when_not_registered_but_enqueued( $query_handle ) {
- $this->wp_fonts->enqueue( $query_handle );
-
- $this->assertFalse( $this->wp_fonts->query( $query_handle, 'enqueued' ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_invalid_query() {
- return array(
- 'DM Sans' => array( 'DM Sans' ),
- 'roboto' => array( 'roboto' ),
- 'my-font' => array( 'my-font' ),
- );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_valid_query() {
- return array(
- 'lato' => array( 'lato' ),
- 'merriweather' => array( 'merriweather' ),
- 'Source Serif Pro' => array( 'source-serif-pro' ),
- );
- }
-
- public function test_done_query_should_fail_when_no_variations() {
- $this->wp_fonts->register_provider( 'local', WP_Fonts_Provider_Local::class );
- $this->setup_registry();
- $this->wp_fonts->enqueue( 'lato' );
-
- $this->wp_fonts->do_items( 'lato' );
-
- $this->assertFalse( $this->wp_fonts->query( 'lato', 'done' ) );
- }
-
- /**
- * @dataProvider data_done_query
- *
- * @param string $query_handle Handle to test.
- */
- public function test_done_query_should_succeed_when_registered_and_enqueued( $query_handle ) {
- $this->wp_fonts->register_provider( 'local', WP_Fonts_Provider_Local::class );
- $this->setup_registry();
- $this->wp_fonts->enqueue( $query_handle );
-
- // Process the fonts while ignoring all the printed output.
- $this->expectOutputRegex( '`.`' );
- $this->wp_fonts->do_items( $query_handle );
- $this->getActualOutput();
-
- $this->assertTrue( $this->wp_fonts->query( $query_handle, 'done' ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_done_query() {
- return array(
- 'merriweather' => array( 'merriweather' ),
- 'Source Serif Pro' => array( 'source-serif-pro' ),
- );
- }
-
- private function setup_registry() {
- foreach ( $this->get_registered_local_fonts() as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $this->wp_fonts );
- }
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/registerProvider.php b/phpunit/tests/fonts-api/wpFonts/registerProvider.php
deleted file mode 100644
index c67976e0a6865..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/registerProvider.php
+++ /dev/null
@@ -1,116 +0,0 @@
-assertTrue( $wp_fonts->register_provider( $provider_id, $class_name ), 'WP_Fonts::register_provider() should return true' );
- $this->assertSame( $expected, $wp_fonts->get_providers(), 'Provider "' . $provider_id . '" should be registered in providers queue' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_register_providers() {
- return array(
- 'mock' => array(
- 'provider_id' => 'mock',
- 'class' => Mock_Provider::class,
- 'expected' => array(
- 'mock' => array(
- 'class' => Mock_Provider::class,
- 'fonts' => array(),
- ),
- ),
- ),
- 'local' => array(
- 'provider_id' => 'local',
- 'class' => WP_Fonts_Provider_Local::class,
- 'expected' => array(
- 'local' => array(
- 'class' => WP_Fonts_Provider_Local::class,
- 'fonts' => array(),
- ),
- ),
- ),
- );
- }
-
- public function test_should_register_multiple_providers() {
- $wp_fonts = new WP_Fonts();
- $providers = $this->get_provider_definitions();
- foreach ( $providers as $provider ) {
- $this->assertTrue( $wp_fonts->register_provider( $provider['id'], $provider['class'] ), 'WP_Fonts::register_provider() should return true for provider ' . $provider['id'] );
- }
-
- $expected = array(
- 'mock' => array(
- 'class' => $providers['mock']['class'],
- 'fonts' => array(),
- ),
- 'local' => array(
- 'class' => $providers['local']['class'],
- 'fonts' => array(),
- ),
- );
-
- $this->assertSame( $expected, $wp_fonts->get_providers(), 'Both local and mock providers should be registered' );
- }
-
- /**
- * @dataProvider data_invalid_providers
- *
- * @param string $provider_id Provider ID.
- * @param string $class_name Provider class name.
- */
- public function test_should_not_register( $provider_id, $class_name ) {
- $wp_fonts = new WP_Fonts();
-
- $this->assertFalse( $wp_fonts->register_provider( $provider_id, $class_name ), 'WP_Fonts::register_provider() should return false' );
- $this->assertArrayNotHasKey( $provider_id, $wp_fonts->get_providers(), 'Both local and mock providers should be registered' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_invalid_providers() {
- return array(
- 'provider_id is empty' => array(
- 'provider_id' => '',
- 'class' => Mock_Provider::class,
- ),
- 'class is empty' => array(
- 'provider_id' => 'local',
- 'class' => '',
- ),
- 'class does not exist' => array(
- 'provider_id' => 'doesnotexist',
- 'class' => 'Provider_Does_Not_Exist',
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/remove.php b/phpunit/tests/fonts-api/wpFonts/remove.php
deleted file mode 100644
index 208bd58c3d2c3..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/remove.php
+++ /dev/null
@@ -1,118 +0,0 @@
-remove( array( 'handle-1', 'handle2' ) );
-
- $this->assertEmpty( $wp_fonts->registered );
- }
-
- /**
- * @dataProvider data_remove_when_registered
- *
- * @param array $handles Handles to remove.
- * @param array $expected Expected handles are running test.
- */
- public function test_should_remove_when_registered( array $handles, array $expected ) {
- $wp_fonts = new WP_Fonts();
- $wp_fonts->registered = $this->generate_registered_queue();
-
- $wp_fonts->remove( $handles );
-
- $this->assertSameSets( $expected, array_keys( $wp_fonts->registered ), 'Registered queue should match after removing handles' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_remove_when_registered() {
- $all = array(
- 'handle-1',
- 'handle-2',
- 'handle-3',
- 'handle-4',
- 'handle-5',
- 'handle-6',
- 'handle-7',
- 'handle-8',
- 'handle-9',
- 'handle-10',
- );
-
- return array(
- 'remove none' => array(
- 'handles' => array(),
- 'expected' => $all,
- ),
- 'remove handle-5' => array(
- 'handles' => array( 'handle-5' ),
- 'expected' => array(
- 'handle-1',
- 'handle-2',
- 'handle-3',
- 'handle-4',
- 'handle-6',
- 'handle-7',
- 'handle-8',
- 'handle-9',
- 'handle-10',
- ),
- ),
- 'remove 2 from start and end' => array(
- 'handles' => array( 'handle-1', 'handle-2', 'handle-9', 'handle-10' ),
- 'expected' => array(
- 'handle-3',
- 'handle-4',
- 'handle-5',
- 'handle-6',
- 'handle-7',
- 'handle-8',
- ),
- ),
- 'remove all' => array(
- 'handles' => $all,
- 'expected' => array(),
- ),
- 'remove only registered' => array(
- 'handles' => array( 'handle-1', 'handle-10', 'handle-abc', 'handle-5' ),
- 'expected' => array(
- 'handle-2',
- 'handle-3',
- 'handle-4',
- 'handle-6',
- 'handle-7',
- 'handle-8',
- 'handle-9',
- ),
- ),
- );
- }
-
- private function generate_registered_queue() {
- $queue = array();
- for ( $num = 1; $num <= 10; $num++ ) {
- $handle = "handle-{$num}";
- $queue[ $handle ] = $num;
- }
-
- return $queue;
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/removeFontFamily.php b/phpunit/tests/fonts-api/wpFonts/removeFontFamily.php
deleted file mode 100644
index 6e762307d0520..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/removeFontFamily.php
+++ /dev/null
@@ -1,89 +0,0 @@
-setup_registration_mocks( $inputs, $wp_fonts );
- // Test the before state, just to make sure.
- $this->assertArrayHasKey( $font_family, $wp_fonts->registered, 'Registered queue should contain the font family before remove' );
- $this->assertSame( $registered_handles, array_keys( $wp_fonts->registered ), 'Font family and variations should be registered before remove' );
-
- $wp_fonts->remove_font_family( $font_family );
-
- $this->assertArrayNotHasKey( $font_family, $wp_fonts->registered, 'Registered queue should not contain the font family' );
- $this->assertSame( $expected, array_keys( $wp_fonts->registered ), 'Registered queue should match after removing font family' );
- }
-
- /**
- * @dataProvider data_one_to_many_font_families_and_zero_to_many_variations
- *
- * @param string $font_family Font family to test.
- * @param array $inputs Font family(ies) and variations to pre-register.
- * @param array $registered_handles Not used.
- * @param array $expected Array of expected handles.
- */
- public function test_should_bail_out_when_not_registered( $font_family, array $inputs, array $registered_handles, array $expected ) {
- $wp_fonts = new WP_Fonts();
- unset( $inputs[ $font_family ] );
- $this->setup_registration_mocks( $inputs, $wp_fonts );
-
- $wp_fonts->remove_font_family( $font_family );
-
- $this->assertArrayNotHasKey( $font_family, $wp_fonts->registered, 'Registered queue should not contain the font family' );
- $this->assertSame( $expected, array_keys( $wp_fonts->registered ), 'Registered queue should match after removing font family' );
- }
-
- /**
- * Integration test for removing a font family and all of its variation when font family is registered.
- *
- * @dataProvider data_one_to_many_font_families_and_zero_to_many_variations
- *
- * @param string $font_family Font family to test.
- * @param array $inputs Font family(ies) and variations to pre-register.
- * @param array $registered_handles Expected handles after registering.
- * @param array $expected Array of expected handles.
- */
- public function test_should_deregister_when_registered( $font_family, array $inputs, array $registered_handles, array $expected ) {
- $wp_fonts = new WP_Fonts();
- // Register all font families and their variations.
- foreach ( $inputs as $input_font_family => $variations ) {
- $handle = $wp_fonts->add_font_family( $input_font_family );
- foreach ( $variations as $variation_handle => $variation ) {
- if ( ! is_string( $variation_handle ) ) {
- $variation_handle = '';
- }
- $wp_fonts->add_variation( $handle, $variation, $variation_handle );
- }
- }
- // Test the before state, just to make sure.
- $this->assertArrayHasKey( $font_family, $wp_fonts->registered, 'Registered queue should contain the font family before remove' );
- $this->assertSame( $registered_handles, array_keys( $wp_fonts->registered ), 'Font family and variations should be registered before remove' );
-
- $wp_fonts->remove_font_family( $font_family );
-
- $this->assertArrayNotHasKey( $font_family, $wp_fonts->registered, 'Registered queue should not contain the font family' );
- $this->assertSame( $expected, array_keys( $wp_fonts->registered ), 'Registered queue should match after removing font family' );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFonts/removeVariation.php b/phpunit/tests/fonts-api/wpFonts/removeVariation.php
deleted file mode 100644
index 508c8ce264d8f..0000000000000
--- a/phpunit/tests/fonts-api/wpFonts/removeVariation.php
+++ /dev/null
@@ -1,278 +0,0 @@
-wp_fonts = new WP_Fonts();
- $this->fonts_to_register = $this->get_registered_local_fonts();
- }
-
- /**
- * Sets up the unit test by mocking the WP_Dependencies object using stdClass and
- * registering each font family directly to the WP_Fonts::$registered property
- * and its variations to the mocked $deps property.
- */
- private function setup_unit_test() {
- $this->setup_registration_mocks( $this->fonts_to_register, $this->wp_fonts );
- }
-
- /**
- * Sets up the integration test by properly registering each font family and its variations
- * by using the WP_Fonts::add() and WP_Fonts::add_variation() methods.
- */
- private function setup_integration_test() {
- foreach ( $this->fonts_to_register as $font_family_handle => $variations ) {
- $this->setup_register( $font_family_handle, $variations, $this->wp_fonts );
- }
- }
-
- /**
- * Testing the test setup to ensure it works.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_mocked_setup( $font_family_handle, $variation_handle ) {
- $this->setup_unit_test();
-
- $this->assertArrayHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be in the registered queue before removal' );
- $this->assertContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should be in its font family deps before removal' );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_should_do_nothing_when_variation_and_font_family_not_registered
- *
- * @param string $font_family Font family name.
- * @param string $font_family_handle Font family handle.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_unit_should_do_nothing_when_variation_and_font_family_not_registered( $font_family, $font_family_handle, $variation_handle ) {
- // Set up the test.
- unset( $this->fonts_to_register[ $font_family ] );
- $this->setup_unit_test();
- $registered_queue = $this->wp_fonts->registered;
-
- // Run the tests.
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $font_family_handle, $this->wp_fonts->registered, 'Font family should not be registered' );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertSame( $registered_queue, $this->wp_fonts->registered, 'Registered queue should not have changed' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_should_do_nothing_when_variation_and_font_family_not_registered
- *
- * @param string $font_family Font family name.
- * @param string $font_family_handle Font family handle.
- * @param string $variation_handle Variation handle to remove.
- */
- public function test_should_do_nothing_when_variation_and_font_family_not_registered( $font_family, $font_family_handle, $variation_handle ) {
- // Set up the test.
- unset( $this->fonts_to_register[ $font_family ] );
- $this->setup_integration_test();
- $registered_queue = $this->wp_fonts->get_registered();
-
- // Run the tests.
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $font_family_handle, $this->wp_fonts->registered, 'Font family should not be registered' );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertSameSets( $registered_queue, $this->wp_fonts->get_registered(), 'Registered queue should not have changed' );
- }
-
- /**
- * Data provider for testing removal of variations.
- *
- * @return array
- */
- public function data_should_do_nothing_when_variation_and_font_family_not_registered() {
- return array(
- 'Font with 1 variation' => array(
- 'font_family' => 'merriweather',
- 'font_family_handle' => 'merriweather',
- 'variation_handle' => 'merriweather-200-900-normal',
- ),
- 'Font with multiple variations' => array(
- 'font_family' => 'Source Serif Pro',
- 'font_family_handle' => 'source-serif-pro',
- 'variation_handle' => 'Source Serif Pro-300-normal',
- ),
- );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_only_remove_from_font_family_deps_when_variation_not_in_queue( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
- $this->setup_remove_variation_from_registered( $variation_handle );
-
- // Run the tests.
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_only_remove_from_font_family_deps_when_variation_not_in_queue( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
- $this->setup_remove_variation_from_registered( $variation_handle );
-
- // Run the tests.
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variant should not be registered' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_remove_variation_from_registered_queue_though_font_family_not_registered( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
- $this->setup_remove_from_font_family_deps( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should not be in its font family deps before removal' );
-
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
-
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_remove_variation_from_registered_queue_though_font_family_not_registered( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
- $this->setup_remove_from_font_family_deps( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should not be in its font family deps before removal' );
-
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
-
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Unit test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_unit_should_remove_variation_from_queue_and_font_family_deps( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_unit_test();
-
- $this->assertArrayHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should be in its font family deps before removal' );
-
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be not be in registered queue' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Integration test.
- *
- * @dataProvider data_remove_variations
- *
- * @param string $font_family_handle Font family for the variation.
- * @param string $variation_handle Variation handle to remove.
- * @param array $expected Expected results.
- */
- public function test_should_remove_variation_from_queue_and_font_family_deps( $font_family_handle, $variation_handle, $expected ) {
- // Set up the test.
- $this->setup_integration_test();
-
- $this->assertArrayHasKey( $variation_handle, array_flip( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Variation should be in its font family deps before removal' );
-
- $this->wp_fonts->remove_variation( $font_family_handle, $variation_handle );
-
- $this->assertArrayNotHasKey( $variation_handle, $this->wp_fonts->registered, 'Variation should be not be in registered queue' );
- $this->assertNotContains( $variation_handle, $this->wp_fonts->registered[ $font_family_handle ]->deps, 'Variation should not be its font family deps' );
- $this->assertSameSets( $expected['font_family_deps'], array_values( $this->wp_fonts->registered[ $font_family_handle ]->deps ), 'Only the tested variation handle should be removed from font family deps' );
- }
-
- /**
- * Remove the variation handle from the font family's deps.
- *
- * @param string $font_family_handle Font family.
- * @param string $variation_handle The variation handle to remove.
- */
- private function setup_remove_from_font_family_deps( $font_family_handle, $variation_handle ) {
- foreach ( $this->wp_fonts->registered[ $font_family_handle ]->deps as $index => $vhandle ) {
- if ( $variation_handle !== $vhandle ) {
- continue;
- }
- unset( $this->wp_fonts->registered[ $font_family_handle ]->deps[ $index ] );
- break;
- }
- }
-
- /**
- * Removes the variation from the WP_Fonts::$registered queue.
- *
- * @param string $variation_handle The variation handle to remove.
- */
- private function setup_remove_variation_from_registered( $variation_handle ) {
- unset( $this->wp_fonts->registered[ $variation_handle ] );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsProviderLocal.php b/phpunit/tests/fonts-api/wpFontsProviderLocal.php
deleted file mode 100644
index f9319390c3b6b..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsProviderLocal.php
+++ /dev/null
@@ -1,180 +0,0 @@
-provider = new WP_Fonts_Provider_Local();
-
- $this->set_up_theme();
- }
-
- public function tear_down() {
- // Restore the original theme directory setup.
- $GLOBALS['wp_theme_directories'] = $this->orig_theme_dir;
- wp_clean_themes_cache();
- unset( $GLOBALS['wp_themes'] );
-
- parent::tear_down();
- }
-
- /**
- * @covers WP_Fonts_Provider_Local::set_fonts
- */
- public function test_set_fonts() {
- $fonts = array(
- 'source-serif-pro-200-900-normal-local' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- ),
- 'source-serif-pro-200-900-italic-local' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'italic',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- ),
- );
-
- $this->provider->set_fonts( $fonts );
-
- $property = $this->get_fonts_property();
- $this->assertSame( $fonts, $property->getValue( $this->provider ) );
- }
-
- /**
- * @covers WP_Fonts_Provider_Local::get_css
- *
- * @dataProvider data_get_css_print_styles
- *
- * @param array $fonts Prepared fonts (to store in WP_Fonts_Provider_Local::$fonts property).
- * @param string $expected Expected CSS.
- */
- public function test_get_css( array $fonts, $expected ) {
- $property = $this->get_fonts_property();
- $property->setValue( $this->provider, $fonts );
-
- $this->assertSame( $expected['font-face-css'], $this->provider->get_css() );
- }
-
- /**
- * @covers WP_Fonts_Provider_Local::print_styles
- *
- * @dataProvider data_get_css_print_styles
- *
- * @param array $fonts Prepared fonts (to store in WP_Fonts_Provider_Local::$fonts property).
- * @param string $expected Expected CSS.
- */
- public function test_print_styles( array $fonts, $expected ) {
- $property = $this->get_fonts_property();
- $property->setValue( $this->provider, $fonts );
-
- $expected_output = sprintf( $expected['style-element'], $expected['font-face-css'] );
- $this->expectOutputString( $expected_output );
- $this->provider->print_styles();
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_get_css_print_styles() {
- return array(
- 'truetype format' => array(
- 'fonts' => array(
- 'open-sans-bold-italic-local' => array(
- 'provider' => 'local',
- 'font-family' => 'Open Sans',
- 'font-style' => 'italic',
- 'font-weight' => 'bold',
- 'src' => 'http://example.org/assets/fonts/OpenSans-Italic-VariableFont_wdth,wght.ttf',
- ),
- ),
- 'expected' => array(
- 'style-element' => "\n",
- 'font-face-css' => << array(
- 'fonts' => array(
- 'source-serif-pro-200-900-normal-local' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'http://example.org/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- ),
- 'source-serif-pro-400-900-italic-local' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'italic',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'http://example.org/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- ),
- ),
- 'expected' => array(
- 'style-element' => "\n",
- 'font-face-css' => <<theme_root = realpath( GUTENBERG_DIR_TESTDATA . '/themedir1' );
- $this->orig_theme_dir = $GLOBALS['wp_theme_directories'];
- $GLOBALS['wp_theme_directories'] = array( $this->theme_root );
-
- $theme_root_callback = function () {
- return $this->theme_root;
- };
- add_filter( 'theme_root', $theme_root_callback );
- add_filter( 'stylesheet_root', $theme_root_callback );
- add_filter( 'template_root', $theme_root_callback );
-
- // Clear caches.
- wp_clean_themes_cache();
- unset( $GLOBALS['wp_themes'] );
- }
-
- private function get_fonts_property() {
- $property = new ReflectionProperty( $this->provider, 'fonts' );
- $property->setAccessible( true );
-
- return $property;
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsResolver/addMissingFontsToThemeJson.php b/phpunit/tests/fonts-api/wpFontsResolver/addMissingFontsToThemeJson.php
deleted file mode 100644
index d6e45561e5e33..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsResolver/addMissingFontsToThemeJson.php
+++ /dev/null
@@ -1,252 +0,0 @@
-assertInstanceOf( WP_Theme_JSON_Gutenberg::class, $actual, 'Instance of WP_Theme_JSON_Gutenberg should be returned' );
- }
-
- /**
- * @dataProvider data_themes
- *
- * @param string $theme Theme to use.
- */
- public function test_should_bail_out_when_no_registered_fonts( $theme ) {
- switch_theme( $theme );
-
- $data = new WP_Theme_JSON_Gutenberg( self::$theme_json_data[ $theme ] );
- $actual = WP_Fonts_Resolver::add_missing_fonts_to_theme_json( $data );
-
- $this->assertEmpty( wp_fonts()->get_registered_font_families(), 'No fonts should be registered in Fonts API' );
- $this->assertSame( $data, $actual, 'Same instance of WP_Theme_JSON_Gutenberg should be returned' );
- }
-
- /**
- * Data Provider.
- *
- * @return array
- */
- public function data_themes() {
- return array(
- 'no fonts defined' => array( 'block-theme' ),
- 'no fonts registered' => array( static::FONTS_THEME ),
- );
- }
-
- /**
- * @dataProvider data_should_add_non_theme_json_fonts
- *
- * @param string $theme Theme to use.
- * @param array $fonts Fonts to register.
- * @param array $expected Expected fonts to be added.
- */
- public function test_should_add_non_theme_json_fonts( $theme, $fonts, $expected ) {
- switch_theme( static::FONTS_THEME );
-
- // Register the fonts.
- wp_register_fonts( $fonts );
-
- $data = new WP_Theme_JSON_Gutenberg( self::$theme_json_data[ $theme ] );
- $actual = WP_Fonts_Resolver::add_missing_fonts_to_theme_json( $data );
-
- $this->assertNotSame( $data, $actual, 'New instance of WP_Theme_JSON_Gutenberg should be returned' );
- $actual_raw_data = $actual->get_raw_data();
-
- $this->assertArrayHasKey( 'typography', $actual_raw_data['settings'] );
- $this->assertArrayHasKey( 'fontFamilies', $actual_raw_data['settings']['typography'] );
- $this->assertArrayHasKey( 'theme', $actual_raw_data['settings']['typography']['fontFamilies'] );
-
- $this->assertContains(
- $expected,
- $actual_raw_data['settings']['typography']['fontFamilies']['theme'],
- 'Fonts should be added after running WP_Fonts_Resolver::add_missing_fonts_to_theme_json()'
- );
- }
-
- /**
- * Data Provider.
- *
- * @return array
- */
- public function data_should_add_non_theme_json_fonts() {
- $lato = array(
- 'Lato' => array(
- array(
- 'font-family' => 'Lato',
- 'font-style' => 'normal',
- 'font-weight' => '400',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular.woff2',
- ),
- array(
- 'font-family' => 'Lato',
- 'font-style' => 'italic',
- 'font-weight' => '400',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular-Italic.woff2',
- ),
- ),
- );
-
- $expected_lato = array(
- 'fontFamily' => 'Lato',
- 'name' => 'Lato',
- 'slug' => 'lato',
- 'fontFace' => array(
- 'lato-400-normal' => array(
- 'origin' => 'gutenberg_wp_fonts_api',
- 'provider' => 'local',
- 'fontFamily' => 'Lato',
- 'fontStyle' => 'normal',
- 'fontWeight' => '400',
- 'fontDisplay' => 'fallback',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular.woff2',
- ),
- 'lato-400-italic' => array(
- 'origin' => 'gutenberg_wp_fonts_api',
- 'provider' => 'local',
- 'fontFamily' => 'Lato',
- 'fontStyle' => 'italic',
- 'fontWeight' => '400',
- 'fontDisplay' => 'fallback',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular-Italic.woff2',
- ),
- ),
- );
-
- return array(
- 'theme with no fonts defined' => array(
- 'theme' => 'block-theme',
- 'fonts' => $lato,
- 'expected' => $expected_lato,
- ),
- 'theme with fonts: new fonts not in theme' => array(
- 'theme' => static::FONTS_THEME,
- 'fonts' => $lato,
- 'expected' => $expected_lato,
- ),
-
- /*
- * @TODO Add these tests fixing https://github.com/WordPress/gutenberg/issues/50047.
- *
- 'theme with fonts: new variations registered' => array(
- 'theme' => static::FONTS_THEME,
- 'fonts' => array(
- 'DM Sans' => array(
- 'dm-sans-500-normal' => array(
- 'font-family' => 'DM Sans',
- 'font-style' => 'normal',
- 'font-weight' => '500',
- 'src' => 'https://example.com/tests/assets/fonts/dm-sans/DMSans-Medium.woff2',
- ),
- 'dm-sans-500-italic' => array(
- 'font-family' => 'DM Sans',
- 'font-style' => 'italic',
- 'font-weight' => '500',
- 'src' => 'https://example.com/tests/assets/fonts/dm-sans/DMSans-Medium.woff2',
- ),
- ),
- ),
- 'expected' => array(
- 'fontFace' => array(
- array(
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'normal',
- 'fontWeight' => '400',
- 'src' => array( 'file:./assets/fonts/dm-sans/DMSans-Regular.woff2' ),
- ),
- array(
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'italic',
- 'fontWeight' => '400',
- 'src' => array( 'file:./assets/fonts/dm-sans/DMSans-Regular-Italic.woff2' ),
- ),
- 'dm-sans-500-normal' => array(
- 'origin' => 'gutenberg_wp_fonts_api',
- 'provider' => 'local',
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'normal',
- 'fontWeight' => '500',
- 'fontDisplay' => 'fallback',
- 'src' => array( get_stylesheet_directory_uri() . 'assets/fonts/dm-sans/DMSans-Medium.woff2' ),
- ),
- 'dm-sans-500-italic' => array(
- 'origin' => 'gutenberg_wp_fonts_api',
- 'provider' => 'local',
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'italic',
- 'fontWeight' => '500',
- 'fontDisplay' => 'fallback',
- 'src' => array( get_stylesheet_directory_uri() . 'assets/fonts/dm-sans/DMSans-Medium-Italic.woff2' ),
- ),
- array(
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'normal',
- 'fontWeight' => '700',
- 'src' => array( 'file:./assets/fonts/dm-sans/DMSans-Bold.woff2' ),
- ),
- array(
- 'fontFamily' => 'DM Sans',
- 'fontStretch' => 'normal',
- 'fontStyle' => 'italic',
- 'fontWeight' => '700',
- 'src' => array( 'file:./assets/fonts/dm-sans/DMSans-Bold-Italic.woff2' ),
- ),
- ),
- 'fontFamily' => '"DM Sans", sans-serif',
- 'name' => 'DM Sans',
- 'slug' => 'dm-sans',
- ),
- ),
- */
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsResolver/enqueueUserSelectedFonts.php b/phpunit/tests/fonts-api/wpFontsResolver/enqueueUserSelectedFonts.php
deleted file mode 100644
index 9ff01f1c3166c..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsResolver/enqueueUserSelectedFonts.php
+++ /dev/null
@@ -1,131 +0,0 @@
-user->create(
- array(
- 'role' => 'administrator',
- 'user_email' => 'administrator@example.com',
- )
- );
- }
-
- /**
- * @dataProvider data_should_not_enqueue_when_no_user_selected_fonts
- *
- * @param array $styles Optional. Test styles. Default empty array.
- */
- public function test_should_not_enqueue_when_no_user_selected_fonts( $styles = array() ) {
- $this->set_up_global_styles( $styles );
-
- $mock = $this->set_up_mock( 'enqueue' );
- $mock->expects( $this->never() )
- ->method( 'enqueue' );
-
- $expected = array();
- $this->assertSame( $expected, WP_Fonts_Resolver::enqueue_user_selected_fonts() );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_should_not_enqueue_when_no_user_selected_fonts() {
- return array(
- 'no user-selected styles' => array(),
- 'invalid element' => array(
- array(
- 'elements' => array(
- 'invalid' => array(
- 'typography' => array(
- 'fontFamily' => 'var:preset|font-family|font1',
- 'fontStyle' => 'normal',
- 'fontWeight' => '400',
- ),
- ),
- ),
- ),
- ),
- );
- }
-
- /**
- * @dataProvider data_should_enqueue_when_user_selected_fonts
- *
- * @param array $styles Test styles.
- * @param array $expected Expected results.
- */
- public function test_should_enqueue_when_user_selected_fonts( $styles, $expected ) {
- $mock = $this->set_up_mock( 'enqueue' );
- $mock->expects( $this->once() )
- ->method( 'enqueue' )
- ->with(
- $this->identicalTo( $expected )
- );
-
- $this->set_up_global_styles( $styles );
-
- $this->assertSameSets( $expected, WP_Fonts_Resolver::enqueue_user_selected_fonts() );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_should_enqueue_when_user_selected_fonts() {
- $global_styles = $this->get_mock_user_selected_fonts_global_styles();
-
- return array(
- 'heading, caption, text' => array(
- 'styles' => $global_styles['font1'],
- 'expected' => array( 'font1' ),
- ),
- 'heading, button' => array(
- 'styles' => $global_styles['font2'],
- 'expected' => array( 'font2' ),
- ),
- 'text' => array(
- 'styles' => $global_styles['font3'],
- 'expected' => array( 'font3' ),
- ),
- 'all' => array(
- 'styles' => $global_styles['all'],
- 'expected' => array(
- 0 => 'font1',
- // font1 occurs 2 more times and gets removed as duplicates.
- 3 => 'font2',
- 4 => 'font3',
- ),
- ),
- 'all with invalid element' => array(
- 'styles' => $global_styles['all with invalid element'],
- 'expected' => array(
- 0 => 'font1',
- // font1 occurs 2 more times and gets removed as duplicates.
- 3 => 'font2',
- // Skips font2 for the "invalid" element.
- 4 => 'font3',
- ),
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsResolver/registerFontsFromThemeJson.php b/phpunit/tests/fonts-api/wpFontsResolver/registerFontsFromThemeJson.php
deleted file mode 100644
index 0186dbf34f3fd..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsResolver/registerFontsFromThemeJson.php
+++ /dev/null
@@ -1,297 +0,0 @@
- array(
- // From theme.json.
- 'dm-sans',
- 'source-serif-pro',
- // From style variation.
- 'open-sans',
- ),
- );
-
- public static function set_up_before_class() {
- self::$requires_switch_theme_fixtures = true;
-
- parent::set_up_before_class();
- }
-
- public function test_should_bails_out_when_no_fonts_defined() {
- switch_theme( 'block-theme' );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
- $wp_fonts = wp_fonts();
-
- $this->assertEmpty( $wp_fonts->get_registered() );
- $this->assertEmpty( $wp_fonts->get_enqueued() );
- }
-
- public function test_should_register_and_enqueue_style_variation_fonts() {
- switch_theme( static::FONTS_THEME );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
- $wp_fonts = wp_fonts();
-
- $this->assertContains( 'open-sans', $wp_fonts->get_registered_font_families(), 'Font families should be registered' );
- $this->assertContains( 'open-sans', $wp_fonts->get_enqueued(), 'Font families should be enqueued' );
- }
-
- /**
- * Tests all font families are registered and enqueued. "All" means all font families from
- * the theme's theme.json and within the style variations.
- */
- public function test_should_register_and_enqueue_all_defined_font_families() {
- switch_theme( static::FONTS_THEME );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
- $wp_fonts = wp_fonts();
-
- $expected = static::FONT_FAMILIES[ static::FONTS_THEME ];
- $this->assertSameSetsWithIndex( $expected, $wp_fonts->get_registered_font_families(), 'Font families should be registered' );
- $this->assertSameSetsWithIndex( $expected, $wp_fonts->get_enqueued(), 'Font families should be enqueued' );
- }
-
- /**
- * Test ensures duplicate fonts and variations in the style variations
- * are not re-registered.
- *
- * The Dm Sans fonts are duplicated in the theme's /styles/variations-duplicate-fonts.json.
- */
- public function test_should_not_reregister_duplicate_fonts_from_style_variations() {
- switch_theme( static::FONTS_THEME );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
- $wp_fonts = wp_fonts();
-
- // Font families are not duplicated.
- $this->assertSameSetsWithIndex(
- static::FONT_FAMILIES[ static::FONTS_THEME ],
- $wp_fonts->get_registered_font_families(),
- 'Font families should not be duplicated'
- );
-
- // Font variations are not duplicated.
- $this->assertSameSets(
- array(
- // From theme.json.
- 'dm-sans',
- 'dm-sans-400-normal',
- 'dm-sans-400-italic',
- 'dm-sans-700-normal',
- 'dm-sans-700-italic',
- 'source-serif-pro',
- 'source-serif-pro-200-900-normal',
- 'source-serif-pro-200-900-italic',
- // From style variation.
- 'open-sans',
- 'open-sans-400-normal',
- 'open-sans-400-italic',
- 'dm-sans-500-normal',
- 'dm-sans-500-italic',
- ),
- $wp_fonts->get_registered(),
- 'Font families and their variations should not be duplicated'
- );
- }
-
- /**
- * @dataProvider data_should_replace_src_file_placeholder
- *
- * @param string $handle Variation's handle.
- * @param string $expected Expected src.
- */
- public function test_should_replace_src_file_placeholder( $handle, $expected ) {
- switch_theme( static::FONTS_THEME );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
-
- $variation = wp_fonts()->registered[ $handle ];
- $actual = array_pop( $variation->src );
- $expected = get_stylesheet_directory_uri() . $expected;
-
- $this->assertStringNotContainsString( 'file:./', $actual, 'Font src should not contain the "file:./" placeholder' );
- $this->assertSame( $expected, $actual, 'Font src should be an URL to its file' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_should_replace_src_file_placeholder() {
- return array(
- // Theme's theme.json.
- 'DM Sans: 400 normal' => array(
- 'handle' => 'dm-sans-400-normal',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Regular.woff2',
- ),
- 'DM Sans: 400 italic' => array(
- 'handle' => 'dm-sans-400-italic',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Regular-Italic.woff2',
- ),
- 'DM Sans: 700 normal' => array(
- 'handle' => 'dm-sans-700-normal',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Bold.woff2',
- ),
- 'DM Sans: 700 italic' => array(
- 'handle' => 'dm-sans-700-italic',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Bold-Italic.woff2',
- ),
- 'Source Serif Pro: 200-900 normal' => array(
- 'handle' => 'source-serif-pro-200-900-normal',
- 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- ),
- 'Source Serif Pro: 200-900 italic' => array(
- 'handle' => 'source-serif-pro-200-900-italic',
- 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- ),
-
- // Style Variation: variation-with-new-font-family.json.
- 'Style Variation: new font-family' => array(
- 'handle' => 'open-sans-400-normal',
- 'expected' => '/assets/fonts/open-sans/OpenSans-VariableFont_wdth,wght.tff',
- ),
- 'Style Variation: new font-family italic variation' => array(
- 'handle' => 'open-sans-400-italic',
- 'expected' => '/assets/fonts/open-sans/OpenSans-Italic-VariableFont_wdth,wght.tff',
- ),
-
- // Style Variation: variation-with-new-variation.json.
- 'Style Variation: new medium variation' => array(
- 'handle' => 'dm-sans-500-normal',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Medium.woff2',
- ),
- 'Style Variation: new medium italic variation' => array(
- 'handle' => 'dm-sans-500-italic',
- 'expected' => '/assets/fonts/dm-sans/DMSans-Medium-Italic.woff2',
- ),
- );
- }
-
- public function test_should_convert_font_face_properties_into_kebab_case() {
- switch_theme( static::FONTS_THEME );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
-
- // Testing only one variation since this theme's fonts use the same properties.
- $variation = wp_fonts()->registered['dm-sans-400-normal'];
- $actual_properties = $variation->extra['font-properties'];
-
- $this->assertArrayHasKey( 'font-family', $actual_properties, 'fontFamily should have been converted into font-family' );
- $this->assertArrayNotHasKey( 'fontFamily', $actual_properties, 'fontFamily should not exist.' );
- $this->assertArrayHasKey( 'font-stretch', $actual_properties, 'fontStretch should have been converted into font-stretch' );
- $this->assertArrayNotHasKey( 'fontStretch', $actual_properties, 'fontStretch should not exist' );
- $this->assertArrayHasKey( 'font-style', $actual_properties, 'fontStyle should have been converted into font-style' );
- $this->assertArrayNotHasKey( 'fontStyle', $actual_properties, 'fontStyle should not exist.' );
- $this->assertArrayHasKey( 'font-weight', $actual_properties, 'fontWeight should have been converted into font-weight' );
- $this->assertArrayNotHasKey( 'fontWeight', $actual_properties, 'fontWeight should not exist' );
- }
-
- /**
- * Tests that WP_Fonts_Resolver::register_fonts_from_theme_json() skips fonts that are already registered
- * in the Fonts API. How does it do that? Using the 'origin' property when checking each variation.
- * This property is added when WP_Theme_JSON_Resolver_Gutenberg::get_merged_data() runs.
- *
- * To simulate this scenario, a font is registered first, but not enqueued. Then after running,
- * it checks if the WP_Fonts_Resolver::register_fonts_from_theme_json() enqueued the font. If no, then
- * it was skipped as expected.
- */
- public function test_should_skip_registered_fonts() {
- switch_theme( static::FONTS_THEME );
-
- // Register Lato font.
- wp_register_fonts(
- array(
- 'Lato' => array(
- array(
- 'font-family' => 'Lato',
- 'font-style' => 'normal',
- 'font-weight' => '400',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular.woff2',
- ),
- array(
- 'font-family' => 'Lato',
- 'font-style' => 'italic',
- 'font-weight' => '400',
- 'src' => 'https://example.com/tests/assets/fonts/lato/Lato-Regular-Italic.woff2',
- ),
- ),
- )
- );
-
- // Pre-check to ensure no fonts are enqueued.
- $this->assertEmpty( wp_fonts()->get_enqueued(), 'No fonts should be enqueued before running WP_Fonts_Resolver::register_fonts_from_theme_json()' );
-
- /*
- * When this function runs, it invokes WP_Theme_JSON_Resolver_Gutenberg::get_merged_data(),
- * which will include the Lato fonts with a 'origin' property set in each variation.
- */
- WP_Fonts_Resolver::register_fonts_from_theme_json();
-
- $actual_enqueued_fonts = wp_fonts()->get_enqueued();
-
- $this->assertNotContains( 'lato', $actual_enqueued_fonts, 'Lato font-family should not be enqueued' );
- $this->assertSameSets( static::FONT_FAMILIES[ static::FONTS_THEME ], $actual_enqueued_fonts, 'Only the theme font families should be enqueued' );
- }
-
- public function test_should_skip_when_font_face_not_defined() {
- switch_theme( static::FONTS_THEME );
- $expected_font_family = 'source-serif-pro';
-
- /**
- * Callback that removes the 'fontFace' of the expected font family from the theme's theme.json data.
- * This callback is invoked at the start of WP_Fonts_Resolver::register_fonts_from_theme_json() before processing
- * within that function. How? It's in the call stack of WP_Theme_JSON_Resolver_Gutenberg::get_merged_data().
- *
- * @param WP_Theme_JSON_Data_Gutenberg| WP_Theme_JSON_Data $theme_json_data Instance of the Data object.
- * @return WP_Theme_JSON_Data_Gutenberg| WP_Theme_JSON_Data Modified instance.
- * @throws ReflectionException
- */
- $remove_expected_font_family = static function ( $theme_json_data ) use ( $expected_font_family ) {
- // Need to get the underlying data array which is in WP_Theme_JSON_Gutenberg | WP_Theme_JSON object.
- $property = new ReflectionProperty( $theme_json_data, 'theme_json' );
- $property->setAccessible( true );
- $theme_json_object = $property->getValue( $theme_json_data );
-
- $property = new ReflectionProperty( $theme_json_object, 'theme_json' );
- $property->setAccessible( true );
- $data = $property->getValue( $theme_json_object );
-
- // Loop through the fonts to find the expected font-family to modify.
- foreach ( $data['settings']['typography']['fontFamilies']['theme'] as $index => $definitions ) {
- if ( $expected_font_family !== $definitions['slug'] ) {
- continue;
- }
-
- // Remove the 'fontFace' element, which removes the font's variations.
- unset( $data['settings']['typography']['fontFamilies']['theme'][ $index ]['fontFace'] );
- break;
- }
-
- $theme_json_data->update_with( $data );
-
- return $theme_json_data;
- };
- add_filter( 'wp_theme_json_data_theme', $remove_expected_font_family );
-
- WP_Fonts_Resolver::register_fonts_from_theme_json();
-
- remove_filter( 'wp_theme_json_data_theme', $remove_expected_font_family );
-
- $this->assertNotContains( $expected_font_family, wp_fonts()->get_registered_font_families() );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsUtils/convertFontFamilyIntoHandle.php b/phpunit/tests/fonts-api/wpFontsUtils/convertFontFamilyIntoHandle.php
deleted file mode 100644
index 19b2f15c826ed..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsUtils/convertFontFamilyIntoHandle.php
+++ /dev/null
@@ -1,84 +0,0 @@
-assertSame( $expected, WP_Fonts_Utils::convert_font_family_into_handle( $font_family ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_valid_input() {
- return array(
- 'font family single word name' => array(
- 'font_family' => 'Merriweather',
- 'expected' => 'merriweather',
- ),
- 'font family multiword name' => array(
- 'font_family' => 'Source Sans Pro',
- 'expected' => 'source-sans-pro',
- ),
- 'font family handle delimited by hyphens' => array(
- 'font_family' => 'source-serif-pro',
- 'expected' => 'source-serif-pro',
- ),
- 'font family handle delimited by underscore' => array(
- 'font_family' => 'source_serif_pro',
- 'expected' => 'source_serif_pro',
- ),
- 'font family handle delimited by hyphens and underscore' => array(
- 'font_family' => 'my-custom_font_family',
- 'expected' => 'my-custom_font_family',
- ),
- 'font family handle delimited mixture' => array(
- 'font_family' => 'My custom_font-family',
- 'expected' => 'my-custom_font-family',
- ),
- );
- }
-
- /**
- * @dataProvider data_with_invalid_input
- *
- * @covers WP_Fonts_Utils::convert_font_family_into_handle
- *
- * @param mixed $invalid_input Invalid input.
- */
- public function test_should_not_convert_with_invalid_input( $invalid_input ) {
- $this->assertNull( WP_Fonts_Utils::convert_font_family_into_handle( $invalid_input ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_invalid_input() {
- return array(
- 'empty string' => array( '' ),
- 'integer' => array( 10 ),
- 'font family wrapped in an array' => array( array( 'source-serif-pro' ) ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsUtils/convertVariationIntoHandle.php b/phpunit/tests/fonts-api/wpFontsUtils/convertVariationIntoHandle.php
deleted file mode 100644
index 9268aac8ce372..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsUtils/convertVariationIntoHandle.php
+++ /dev/null
@@ -1,122 +0,0 @@
-assertSame( $expected, WP_Fonts_Utils::convert_variation_into_handle( $font_family, $variation ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_valid_input() {
- return array(
- 'with only font-weight' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'font-weight' => '400',
- ),
- 'expected' => 'merriweather-400',
- ),
- 'with no font-style' => array(
- 'font_family' => 'source-sans-pro',
- 'variation' => array(
- 'font-weight' => '200 900',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'provider' => 'local',
- ),
- 'expected' => 'source-sans-pro-200-900',
- ),
- 'with font family name and full variant' => array(
- 'font_family' => 'source-sans-pro',
- 'variation' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'expected' => 'source-sans-pro-200-900-normal',
- ),
- );
- }
-
- /**
- * @dataProvider data_with_invalid_input
- *
- * @param string $font_family Font family to test.
- * @param array $invalid_input Variation to test.
- */
- public function tests_should_convert_with_invalid_input( $font_family, $invalid_input ) {
- $this->expectNotice();
- $this->expectNoticeMessage( 'Variant handle could not be determined as font-weight and/or font-style are require' );
-
- $this->assertNull( WP_Fonts_Utils::convert_variation_into_handle( $font_family, $invalid_input ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_invalid_input() {
- return array(
- 'with no font-weight or font-style' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'provider' => 'local',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- ),
- 'with non-string font-weight' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'font-weight' => 400,
- ),
- ),
- 'with non-string font-style' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'font-style' => 0,
- ),
- ),
- 'with empty string font-weight' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'font-weight' => '',
- ),
- ),
- 'with empty string font-style' => array(
- 'font_family' => 'merriweather',
- 'variation' => array(
- 'font-style' => '',
- ),
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsUtils/getFontFamilyFromVariation.php b/phpunit/tests/fonts-api/wpFontsUtils/getFontFamilyFromVariation.php
deleted file mode 100644
index 2b3e3689c4317..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsUtils/getFontFamilyFromVariation.php
+++ /dev/null
@@ -1,134 +0,0 @@
-assertSame( $expected, WP_Fonts_Utils::get_font_family_from_variation( $variation ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_valid_variation() {
- return array(
- 'keyed by font-family' => array(
- 'variation' => array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'expected' => 'Source Serif Pro',
- ),
- 'keyed by fontFamily and as a handle' => array(
- 'variation' => array(
- 'fontFamily' => 'source-sans-pro',
- 'font-weight' => '200 900',
- 'src' => 'https://example.com/assets/fonts/source-sans-pro/source-sans-pro.ttf.woff2',
- 'provider' => 'local',
- ),
- 'expected' => 'source-sans-pro',
- ),
- 'with font family name and full variant' => array(
- 'variation' => array(
- 'provider' => 'local',
- 'font-family' => 'Merriweather',
- 'font-style' => 'normal',
- 'font-weight' => '400 600',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/merriweather.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'expected' => 'Merriweather',
- ),
- );
- }
-
- /**
- * @dataProvider data_with_invalid_input
- *
- * @param array $invalid_variation Variation to test.
- * @param string $expected_message Expected notice message.
- */
- public function test_with_invalid_input( array $invalid_variation, $expected_message ) {
- $this->expectNotice();
- $this->expectNoticeMessage( $expected_message );
-
- $this->assertNull( WP_Fonts_Utils::get_font_family_from_variation( $invalid_variation ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_with_invalid_input() {
- return array(
- 'keyed with underscore' => array(
- 'variation' => array(
- 'provider' => 'local',
- 'font_family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'expected_message' => 'Font family not found.',
- ),
- 'keyed with space' => array(
- 'variation' => array(
- 'font family' => 'Source Sans Pro',
- 'font-weight' => '200 900',
- 'src' => 'https://example.com/assets/fonts/source-sans-pro/source-sans-pro.ttf.woff2',
- 'provider' => 'local',
- ),
- 'expected_message' => 'Font family not found.',
- ),
- 'fontFamily => empty string' => array(
- 'variation' => array(
- 'fontFamily' => '',
- 'font-weight' => '200 900',
- 'src' => 'https://example.com/assets/fonts/source-sans-pro/source-sans-pro.ttf.woff2',
- 'provider' => 'local',
- ),
- 'expected_message' => 'Font family not defined in the variation.',
- ),
- 'font-family => empty string' => array(
- 'variation' => array(
- 'provider' => 'local',
- 'font-family' => '',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- 'expected_message' => 'Font family not defined in the variation.',
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpFontsUtils/isDefined.php b/phpunit/tests/fonts-api/wpFontsUtils/isDefined.php
deleted file mode 100644
index 3ae48ad52671a..0000000000000
--- a/phpunit/tests/fonts-api/wpFontsUtils/isDefined.php
+++ /dev/null
@@ -1,61 +0,0 @@
-assertTrue( WP_Fonts_Utils::is_defined( $input ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_when_defined() {
- return array(
- 'name: non empty string' => array( 'Some Font Family' ),
- 'handle: non empty string' => array( 'some-font-family' ),
- );
- }
-
- /**
- * @dataProvider data_when_not_defined
- *
- * @param mixed $invalid_input Input to test.
- */
- public function test_should_return_false_when_not_defined( $invalid_input ) {
- $this->assertFalse( WP_Fonts_Utils::is_defined( $invalid_input ) );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_when_not_defined() {
- return array(
- 'empty string' => array( '' ),
- 'string 0' => array( '0' ),
- 'integer' => array( 10 ),
- 'name wrapped in an array' => array( array( 'Some Font Family' ) ),
- 'handle wrapped in an array' => array( array( 'some-font-family' ) ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpPrintFonts.php b/phpunit/tests/fonts-api/wpPrintFonts.php
deleted file mode 100644
index 40b416aa56421..0000000000000
--- a/phpunit/tests/fonts-api/wpPrintFonts.php
+++ /dev/null
@@ -1,230 +0,0 @@
-assertSame( array(), wp_print_fonts() );
- }
-
- /**
- * Unit test which mocks WP_Fonts methods.
- *
- * @dataProvider data_mocked_handles
- *
- * @param string|string[] $handles Handles to test.
- */
- public function test_should_return_mocked_handles( $handles ) {
- $mock = $this->set_up_mock( array( 'get_registered_font_families', 'do_items' ) );
- $mock->expects( $this->once() )
- ->method( 'get_registered_font_families' )
- ->will( $this->returnValue( $handles ) );
-
- $mock->expects( $this->once() )
- ->method( 'do_items' )
- ->with(
- $this->identicalTo( $handles )
- )
- ->will( $this->returnValue( $handles ) );
-
- wp_print_fonts( $handles );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_mocked_handles() {
- return array(
- 'font family' => array(
- array( 'my-custom-font' ),
- ),
- 'multiple font families' => array(
- array(
- 'font1',
- 'font2',
- ),
- ),
- );
- }
-
- /**
- * Integration test that registers providers and fonts and then enqueues before
- * testing the printing functionality.
- *
- * @dataProvider data_print_enqueued
- *
- * @param array $setup Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_enqueued( $setup, $expected_done, $expected_output ) {
- $wp_fonts = wp_fonts();
-
- $this->setup_integrated_deps( $setup, $wp_fonts );
-
- $this->expectOutputString( $expected_output );
- $actual_done = wp_print_fonts();
- $this->assertSameSets( $expected_done, $actual_done, 'Printed handles should match' );
- }
-
- /**
- * Integration test to validate printing given handles. Rather than mocking internal functionality,
- * it registers providers and fonts but does not enqueue.
- *
- * @dataProvider data_print_enqueued
- *
- * @param array $setup Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_handles_when_not_enqueued( $setup, $expected_done, $expected_output ) {
- $wp_fonts = wp_fonts();
-
- $this->setup_integrated_deps( $setup, $wp_fonts, false );
- // Do not enqueue. Instead, pass the handles to wp_print_fonts().
- $handles = $setup['enqueued'];
- $this->assertEmpty( $wp_fonts->queue, 'No fonts should be enqueued' );
-
- $this->expectOutputString( $expected_output );
- $actual_done = wp_print_fonts( $handles );
- $this->assertSameSets( $expected_done, $actual_done, 'Printed handles should match' );
- }
-
- /**
- * @dataProvider data_should_print_all_registered_fonts_for_iframed_editor
- *
- * @param string $fonts Fonts to register.
- * @param array $expected Expected results.
- */
- public function test_should_print_all_registered_fonts_for_iframed_editor( $fonts, $expected ) {
- wp_register_fonts( $fonts );
-
- $this->expectOutputString( $expected['output'] );
- $actual_done = wp_print_fonts( true );
- $this->assertSameSets( $expected['done'], $actual_done, 'All registered font-family handles should be returned' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_should_print_all_registered_fonts_for_iframed_editor() {
- $local_fonts = $this->get_registered_local_fonts();
- $font_faces = $this->get_registered_fonts_css();
-
- return array(
- 'Merriweather with 1 variation' => array(
- 'fonts' => array( 'merriweather' => $local_fonts['merriweather'] ),
- 'expected' => array(
- 'done' => array( 'merriweather', 'merriweather-200-900-normal' ),
- 'output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal']
- ),
- ),
- ),
- 'Source Serif Pro with 2 variations' => array(
- 'fonts' => array( 'Source Serif Pro' => $local_fonts['Source Serif Pro'] ),
- 'expected' => array(
- 'done' => array( 'source-serif-pro', 'Source Serif Pro-300-normal', 'Source Serif Pro-900-italic' ),
- 'output' => sprintf(
- "\n",
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
- ),
- 'all fonts' => array(
- 'fonts' => $local_fonts,
- 'expected' => array(
- 'done' => array(
- 'merriweather',
- 'merriweather-200-900-normal',
- 'source-serif-pro',
- 'Source Serif Pro-300-normal',
- 'Source Serif Pro-900-italic',
- ),
- 'output' => sprintf(
- "\n",
- $font_faces['merriweather-200-900-normal'],
- $font_faces['Source Serif Pro-300-normal'],
- $font_faces['Source Serif Pro-900-italic']
- ),
- ),
- ),
- );
- }
-
- /**
- * Integration test for printing user-selected global fonts.
- * This test registers providers and fonts and then enqueues before testing the printing functionality.
- *
- * @dataProvider data_print_user_selected_fonts
- *
- * @param array $global_styles Test set up information for provider, fonts, and enqueued.
- * @param array $expected_done Expected array of printed handles.
- * @param string $expected_output Expected printed output.
- */
- public function test_should_print_user_selected_fonts( $global_styles, $expected_done, $expected_output ) {
- $wp_fonts = wp_fonts();
-
- $setup = array(
- 'provider' => array( 'mock' => $this->get_provider_definitions( 'mock' ) ),
- 'registered' => $this->get_registered_mock_fonts(),
- 'global_styles' => $global_styles,
- );
- $this->setup_integrated_deps( $setup, $wp_fonts, false );
-
- $this->expectOutputString( $expected_output );
- $actual_printed_fonts = wp_print_fonts();
- $this->assertSameSets( $expected_done, $actual_printed_fonts, 'Should print font-faces for given user-selected fonts' );
- }
-
-
- /**
- * Sets up the dependencies for integration test.
- *
- * @param array $setup Dependencies to set up.
- * @param WP_Fonts $wp_fonts Instance of WP_Fonts.
- * @param bool $enqueue Whether to enqueue. Default true.
- */
- private function setup_integrated_deps( array $setup, $wp_fonts, $enqueue = true ) {
- foreach ( $setup['provider'] as $provider ) {
- $wp_fonts->register_provider( $provider['id'], $provider['class'] );
- }
- foreach ( $setup['registered'] as $handle => $variations ) {
- $this->setup_register( $handle, $variations, $wp_fonts );
- }
-
- if ( $enqueue ) {
- $wp_fonts->enqueue( $setup['enqueued'] );
- }
-
- if ( ! empty( $setup['global_styles'] ) ) {
- $this->set_up_global_styles( $setup['global_styles'] );
- }
- }
-}
diff --git a/phpunit/tests/fonts-api/wpRegisterFontProvider.php b/phpunit/tests/fonts-api/wpRegisterFontProvider.php
deleted file mode 100644
index 907355bdc91c8..0000000000000
--- a/phpunit/tests/fonts-api/wpRegisterFontProvider.php
+++ /dev/null
@@ -1,95 +0,0 @@
-set_up_mock( 'register_provider' );
- $mock->expects( $this->once() )
- ->method( 'register_provider' )
- ->with(
- $this->identicalTo( $provider_id ),
- $this->identicalTo( $class_name )
- )
- ->will( $this->returnValue( true ) );
-
- $this->assertTrue( wp_register_font_provider( $provider_id, $class_name ), 'wp_register_font_provider() should return true' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_register_providers() {
- return array(
- 'mock' => array(
- 'provider_id' => 'mock',
- 'class' => Mock_Provider::class,
- ),
- 'local' => array(
- 'provider_id' => 'local',
- 'class' => WP_Fonts_Provider_Local::class,
- ),
- );
- }
-
- /**
- * @dataProvider data_invalid_providers
- *
- * @param string $provider_id Provider ID.
- * @param string $class_name Provider class name.
- */
- public function test_should_not_register( $provider_id, $class_name ) {
- $mock = $this->set_up_mock( 'register_provider' );
- $mock->expects( $this->once() )
- ->method( 'register_provider' )
- ->with(
- $this->identicalTo( $provider_id ),
- $this->identicalTo( $class_name )
- )
- ->will( $this->returnValue( false ) );
-
- $this->assertFalse( wp_register_font_provider( $provider_id, $class_name ), 'wp_register_font_provider() should return false' );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_invalid_providers() {
- return array(
- 'provider_id is empty' => array(
- 'provider_id' => '',
- 'class' => Mock_Provider::class,
- ),
- 'class is empty' => array(
- 'provider_id' => 'local',
- 'class' => '',
- ),
- 'class does not exist' => array(
- 'provider_id' => 'doesnotexist',
- 'class' => 'Provider_Does_Not_Exist',
- ),
- );
- }
-}
diff --git a/phpunit/tests/fonts-api/wpRegisterFonts.php b/phpunit/tests/fonts-api/wpRegisterFonts.php
deleted file mode 100644
index c57c1406a6cac..0000000000000
--- a/phpunit/tests/fonts-api/wpRegisterFonts.php
+++ /dev/null
@@ -1,104 +0,0 @@
-assertSame( $expected['wp_register_fonts'], $actual, 'Font family handle(s) should be returned' );
- $this->assertSame( $expected['get_registered'], $this->get_registered_handles(), 'Web fonts should match registered queue' );
- }
-
- /**
- * @dataProvider data_fonts
- *
- * @param array $fonts Array of fonts to test.
- */
- public function test_should_not_enqueue_on_registration( array $fonts ) {
- wp_register_fonts( $fonts );
- $this->assertEmpty( $this->get_enqueued_handles() );
- }
-
- /**
- * Data provider.
- *
- * @return array
- */
- public function data_fonts() {
- return array(
- 'font family keyed with slug' => array(
- 'fonts' => array(
- 'source-serif-pro' => array(
- array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- ),
- ),
- 'expected' => array(
- 'wp_register_fonts' => array( 'source-serif-pro' ),
- 'get_registered' => array(
- 'source-serif-pro',
- 'source-serif-pro-200-900-normal',
- ),
- ),
- ),
- 'font family keyed with name' => array(
- 'fonts' => array(
- 'Source Serif Pro' => array(
- array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'normal',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- array(
- 'provider' => 'local',
- 'font-family' => 'Source Serif Pro',
- 'font-style' => 'italic',
- 'font-weight' => '200 900',
- 'font-stretch' => 'normal',
- 'src' => 'https://example.com/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2',
- 'font-display' => 'fallback',
- ),
- ),
- ),
- 'expected' => array(
- 'wp_register_fonts' => array( 'source-serif-pro' ),
- 'get_registered' => array(
- 'source-serif-pro',
- 'source-serif-pro-200-900-normal',
- 'source-serif-pro-200-900-italic',
- ),
- ),
- ),
- );
- }
-}
diff --git a/test/e2e/specs/editor/various/list-view.spec.js b/test/e2e/specs/editor/various/list-view.spec.js
index 674801cf94aba..00f21b4e51c5e 100644
--- a/test/e2e/specs/editor/various/list-view.spec.js
+++ b/test/e2e/specs/editor/various/list-view.spec.js
@@ -53,11 +53,40 @@ test.describe( 'List View', () => {
name: 'Paragraph',
exact: true,
} );
+ const imageBlockItem = listView.getByRole( 'gridcell', {
+ name: 'Image',
+ exact: true,
+ } );
const headingBlockItem = listView.getByRole( 'gridcell', {
name: 'Heading',
exact: true,
} );
- await paragraphBlockItem.dragTo( headingBlockItem, { x: 0, y: 0 } );
+
+ await paragraphBlockItem.hover();
+ await page.mouse.down();
+
+ // To work around a drag and drop bug in Safari, the list view applies
+ // `pointer-events: none` to the list view while dragging, so that
+ // `onDragLeave` is not fired when dragging within the list view.
+ // Without the `force: true` option, the `hover` action will fail
+ // as playwright will complain that pointer-events are intercepted.
+ // https://bugs.webkit.org/show_bug.cgi?id=66547
+ // See: https://github.com/WordPress/gutenberg/pull/56625
+
+ // Hover over each block to mimic moving up the list view.
+ // Also, hover twice to ensure a dragover event is dispatched.
+ // See: https://playwright.dev/docs/input#dragging-manually
+ await imageBlockItem.hover( { force: true } );
+ await imageBlockItem.hover( { force: true } );
+ await headingBlockItem.hover( { force: true } );
+ await headingBlockItem.hover( { force: true } );
+
+ // Disable reason: Need to wait until the throttle timeout of 250ms has passed.
+ /* eslint-disable playwright/no-wait-for-timeout */
+ await editor.page.waitForTimeout( 300 );
+ /* eslint-enable playwright/no-wait-for-timeout */
+
+ await page.mouse.up();
// Ensure the block was dropped correctly.
await expect
diff --git a/test/e2e/specs/interactivity/with-scope.spec.ts b/test/e2e/specs/interactivity/with-scope.spec.ts
new file mode 100644
index 0000000000000..1cb73cc915aca
--- /dev/null
+++ b/test/e2e/specs/interactivity/with-scope.spec.ts
@@ -0,0 +1,27 @@
+/**
+ * Internal dependencies
+ */
+import { test, expect } from './fixtures';
+
+test.describe( 'withScope', () => {
+ test.beforeAll( async ( { interactivityUtils: utils } ) => {
+ await utils.activatePlugins();
+ await utils.addPostWithBlock( 'test/with-scope' );
+ } );
+ test.beforeEach( async ( { interactivityUtils: utils, page } ) => {
+ await page.goto( utils.getLink( 'test/with-scope' ) );
+ } );
+ test.afterAll( async ( { interactivityUtils: utils } ) => {
+ await utils.deactivatePlugins();
+ await utils.deleteAllPosts();
+ } );
+
+ test( 'directives using withScope should work with async and sync functions', async ( {
+ page,
+ } ) => {
+ const asyncCounter = page.getByTestId( 'asyncCounter' );
+ await expect( asyncCounter ).toHaveText( '1' );
+ const syncCounter = page.getByTestId( 'syncCounter' );
+ await expect( syncCounter ).toHaveText( '1' );
+ } );
+} );
diff --git a/test/e2e/specs/site-editor/new-templates-list.spec.js b/test/e2e/specs/site-editor/new-templates-list.spec.js
index 272a3ffff80bf..13484abcb13ad 100644
--- a/test/e2e/specs/site-editor/new-templates-list.spec.js
+++ b/test/e2e/specs/site-editor/new-templates-list.spec.js
@@ -18,11 +18,7 @@ test.describe( 'Templates', () => {
] );
} );
test( 'Sorting', async ( { admin, page } ) => {
- await admin.visitSiteEditor( { path: '/wp_template' } );
- // Switch to table layout.
- await page.getByLabel( 'View options' ).click();
- await page.getByRole( 'menuitem', { name: 'Layout' } ).click();
- await page.getByRole( 'menuitemradio', { name: 'Table' } ).click();
+ await admin.visitSiteEditor( { path: '/wp_template/all' } );
// Descending by title.
await page
.getByRole( 'button', { name: 'Template', exact: true } )
@@ -52,13 +48,7 @@ test.describe( 'Templates', () => {
title: 'Date Archives',
content: 'hi',
} );
- await admin.visitSiteEditor( { path: '/wp_template' } );
-
- // Switch to table layout.
- await page.getByLabel( 'View options' ).click();
- await page.getByRole( 'menuitem', { name: 'Layout' } ).click();
- await page.getByRole( 'menuitemradio', { name: 'Table' } ).click();
-
+ await admin.visitSiteEditor( { path: '/wp_template/all' } );
// Global search.
await page.getByRole( 'searchbox', { name: 'Filter list' } ).click();
await page.keyboard.type( 'tag' );
@@ -94,13 +84,7 @@ test.describe( 'Templates', () => {
await expect( titles ).toHaveCount( 2 );
} );
test( 'Field visibility', async ( { admin, page } ) => {
- await admin.visitSiteEditor( { path: '/wp_template' } );
-
- // Switch to table layout.
- await page.getByLabel( 'View options' ).click();
- await page.getByRole( 'menuitem', { name: 'Layout' } ).click();
- await page.getByRole( 'menuitemradio', { name: 'Table' } ).click();
-
+ await admin.visitSiteEditor( { path: '/wp_template/all' } );
await page.getByRole( 'button', { name: 'Description' } ).click();
await page.getByRole( 'menuitem', { name: 'Hide' } ).click();
await expect(