@@ -524,21 +524,117 @@ public function test_block_styles_for_viewing_with_split_styles() {
524524
525525 /**
526526 * @ticket 58394
527+ * @ticket 63887
527528 *
528529 * @covers ::wp_maybe_inline_styles
530+ * @covers ::wp_add_inline_style
531+ * @covers ::wp_print_styles
532+ * @covers WP_Styles::do_items
533+ * @covers WP_Styles::do_item
534+ * @covers WP_Styles::print_inline_style
535+ *
536+ * @dataProvider data_provider_test_wp_maybe_inline_styles
529537 */
530- public function test_wp_maybe_inline_styles () {
531- wp_register_style ( 'test-handle ' , '/ ' . WPINC . '/css/classic-themes.css ' );
532- wp_style_add_data ( 'test-handle ' , 'path ' , ABSPATH . WPINC . '/css/classic-themes.css ' );
533-
534- wp_enqueue_style ( 'test-handle ' );
538+ public function test_wp_maybe_inline_styles ( ?string $ additional_inline_style , ?int $ styles_inline_size_limit ) {
539+ $ rel_path = 'css/classic-themes.css ' ;
540+ $ src_url = includes_url ( $ rel_path );
541+ $ src_path = ABSPATH . WPINC . '/ ' . $ rel_path ;
542+ $ css = file_get_contents ( $ src_path );
543+ $ handle = 'test-handle ' ;
544+
545+ if ( isset ( $ styles_inline_size_limit ) ) {
546+ add_filter (
547+ 'styles_inline_size_limit ' ,
548+ static function () use ( $ styles_inline_size_limit ): int {
549+ return $ styles_inline_size_limit ;
550+ }
551+ );
552+ }
553+ wp_register_style ( $ handle , $ src_url , array (), null );
554+ wp_style_add_data ( $ handle , 'path ' , $ src_path );
555+ if ( isset ( $ additional_inline_style ) ) {
556+ wp_add_inline_style ( $ handle , $ additional_inline_style );
557+ }
558+ wp_enqueue_style ( $ handle );
535559
536560 wp_maybe_inline_styles ();
537561
538- $ this ->assertFalse ( $ GLOBALS ['wp_styles ' ]->registered ['test-handle ' ]->src , 'Source of style should be reset to false ' );
562+ $ expected_after = array ();
563+ if ( ! isset ( $ styles_inline_size_limit ) || strlen ( $ css ) <= $ styles_inline_size_limit ) {
564+ $ expected_after [] = $ css ;
565+ $ this ->assertFalse ( wp_styles ()->registered [ $ handle ]->src , 'Source of style should be reset to false ' );
566+ $ this ->assertArrayHasKey ( 'inlined_src ' , wp_styles ()->registered [ $ handle ]->extra );
567+ $ this ->assertSame ( $ src_url , wp_styles ()->registered [ $ handle ]->extra ['inlined_src ' ] );
568+ } else {
569+ $ this ->assertArrayNotHasKey ( 'inlined_src ' , wp_styles ()->registered [ $ handle ]->extra );
570+ }
571+
572+ if ( isset ( $ additional_inline_style ) ) {
573+ $ expected_after [] = $ additional_inline_style ;
574+ }
539575
540- $ css = file_get_contents ( ABSPATH . WPINC . '/css/classic-themes.css ' );
541- $ this ->assertSameSets ( $ GLOBALS ['wp_styles ' ]->registered ['test-handle ' ]->extra ['after ' ], array ( $ css ), 'Source of style should set to after property ' );
576+ $ after = wp_styles ()->get_data ( $ handle , 'after ' );
577+ if ( false === $ after ) {
578+ $ after = array ();
579+ }
580+ $ this ->assertSameSets ( $ after , $ expected_after , 'Source of style should set to after property ' );
581+
582+ $ printed_styles = get_echo ( 'wp_print_styles ' , array ( $ handle ) );
583+ $ processor = new WP_HTML_Tag_Processor ( $ printed_styles );
584+
585+ if ( isset ( $ styles_inline_size_limit ) && strlen ( $ css ) > $ styles_inline_size_limit ) {
586+ $ this ->assertTrue ( $ processor ->next_tag () );
587+ $ this ->assertSame ( 'LINK ' , $ processor ->get_tag () );
588+ $ this ->assertSame ( 'stylesheet ' , $ processor ->get_attribute ( 'rel ' ) );
589+ $ this ->assertSame ( $ src_url , $ processor ->get_attribute ( 'href ' ) );
590+ }
591+
592+ if ( count ( $ expected_after ) > 0 ) {
593+ $ this ->assertTrue ( $ processor ->next_tag () );
594+ $ this ->assertSame ( 'STYLE ' , $ processor ->get_tag () );
595+ $ this ->assertSame ( $ handle . '-inline-css ' , $ processor ->get_attribute ( 'id ' ) );
596+ $ this ->assertSame ( 'text/css ' , $ processor ->get_attribute ( 'type ' ) );
597+
598+ $ expected_inline_styles = $ expected_after ;
599+ if ( isset ( $ additional_inline_style ) ) {
600+ $ source_url = $ handle . '-inline-css ' ;
601+ } else {
602+ $ source_url = $ src_url ;
603+ }
604+ $ expected_inline_styles [] = "/*# sourceURL= $ source_url */ " ;
605+
606+ $ expected_text = "\n" . implode ( "\n" , $ expected_inline_styles ) . "\n" ;
607+ $ this ->assertSame ( $ expected_text , $ processor ->get_modifiable_text () );
608+ }
609+
610+ $ this ->assertFalse ( $ processor ->next_tag () );
611+ }
612+
613+ /**
614+ * Data provider for test_wp_maybe_inline_styles.
615+ *
616+ * @see self::test_wp_maybe_inline_styles()
617+ * @return array<string, array{additional_inline_style: string|null, styles_inline_size_limit: int|null}>
618+ */
619+ public static function data_provider_test_wp_maybe_inline_styles (): array {
620+ return array (
621+ 'regular_limit_without_additional_inline_styles ' => array (
622+ 'additional_inline_style ' => null ,
623+ 'styles_inline_size_limit ' => null ,
624+ ),
625+ 'regular_limit_with_additional_inline_style ' => array (
626+ 'additional_inline_style ' => '/* additional inline style */ ' ,
627+ 'styles_inline_size_limit ' => null ,
628+ ),
629+ 'zero_limit_without_additional_inline_style ' => array (
630+ 'additional_inline_style ' => null ,
631+ 'styles_inline_size_limit ' => 0 ,
632+ ),
633+ 'zero_limit_with_additional_inline_style ' => array (
634+ 'additional_inline_style ' => '/* additional inline style */ ' ,
635+ 'styles_inline_size_limit ' => 0 ,
636+ ),
637+ );
542638 }
543639
544640 /**
0 commit comments