Changeset 57720
- Timestamp:
- 02/27/2024 12:04:55 PM (8 months ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/fonts.php
r57686 r57720 14 14 * 15 15 * @param array[][] $fonts { 16 * Optional. The font-families and their font variations. Default empty array.17 * 18 * @type string $font-family => array[] $variations{19 * Optional. An associatedarray of font variations for this font-family.20 * Each variationhas the following structure.21 * 22 * @type array $font_variation{16 * Optional. The font-families and their font faces. Default empty array. 17 * 18 * @type array { 19 * An indexed or associative (keyed by font-family) array of font variations for this font-family. 20 * Each font face has the following structure. 21 * 22 * @type array { 23 23 * @type string $font-family The font-family property. 24 24 * @type string|string[] $src The URL(s) to each resource containing the font data. -
trunk/src/wp-includes/fonts/class-wp-font-face-resolver.php
r56688 r57720 68 68 } 69 69 70 // Prepare the fonts array structure for this font-family. 71 if ( ! array_key_exists( $font_family_name, $fonts ) ) { 72 $fonts[ $font_family_name ] = array(); 73 } 74 75 $fonts[ $font_family_name ] = static::convert_font_face_properties( $definition['fontFace'], $font_family_name ); 70 $fonts[] = static::convert_font_face_properties( $definition['fontFace'], $font_family_name ); 76 71 } 77 72 } -
trunk/tests/phpunit/tests/fonts/font-face/wp-font-face-tests-dataset.php
r56500 r57720 93 93 ), 94 94 'multiple woff2 format fonts' => array( 95 'fonts' => array(95 'fonts' => array( 96 96 'DM Sans' => 97 97 array( … … 185 185 ), 186 186 ), 187 'expected' => <<<CSS187 'expected' => <<<CSS 188 188 @font-face{font-family:"DM Sans";font-style:normal;font-weight:400;font-display:fallback;src:url('https://example.org/assets/fonts/dm-sans/DMSans-Regular.woff2') format('woff2');font-stretch:normal;} 189 189 @font-face{font-family:"DM Sans";font-style:italic;font-weight:400;font-display:fallback;src:url('https://example.org/assets/fonts/dm-sans/DMSans-Regular-Italic.woff2') format('woff2');font-stretch:normal;} … … 196 196 CSS 197 197 , 198 'indexed array as input' => array( 199 'fonts' => array( 200 array( 201 array( 202 'font-family' => 'Piazzolla', 203 'src' => array( 'https://example.org/fonts/piazzolla400.ttf' ), 204 'font-style' => 'normal', 205 'font-weight' => '400', 206 'font-stretch' => 'normal', 207 ), 208 array( 209 'font-family' => 'Piazzolla', 210 'src' => array( 'https://example.org/fonts/piazzolla500.ttf' ), 211 'font-style' => 'normal', 212 'font-weight' => '400', 213 'font-stretch' => 'normal', 214 ), 215 ), 216 array( 217 array( 218 'font-family' => 'Lobster', 219 'src' => array( 'https://example.org/fonts/lobster400.ttf' ), 220 'font-style' => 'normal', 221 'font-weight' => '400', 222 'font-stretch' => 'normal', 223 ), 224 array( 225 'font-family' => 'Lobster', 226 'src' => array( 'https://example.org/fonts/lobster500.ttf' ), 227 'font-style' => 'normal', 228 'font-weight' => '500', 229 'font-stretch' => 'normal', 230 ), 231 ), 232 ), 233 'expected' => <<<CSS 234 @font-face{font-family:Piazzolla;font-style:normal;font-weight:400;font-display:fallback;src:url('https://example.org/fonts/piazzolla400.ttf') format('truetype');font-stretch:normal;} 235 @font-face{font-family:Piazzolla;font-style:normal;font-weight:400;font-display:fallback;src:url('https://example.org/fonts/piazzolla500.ttf') format('truetype');font-stretch:normal;} 236 @font-face{font-family:Lobster;font-style:normal;font-weight:400;font-display:fallback;src:url('https://example.org/fonts/lobster400.ttf') format('truetype');font-stretch:normal;} 237 @font-face{font-family:Lobster;font-style:normal;font-weight:500;font-display:fallback;src:url('https://example.org/fonts/lobster500.ttf') format('truetype');font-stretch:normal;} 238 CSS 239 , 240 ), 198 241 ), 199 242 ); … … 207 250 $data = array( 208 251 'fonts' => array( 209 'DM Sans' =>array(252 array( 210 253 array( 211 254 'src' => array( $uri . 'dm-sans/DMSans-Regular.woff2' ), … … 237 280 ), 238 281 ), 239 'Source Serif Pro' =>array(282 array( 240 283 array( 241 284 'src' => array( $uri . 'source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ), … … 272 315 return $data; 273 316 } 317 318 public static function get_custom_font_families( $key = '' ) { 319 static $data = null; 320 321 $custom_theme_json_fonts = array( 322 array( 323 'fontFamily' => 'Piazzolla, serif', 324 'name' => 'Piazzolla', 325 'slug' => 'piazzolla', 326 'fontFace' => array( 327 array( 328 'fontFamily' => 'Piazzolla', 329 'src' => array( 'https://example.org/fonts/piazzolla400.ttf' ), 330 'fontStyle' => 'normal', 331 'fontWeight' => '400', 332 ), 333 array( 334 'fontFamily' => 'Piazzolla', 335 'src' => array( 'https://example.org/fonts/piazzolla500.ttf' ), 336 'fontStyle' => 'normal', 337 'fontWeight' => '400', 338 ), 339 ), 340 ), 341 array( 342 'fontFamily' => 'Lobster, sans-serif', 343 'name' => 'Lobster', 344 'slug' => 'lobster', 345 'fontFace' => array( 346 array( 347 'fontFamily' => 'Lobster', 348 'src' => array( 'https://example.org/fonts/lobster400.ttf' ), 349 'fontStyle' => 'normal', 350 'fontWeight' => '400', 351 ), 352 array( 353 'fontFamily' => 'Lobster', 354 'src' => array( 'https://example.org/fonts/lobster500.ttf' ), 355 'fontStyle' => 'normal', 356 'fontWeight' => '500', 357 ), 358 ), 359 ), 360 ); 361 362 $expected_font_faces = array( 363 array( 364 array( 365 'src' => array( 'https://example.org/fonts/piazzolla400.ttf' ), 366 'font-family' => 'Piazzolla', 367 'font-style' => 'normal', 368 'font-weight' => '400', 369 ), 370 array( 371 'src' => array( 'https://example.org/fonts/piazzolla500.ttf' ), 372 'font-family' => 'Piazzolla', 373 'font-style' => 'normal', 374 'font-weight' => '400', 375 ), 376 ), 377 array( 378 array( 379 'src' => array( 'https://example.org/fonts/lobster400.ttf' ), 380 'font-family' => 'Lobster', 381 'font-style' => 'normal', 382 'font-weight' => '400', 383 ), 384 array( 385 'src' => array( 'https://example.org/fonts/lobster500.ttf' ), 386 'font-family' => 'Lobster', 387 'font-style' => 'normal', 388 'font-weight' => '500', 389 ), 390 ), 391 ); 392 393 if ( null === $data ) { 394 $data = array( 395 'input' => $custom_theme_json_fonts, 396 'expected' => $expected_font_faces, 397 ); 398 } 399 400 if ( isset( $data[ $key ] ) ) { 401 return $data[ $key ]; 402 } 403 404 return $data; 405 } 274 406 } -
trunk/tests/phpunit/tests/fonts/font-face/wpFontFaceResolver/getFontsFromThemeJson.php
r56688 r57720 39 39 40 40 /** 41 * @ticket 60605 42 */ 43 public function test_should_return_all_fonts_from_all_theme_origins() { 44 switch_theme( static::FONTS_THEME ); 45 46 $add_custom_fonts = static function ( $theme_json_data ) { 47 $data = $theme_json_data->get_data(); 48 // Add font families to the custom origin of theme json. 49 $data['settings']['typography']['fontFamilies']['custom'] = self::get_custom_font_families( 'input' ); 50 return new WP_Theme_JSON_Data( $data ); 51 }; 52 53 add_filter( 'wp_theme_json_data_theme', $add_custom_fonts ); 54 $actual = WP_Font_Face_Resolver::get_fonts_from_theme_json(); 55 remove_filter( 'wp_theme_json_data_theme', $add_custom_fonts ); 56 57 $expected = array_merge( 58 $this->get_expected_fonts_for_fonts_block_theme( 'fonts' ), 59 $this->get_custom_font_families( 'expected' ) 60 ); 61 62 $this->assertSame( $expected, $actual, 'Both the fonts from the theme and the custom origin should be returned.' ); 63 } 64 65 /** 41 66 * @dataProvider data_should_replace_src_file_placeholder 42 67 * 43 68 * @param string $font_name Font's name. 44 * @param string $font_index Font's index in the $fonts array. 69 * @param string $font_weight Font's weight. 70 * @param string $font_style Font's style. 45 71 * @param string $expected Expected src. 46 72 */ 47 public function test_should_replace_src_file_placeholder( $font_name, $font_ index, $expected ) {73 public function test_should_replace_src_file_placeholder( $font_name, $font_weight, $font_style, $expected ) { 48 74 switch_theme( static::FONTS_THEME ); 49 75 50 76 $fonts = WP_Font_Face_Resolver::get_fonts_from_theme_json(); 51 52 $actual = $fonts[ $font_name ][ $font_index ]['src'][0]; 77 $fonts = array_merge( array(), ...array_map( 'array_values', $fonts ) ); 78 79 $font = array_filter( 80 $fonts, 81 static function ( $font ) use ( $font_name, $font_weight, $font_style ) { 82 return $font['font-family'] === $font_name 83 && $font['font-weight'] === $font_weight 84 && $font['font-style'] === $font_style; 85 } 86 ); 87 88 $font = reset( $font ); 89 53 90 $expected = get_stylesheet_directory_uri() . $expected; 91 $actual = $font['src'][0]; 54 92 55 93 $this->assertStringNotContainsString( 'file:./', $actual, 'Font src should not contain the "file:./" placeholder' ); … … 66 104 // Theme's theme.json. 67 105 'DM Sans: 400 normal' => array( 68 'font_name' => 'DM Sans', 69 'font_index' => 0, 70 'expected' => '/assets/fonts/dm-sans/DMSans-Regular.woff2', 106 'font_name' => 'DM Sans', 107 'font_weight' => '400', 108 'font_style' => 'normal', 109 'expected' => '/assets/fonts/dm-sans/DMSans-Regular.woff2', 71 110 ), 72 111 'DM Sans: 400 italic' => array( 73 'font_name' => 'DM Sans', 74 'font_index' => 1, 75 'expected' => '/assets/fonts/dm-sans/DMSans-Regular-Italic.woff2', 112 'font_name' => 'DM Sans', 113 'font_weight' => '400', 114 'font_style' => 'italic', 115 'expected' => '/assets/fonts/dm-sans/DMSans-Regular-Italic.woff2', 76 116 ), 77 117 'DM Sans: 700 normal' => array( 78 'font_name' => 'DM Sans', 79 'font_index' => 2, 80 'expected' => '/assets/fonts/dm-sans/DMSans-Bold.woff2', 118 'font_name' => 'DM Sans', 119 'font_weight' => '700', 120 'font_style' => 'normal', 121 'expected' => '/assets/fonts/dm-sans/DMSans-Bold.woff2', 81 122 ), 82 123 'DM Sans: 700 italic' => array( 83 'font_name' => 'DM Sans', 84 'font_index' => 3, 85 'expected' => '/assets/fonts/dm-sans/DMSans-Bold-Italic.woff2', 124 'font_name' => 'DM Sans', 125 'font_weight' => '700', 126 'font_style' => 'italic', 127 'expected' => '/assets/fonts/dm-sans/DMSans-Bold-Italic.woff2', 86 128 ), 87 129 'Source Serif Pro: 200-900 normal' => array( 88 'font_name' => 'Source Serif Pro', 89 'font_index' => 0, 90 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2', 130 'font_name' => 'Source Serif Pro', 131 'font_weight' => '200 900', 132 'font_style' => 'normal', 133 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2', 91 134 ), 92 135 'Source Serif Pro: 200-900 italic' => array( 93 'font_name' => 'Source Serif Pro', 94 'font_index' => 1, 95 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2', 136 'font_name' => 'Source Serif Pro', 137 'font_weight' => '200 900', 138 'font_style' => 'italic', 139 'expected' => '/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2', 96 140 ), 97 141 ); … … 119 163 remove_filter( 'wp_theme_json_data_theme', $replace_fonts ); 120 164 121 $this->assertArrayHasKey( $expected_name, $fonts ); 165 // flatten the array to make it easier to test. 166 $fonts = array_merge( array(), ...array_map( 'array_values', $fonts ) ); 167 168 $fonts_found = array_filter( 169 $fonts, 170 function ( $font ) use ( $expected_name ) { 171 return $font['font-family'] === $expected_name; 172 } 173 ); 174 175 $this->assertNotEmpty( $fonts_found, 'Expected font-family name not found in the array' ); 122 176 } 123 177
Note: See TracChangeset
for help on using the changeset viewer.