WordPress.org

Make WordPress Core

Ticket #49037: 49037.5.patch

File 49037.5.patch, 27.2 KB (added by apieschel, 7 months ago)

added editor-styles, dark-editor-style, align-wide, and wp-block-styles

  • src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php

     
    109109                        $formats                           = get_theme_support( 'post-formats' );
    110110                        $formats                           = is_array( $formats ) ? array_values( $formats[0] ) : array();
    111111                        $formats                           = array_merge( array( 'standard' ), $formats );
    112                         $data['theme_supports']['formats'] = $formats;
    113112
    114                         $data['theme_supports']['post-thumbnails']   = false;
    115                         $data['theme_supports']['responsive-embeds'] = (bool) get_theme_support( 'responsive-embeds' );
    116                         $post_thumbnails                             = get_theme_support( 'post-thumbnails' );
     113                        $data['theme_supports']['align-wide']                                                   = (bool) get_theme_support( 'align-wide' );
     114                        $data['theme_supports']['automatic-feed-links']                         = (bool) get_theme_support( 'automatic-feed-links' );
     115                        $data['theme_supports']['custom-header']                                = false;
     116                        $data['theme_supports']['custom-logo']                                  = false;
     117                        $data['theme_supports']['customize-selective-refresh-widgets']  = (bool) get_theme_support( 'customize-selective-refresh-widgets' );
     118                        $data['theme_supports']['dark-editor-style']                                    = (bool) get_theme_support( 'dark-editor-style' );
     119                        $data['theme_supports']['disable-custom-colors']                        = (bool) get_theme_support( 'disable-custom-colors' );
     120                        $data['theme_supports']['disable-custom-font-sizes']                    = (bool) get_theme_support( 'disable-custom-font-sizes' );
     121                        $data['theme_supports']['editor-color-palette']                         = false;
     122                        $data['theme_supports']['editor-font-sizes']                            = false;
     123                        $data['theme_supports']['editor-styles']                                                = (bool) get_theme_support( 'editor-styles' );
     124                        $data['theme_supports']['formats']                                      = $formats;
     125                        $data['theme_supports']['html5']                                                = false;
     126                        $data['theme_supports']['post-thumbnails']                              = false;
     127                        $data['theme_supports']['responsive-embeds']                            = (bool) get_theme_support( 'responsive-embeds' );
     128                        $data['theme_supports']['title-tag']                                                    = (bool) get_theme_support( 'title-tag' );
     129                        $data['theme_supports']['wp-block-styles']                                              = (bool) get_theme_support( 'wp-block-styles' );
     130                       
     131                        $custom_header                  = get_theme_support( 'custom-header' );
     132                        $custom_logo                    = get_theme_support( 'custom-logo' );
     133                        $html5                                  = get_theme_support( 'html5' );
     134                        $post_thumbnails        = get_theme_support( 'post-thumbnails' );
     135                        $editor_color_palette   = get_theme_support( 'editor-color-palette' );
     136                        $editor_font_sizes      = get_theme_support( 'editor-font-sizes' );
    117137
     138                        if( $custom_header ) {
     139                                $data['theme_supports']['custom-header'] = $custom_header[0];
     140                        }
     141
     142                        if( $custom_logo ) {
     143                                $data['theme_supports']['custom-logo'] = $custom_logo[0];
     144                        }
     145
     146                        if( $html5 ) {
     147                                $data['theme_supports']['html5'] = $html5[0];
     148                        }
     149
    118150                        if ( $post_thumbnails ) {
    119151                                // $post_thumbnails can contain a nested array of post types.
    120152                                // e.g. array( array( 'post', 'page' ) ).
    121153                                $data['theme_supports']['post-thumbnails'] = is_array( $post_thumbnails ) ? $post_thumbnails[0] : true;
    122154                        }
     155
     156                        if ( is_array( $editor_color_palette ) ) {
     157                            $data['theme_supports']['editor-color-palette'] = $editor_color_palette[0];
     158                        }
     159                               
     160                        if ( is_array( $editor_font_sizes ) ) {
     161                                $data['theme_supports']['editor-font-sizes'] = $editor_font_sizes[0];
     162                        }
    123163                }
    124164
    125165                $data = $this->add_additional_fields_to_object( $data, $request );
     
    161201                                        'type'        => 'array',
    162202                                        'readonly'    => true,
    163203                                        'properties'  => array(
     204                                                'align-wide'     => array(
     205                                                        'description' => __( 'Whether theme opts in to wide alignment CSS class.' ),
     206                                                        'type'        => 'bool',
     207                                                        'readonly'    => true,
     208                                                ),
     209                                                'automatic-feed-links'     => array(
     210                                                        'description' => __( 'Whether posts and comments RSS feed links are added to head.' ),
     211                                                        'type'        => 'bool',
     212                                                        'readonly'    => true,
     213                                                ),
     214                                                'custom-header'     => array(
     215                                                        'description' => __( 'Custom header if defined by the theme.' ),
     216                                                        'type'        => array( 'array', 'bool' ),
     217                                                        'items'       => array(
     218                                                                'type'       => 'object',
     219                                                                'properties' => array(
     220                                                                        'default-image'          => array(
     221                                                                                'type' => 'string',
     222                                                                        ),
     223                                                                        'random-default'         => array(
     224                                                                                'type' => 'bool',
     225                                                                        ),
     226                                                                        'width'                  => array(
     227                                                                                'type' => 'number',
     228                                                                        ),
     229                                                                        'height'                 => array(
     230                                                                                'type' => 'number',
     231                                                                        ),
     232                                                                        'flex-height'            => array(
     233                                                                                'type' => 'bool',
     234                                                                        ),
     235                                                                        'flex-width'             => array(
     236                                                                                'type' => 'bool',
     237                                                                        ),
     238                                                                        'default-text-color'     => array(
     239                                                                                'type' => 'string',
     240                                                                        ),
     241                                                                        'header-text'            => array(
     242                                                                                'type' => 'bool',
     243                                                                        ),
     244                                                                        'uploads'                => array(
     245                                                                                'type' => 'bool',
     246                                                                        ),
     247                                                                        'wp-head-callback'       => array(
     248                                                                                'type' => 'string',
     249                                                                        ),
     250                                                                        'admin-head-callback'    => array(
     251                                                                                'type' => 'string',
     252                                                                        ),
     253                                                                        'admin-preview-callback' => array(
     254                                                                                'type' => 'string',
     255                                                                        ),
     256                                                                        'video'                  => array(
     257                                                                                'type' => 'bool',
     258                                                                        ),
     259                                                                        'video-active-callback'  => array(
     260                                                                                'type' => 'string',
     261                                                                        ),
     262                                                                ),
     263                                                        ),
     264                                                        'readonly'    => true,
     265                                                ),
     266                                                'custom-logo'     => array(
     267                                                        'description' => __( 'Custom logo if defined by the theme.' ),
     268                                                        'type'        => array( 'array', 'bool' ),
     269                                                        'items'       => array(
     270                                                                'type'       => 'object',
     271                                                                'properties' => array(
     272                                                                        'width'  => array(
     273                                                                                'type' => 'number',
     274                                                                        ),
     275                                                                        'height'  => array(
     276                                                                                'type' => 'number',
     277                                                                        ),
     278                                                                        'flex-width' => array(
     279                                                                                'type' => 'bool',
     280                                                                        ),
     281                                                                        'flex-height' => array(
     282                                                                                'type' => 'bool',
     283                                                                        ),
     284                                                                        'header-text' => array(
     285                                                                                'type' => 'array',
     286                                                                        ),
     287                                                                ),
     288                                                        ),
     289                                                        'readonly'    => true,
     290                                                ),
     291                                                'customize-selective-refresh-widgets'     => array(
     292                                                        'description' => __( 'Whether the theme enables Selective Refresh for Widgets being managed with the Customizer.' ),
     293                                                        'type'        => 'bool',
     294                                                        'readonly'    => true,
     295                                                ),
     296                                                'dark-editor-style'     => array(
     297                                                        'description' => __( 'Whether theme opts in to the dark editor style UI.' ),
     298                                                        'type'        => 'bool',
     299                                                        'readonly'    => true,
     300                                                ),
     301                                                'disable-custom-colors'     => array(
     302                                                                'description' => __( 'Whether the theme disables custom colors.' ),
     303                                                                'type'        => 'bool',
     304                                                                'readonly'    => true,
     305                                                ),
     306                                                'disable-custom-font-sizes' => array(
     307                                                                'description' => __( 'Whether the theme disables custom font sizes.' ),
     308                                                                'type'        => 'bool',
     309                                                                'readonly'    => true,
     310                                                ),
     311                                                'editor-color-palette'      => array(
     312                                                                'description' => __( 'Custom color palette if defined by the theme.' ),
     313                                                                'type'        => array( 'array', 'bool' ),
     314                                                                'items'       => array(
     315                                                                                'type'       => 'object',
     316                                                                                'properties' => array(
     317                                                                                        'name'  => array(
     318                                                                                                'type'     => 'string',
     319                                                                                        ),
     320                                                                                        'slug'  => array(
     321                                                                                                'type'     => 'string',
     322                                                                                        ),
     323                                                                                        'color' => array(
     324                                                                                                'type'     => 'string',
     325                                                                                        ),
     326                                                                                ),
     327                                                                        ),
     328                                                                'readonly'    => true,
     329                                                ),
     330                                                'editor-font-sizes'         => array(
     331                                                                'description' => __( 'Custom font sizes if defined by the theme.' ),
     332                                                                'type'        => array( 'array', 'bool' ),
     333                                                                'items'       => array(
     334                                                                                'type'       => 'object',
     335                                                                                'properties' => array(
     336                                                                                        'name' => array(
     337                                                                                            'type'     => 'string',
     338                                                                                        ),
     339                                                                                        'size' => array(
     340                                                                                            'type'     => 'number',
     341                                                                                        ),
     342                                                                                        'slug' => array(
     343                                                                                            'type'     => 'string',
     344                                                                                        ),
     345                                                                                ),
     346                                                                ),
     347                                                                'readonly'    => true,
     348                                                ),
     349                                                'editor-styles'     => array(
     350                                                        'description' => __( 'Whether theme opts in to the editor styles CSS wrapper.' ),
     351                                                        'type'        => 'bool',
     352                                                        'readonly'    => true,
     353                                                ),
    164354                                                'formats'           => array(
    165355                                                        'description' => __( 'Post formats supported.' ),
    166356                                                        'type'        => 'array',
    167357                                                        'readonly'    => true,
    168358                                                ),
     359                                                'html5'     => array(
     360                                                        'description' => __( 'Allows use of html5 markup for search forms, comment forms, comment lists, gallery, and caption.' ),
     361                                                        'type'        => array( 'array', 'bool' ),
     362                                                        'items'       => array(
     363                                                                'type'       => 'string',
     364                                                                'enum' => array(
     365                                                                        'search-form',
     366                                                                        'comment-form',
     367                                                                        'comment-list',
     368                                                                        'gallery',
     369                                                                        'caption',
     370                                                                        'script',
     371                                                                        'style',
     372                                                                ),
     373                                                        ),
     374                                                        'readonly'    => true,
     375                                                ),
    169376                                                'post-thumbnails'   => array(
    170377                                                        'description' => __( 'Whether the theme supports post thumbnails.' ),
    171378                                                        'type'        => array( 'array', 'bool' ),
     
    176383                                                        'type'        => 'bool',
    177384                                                        'readonly'    => true,
    178385                                                ),
     386                                                'title-tag' => array(
     387                                                        'description' => __( 'Whether the theme can manage the document title tag.' ),
     388                                                        'type'        => 'bool',
     389                                                        'readonly'    => true,
     390                                                ),
     391                                                'wp-block-styles'     => array(
     392                                                        'description' => __( 'Whether theme opts in to default WordPress block styles for viewing.' ),
     393                                                        'type'        => 'bool',
     394                                                        'readonly'    => true,
     395                                                ),
    179396                                        ),
    180397                                ),
    181398                        ),
  • tests/phpunit/tests/rest-api/rest-themes-controller.php

     
    188188                $properties = $data['schema']['properties'];
    189189                $this->assertEquals( 1, count( $properties ) );
    190190                $this->assertArrayHasKey( 'theme_supports', $properties );
    191 
    192                 $this->assertEquals( 3, count( $properties['theme_supports']['properties'] ) );
     191                $this->assertEquals( 17, count( $properties['theme_supports']['properties'] ) );
     192                $this->assertArrayHasKey( 'align-wide', $properties['theme_supports']['properties'] );
     193                $this->assertArrayHasKey( 'automatic-feed-links', $properties['theme_supports']['properties'] );
     194                $this->assertArrayHasKey( 'custom-header', $properties['theme_supports']['properties'] );
     195                $this->assertArrayHasKey( 'custom-logo', $properties['theme_supports']['properties'] );
     196                $this->assertArrayHasKey( 'customize-selective-refresh-widgets', $properties['theme_supports']['properties'] );
     197                $this->assertArrayHasKey( 'title-tag', $properties['theme_supports']['properties'] );
     198            $this->assertArrayHasKey( 'dark-editor-style', $properties['theme_supports']['properties'] );
     199            $this->assertArrayHasKey( 'disable-custom-font-sizes', $properties['theme_supports']['properties'] );
     200            $this->assertArrayHasKey( 'editor-color-palette', $properties['theme_supports']['properties'] );
     201                $this->assertArrayHasKey( 'editor-font-sizes', $properties['theme_supports']['properties'] );
     202                $this->assertArrayHasKey( 'editor-styles', $properties['theme_supports']['properties'] );
    193203                $this->assertArrayHasKey( 'formats', $properties['theme_supports']['properties'] );
     204                $this->assertArrayHasKey( 'html5', $properties['theme_supports']['properties'] );
    194205                $this->assertArrayHasKey( 'post-thumbnails', $properties['theme_supports']['properties'] );
    195206                $this->assertArrayHasKey( 'responsive-embeds', $properties['theme_supports']['properties'] );
     207                $this->assertArrayHasKey( 'title-tag', $properties['theme_supports']['properties'] );
     208                $this->assertArrayHasKey( 'wp-block-styles', $properties['theme_supports']['properties'] );
    196209        }
    197210
    198211        /**
     212         * Test when a theme does not disable custom colors.
     213         *
     214         * @ticket 48798
     215         */
     216        public function test_theme_supports_disable_custom_colors_false() {
     217                remove_theme_support( 'disable-custom-colors' );
     218                $response = self::perform_active_theme_request();
     219                $result = $response->get_data();
     220                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     221                $this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-colors'] ) );
     222                $this->assertFalse( $result[0]['theme_supports']['disable-custom-colors'] );
     223        }
     224
     225        /**
     226         * Test when a theme disables custom colors.
     227         *
     228         * @ticket 48798
     229         */
     230        public function test_theme_supports_disable_custom_colors_true() {
     231                remove_theme_support( 'disable-custom-colors' );
     232                add_theme_support( 'disable-custom-colors' );
     233                $response = self::perform_active_theme_request();
     234                $result   = $response->get_data();
     235                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     236                $this->assertTrue( $result[0]['theme_supports']['disable-custom-colors'] );
     237        }
     238
     239        /**
     240         * Test when a theme does not disable custom font sizes.
     241         *
     242         * @ticket 48798
     243         */
     244        public function test_theme_supports_disable_custom_font_sizes_false() {
     245                remove_theme_support( 'disable-custom-font-sizes' );
     246                $response = self::perform_active_theme_request();
     247                $result = $response->get_data();
     248                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     249                $this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-font-sizes'] ) );
     250                $this->assertFalse( $result[0]['theme_supports']['disable-custom-font-sizes'] );
     251        }
     252
     253        /**
     254         * Test when a theme disables custom font sizes.
     255         *
     256         * @ticket 48798
     257         */
     258        public function test_theme_supports_disable_custom_font_sizes_true() {
     259                remove_theme_support( 'disable-custom-font-sizes' );
     260                add_theme_support( 'disable-custom-font-sizes' );
     261                $response = self::perform_active_theme_request();
     262                $result   = $response->get_data();
     263                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     264                $this->assertTrue( $result[0]['theme_supports']['disable-custom-font-sizes'] );
     265        }
     266
     267        /**
     268         * Test when a theme doesn't support custom font sizes.
     269         *
     270         * @ticket 48798
     271         */
     272        public function test_theme_supports_editor_font_sizes_false() {
     273                remove_theme_support( 'editor-font-sizes' );
     274                $response = self::perform_active_theme_request();
     275                $result = $response->get_data();
     276                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     277                $this->assertTrue( isset( $result[0]['theme_supports']['editor-font-sizes'] ) );
     278                $this->assertFalse( $result[0]['theme_supports']['editor-font-sizes'] );
     279        }
     280
     281        /**
     282         * Test when a theme supports custom font sizes.
     283         *
     284         * @ticket 48798
     285         */
     286        public function test_theme_supports_editor_font_sizes_array() {
     287                remove_theme_support( 'editor-font-sizes' );
     288                $tiny = array(
     289                                'name' => 'Tiny',
     290                                'size' => 8,
     291                                'slug' => 'tiny',
     292                );
     293                add_theme_support( 'editor-font-sizes', array( $tiny ) );
     294                $response = self::perform_active_theme_request();
     295                $result = $response->get_data();
     296                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     297                $this->assertEquals( array( $tiny ), $result[0]['theme_supports']['editor-font-sizes'] );
     298        }
     299
     300        /**
     301         * Test when a theme doesn't support a custom color palette.
     302         *
     303         * @ticket 48798
     304         */
     305        public function test_theme_supports_editor_color_palette_false() {
     306                remove_theme_support( 'editor-color-palette' );
     307                $response = self::perform_active_theme_request();
     308                $result = $response->get_data();
     309                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     310                $this->assertTrue( isset( $result[0]['theme_supports']['editor-color-palette'] ) );
     311                $this->assertFalse( $result[0]['theme_supports']['editor-color-palette'] );
     312        }
     313
     314        /**
     315         * Test when a theme supports a custom color palette.
     316         *
     317         * @ticket 48798
     318         */
     319        public function test_theme_supports_editor_color_palette_array() {
     320                remove_theme_support( 'editor-color-palette' );
     321                $wordpress_blue = array(
     322                                'name'  => 'WordPress Blue',
     323                                'slug'  => 'wordpress-blue',
     324                                'color' => '#0073AA',
     325                );
     326                add_theme_support( 'editor-color-palette', array( $wordpress_blue ) );
     327                $response = self::perform_active_theme_request();
     328                $result = $response->get_data();
     329                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     330                $this->assertEquals( array( $wordpress_blue), $result[0]['theme_supports']['editor-color-palette'] );
     331        }
     332
     333        /**
     334         * Test when a theme enables automatic feed links.
     335         *
     336         * @ticket 49037
     337         */
     338        public function test_theme_supports_enable_automatic_feed_links() {
     339                remove_theme_support( 'automatic-feed-links' );
     340                add_theme_support( 'automatic-feed-links' );
     341                $response = self::perform_active_theme_request();
     342                $result   = $response->get_data();
     343                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     344                $this->assertTrue( $result[0]['theme_supports']['automatic-feed-links'] );
     345        }
     346
     347        /**
     348         * Test when a theme does not enable automatic feed links.
     349         *
     350         * @ticket 49037
     351         */
     352        public function test_theme_supports_does_not_enable_automatic_feed_links() {
     353                remove_theme_support( 'automatic-feed-links' );
     354                $response = self::perform_active_theme_request();
     355                $result = $response->get_data();
     356                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     357                $this->assertTrue( isset( $result[0]['theme_supports']['automatic-feed-links'] ) );
     358                $this->assertFalse( $result[0]['theme_supports']['automatic-feed-links'] );
     359        }
     360
     361        /**
     362         * Test when a theme doesn't support a custom logo.
     363         *
     364         * @ticket 49037
     365         */
     366        public function test_theme_does_not_support_custom_logo() {
     367                remove_theme_support( 'custom-logo' );
     368                $response = self::perform_active_theme_request();
     369                $result = $response->get_data();
     370                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     371                $this->assertTrue( isset( $result[0]['theme_supports']['custom-logo'] ) );
     372                $this->assertFalse( $result[0]['theme_supports']['custom-logo'] );
     373        }
     374
     375        /**
     376         * Test when a theme supports a custom logo.
     377         *
     378         * @ticket 49037
     379         */
     380        public function test_theme_supports_custom_logo() {
     381                remove_theme_support( 'custom-logo' );
     382                $wordpress_logo = array(
     383                                'height'  => 100,
     384                                'width'  => 400,
     385                                'flex-height' => true,
     386                                'flex-width' => true,
     387                                'header-text' => array( 'site-title', 'site-description' ),
     388                );
     389                add_theme_support( 'custom-logo', $wordpress_logo );
     390                $response = self::perform_active_theme_request();
     391                $result = $response->get_data();
     392                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     393                $this->assertEquals( $wordpress_logo, $result[0]['theme_supports']['custom-logo'] );
     394        }
     395
     396        /**
     397         * Test when a theme doesn't support a custom header.
     398         *
     399         * @ticket 49037
     400         */
     401        public function test_theme_does_not_support_custom_header() {
     402                remove_theme_support( 'custom-header' );
     403                $response = self::perform_active_theme_request();
     404                $result = $response->get_data();
     405                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     406                $this->assertTrue( isset( $result[0]['theme_supports']['custom-header'] ) );
     407                $this->assertFalse( $result[0]['theme_supports']['custom-header'] );
     408        }
     409
     410        /**
     411         * Test when a theme supports a custom header.
     412         *
     413         * @ticket 49037
     414         */
     415        public function test_theme_supports_custom_header() {
     416                remove_theme_support( 'custom-header' );
     417                $wordpress_header = array(
     418                        'default-image'          => '',
     419                        'random-default'         => false,
     420                        'width'                  => 0,
     421                        'height'                 => 0,
     422                        'flex-height'            => false,
     423                        'flex-width'             => false,
     424                        'default-text-color'     => '',
     425                        'header-text'            => true,
     426                        'uploads'                => true,
     427                        'wp-head-callback'       => '',
     428                        'admin-head-callback'    => '',
     429                        'admin-preview-callback' => '',
     430                        'video'                  => false,
     431                        'video-active-callback'  => 'is_front_page',
     432                );
     433                add_theme_support( 'custom-header', $wordpress_header );
     434                $response = self::perform_active_theme_request();
     435                $result = $response->get_data();
     436                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     437                $this->assertEquals( $wordpress_header, $result[0]['theme_supports']['custom-header'] );
     438        }
     439
     440        /**
     441         * Test when a theme doesn't support html5 markup.
     442         *
     443         * @ticket 49037
     444         */
     445        public function test_theme_does_not_support_html5() {
     446                remove_theme_support( 'html5' );
     447                $response = self::perform_active_theme_request();
     448                $result = $response->get_data();
     449                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     450                $this->assertTrue( isset( $result[0]['theme_supports']['html5'] ) );
     451                $this->assertFalse( $result[0]['theme_supports']['html5'] );
     452        }
     453
     454        /**
     455         * Test when a theme supports html5 markup.
     456         *
     457         * @ticket 49037
     458         */
     459        public function test_theme_supports_html5() {
     460                remove_theme_support( 'html5' );
     461                $html5 = array(
     462                        'search-form',
     463                        'comment-form',
     464                        'comment-list',
     465                        'gallery',
     466                        'caption',
     467                        'script',
     468                        'style',
     469                );
     470                add_theme_support( 'html5', $html5 );
     471                $response = self::perform_active_theme_request();
     472                $result = $response->get_data();
     473                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     474                $this->assertEquals( $html5, $result[0]['theme_supports']['html5'] );
     475        }
     476
     477        /**
     478         * Test when a theme cannot manage title tag.
     479         *
     480         * @ticket 49037
     481         */
     482        public function test_theme_cannot_manage_title_tag() {
     483                remove_theme_support( 'title-tag' );
     484                $response = self::perform_active_theme_request();
     485                $result = $response->get_data();
     486                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     487                $this->assertTrue( isset( $result[0]['theme_supports']['title-tag'] ) );
     488                $this->assertFalse( $result[0]['theme_supports']['title-tag'] );
     489        }
     490
     491        /**
     492         * Test when a theme can manage title tag.
     493         *
     494         * @ticket 49037
     495         */
     496        public function test_theme_can_manage_title_tag() {
     497                global $_wp_theme_features;
     498                $_wp_theme_features['title-tag'] = true;
     499                $response = self::perform_active_theme_request();
     500                $result   = $response->get_data();
     501                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     502                $this->assertTrue( $result[0]['theme_supports']['title-tag'] );
     503        }
     504
     505        /**
     506         * Test when a theme cannot manage Selective Refresh for Widgets.
     507         *
     508         * @ticket 49037
     509         */
     510        public function test_theme_cannot_manage_selective_refresh_for_widgets() {
     511                remove_theme_support( 'customize-selective-refresh-widgets' );
     512                $response = self::perform_active_theme_request();
     513                $result = $response->get_data();
     514                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     515                $this->assertTrue( isset( $result[0]['theme_supports']['customize-selective-refresh-widgets'] ) );
     516                $this->assertFalse( $result[0]['theme_supports']['customize-selective-refresh-widgets'] );
     517        }
     518
     519        /**
     520         * Test when a theme can mange Selective Refresh for Widgets.
     521         *
     522         * @ticket 49037
     523         */
     524        public function test_theme_can_manage_selective_refresh_for_widgets() {
     525                remove_theme_support( 'customize-selective-refresh-widgets' );
     526                add_theme_support( 'customize-selective-refresh-widgets' );
     527                $response = self::perform_active_theme_request();
     528                $result   = $response->get_data();
     529                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     530                $this->assertTrue( $result[0]['theme_supports']['customize-selective-refresh-widgets'] );
     531        }
     532
     533        /**
     534         * Test when a theme does not opt in to the default block styles for viewing.
     535         *
     536         * @ticket 49037
     537         */
     538        public function test_theme_no_wp_block_styles() {
     539                remove_theme_support( 'wp-block-styles' );
     540                $response = self::perform_active_theme_request();
     541                $result = $response->get_data();
     542                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     543                $this->assertTrue( isset( $result[0]['theme_supports']['wp-block-styles'] ) );
     544                $this->assertFalse( $result[0]['theme_supports']['wp-block-styles'] );
     545        }
     546
     547        /**
     548         * Test when a theme opts in to the default block styles for viewing.
     549         *
     550         * @ticket 49037
     551         */
     552        public function test_theme_wp_block_styles_optin() {
     553                remove_theme_support( 'wp-block-styles' );
     554                add_theme_support( 'wp-block-styles' );
     555                $response = self::perform_active_theme_request();
     556                $result   = $response->get_data();
     557                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     558                $this->assertTrue( $result[0]['theme_supports']['wp-block-styles'] );
     559        }
     560
     561        /**
     562         * Test when a theme does not opt in to wide alignment CSS class.
     563         *
     564         * @ticket 49037
     565         */
     566        public function test_theme_no_align_wide() {
     567                remove_theme_support( 'align-wide' );
     568                $response = self::perform_active_theme_request();
     569                $result = $response->get_data();
     570                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     571                $this->assertTrue( isset( $result[0]['theme_supports']['align-wide'] ) );
     572                $this->assertFalse( $result[0]['theme_supports']['align-wide'] );
     573        }
     574
     575        /**
     576         * Test when a theme opts in to wide alignment CSS class.
     577         *
     578         * @ticket 49037
     579         */
     580        public function test_theme_align_wide_optin() {
     581                remove_theme_support( 'align-wide' );
     582                add_theme_support( 'align-wide' );
     583                $response = self::perform_active_theme_request();
     584                $result   = $response->get_data();
     585                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     586                $this->assertTrue( $result[0]['theme_supports']['align-wide'] );
     587        }
     588
     589        /**
     590         * Test when a theme does not opt in to the editor styles CSS wrapper.
     591         *
     592         * @ticket 49037
     593         */
     594        public function test_theme_no_editor_styles() {
     595                remove_theme_support( 'editor-styles' );
     596                $response = self::perform_active_theme_request();
     597                $result = $response->get_data();
     598                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     599                $this->assertTrue( isset( $result[0]['theme_supports']['editor-styles'] ) );
     600                $this->assertFalse( $result[0]['theme_supports']['editor-styles'] );
     601        }
     602
     603        /**
     604         * Test when a theme opts in to the editor styles CSS wrapper.
     605         *
     606         * @ticket 49037
     607         */
     608        public function test_theme_editor_styles_optin() {
     609                remove_theme_support( 'editor-styles' );
     610                add_theme_support( 'editor-styles' );
     611                $response = self::perform_active_theme_request();
     612                $result   = $response->get_data();
     613                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     614                $this->assertTrue( $result[0]['theme_supports']['editor-styles'] );
     615        }
     616
     617        /**
     618         * Test when a theme does not opt in to the dark editor style UI.
     619         *
     620         * @ticket 49037
     621         */
     622        public function test_theme_no_dark_editor_style() {
     623                remove_theme_support( 'dark-editor-style' );
     624                $response = self::perform_active_theme_request();
     625                $result = $response->get_data();
     626                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     627                $this->assertTrue( isset( $result[0]['theme_supports']['dark-editor-style'] ) );
     628                $this->assertFalse( $result[0]['theme_supports']['dark-editor-style'] );
     629        }
     630
     631        /**
     632         * Test when a theme opts in to the dark editor style UI.
     633         *
     634         * @ticket 49037
     635         */
     636        public function test_theme_dark_editor_style_optin() {
     637                remove_theme_support( 'dark-editor-style' );
     638                add_theme_support( 'dark-editor-style' );
     639                $response = self::perform_active_theme_request();
     640                $result   = $response->get_data();
     641                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     642                $this->assertTrue( $result[0]['theme_supports']['dark-editor-style'] );
     643        }
     644
     645        /**
    199646         * Should include relevant data in the 'theme_supports' key.
    200647         *
    201648         * @ticket 45016