Make WordPress Core


Ignore:
Timestamp:
06/04/2024 11:53:37 AM (2 years ago)
Author:
ellatrix
Message:

Editor: Add theme.json v3 migrations.

See https://github.com/WordPress/wordpress-develop/pull/6616.
See also the original Gutenberg PRs:

Fixes #61282.

Props ajlende, talldanwp, ramonopoly, ellatrix.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/theme/wpThemeJson.php

    r58314 r58328  
    33013301                $theme = new WP_Theme_JSON(
    33023302                        array(
    3303                                 'version'  => 2,
     3303                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    33043304                                'settings' => array(
    33053305                                        'color' => array(
     
    33223322                $user  = new WP_Theme_JSON(
    33233323                        array(
    3324                                 'version'  => 2,
     3324                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    33253325                                'settings' => array(
    33263326                                        'color' => array(
     
    33463346                $actual   = $theme->get_data();
    33473347                $expected = array(
    3348                         'version'  => 2,
     3348                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    33493349                        'settings' => array(
    33503350                                'color' => array(
     
    33793379                $theme = new WP_Theme_JSON(
    33803380                        array(
    3381                                 'version'  => 2,
     3381                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    33823382                                'settings' => array(
    33833383                                        'color' => array(
     
    34013401                $actual   = $theme->get_data();
    34023402                $expected = array(
    3403                         'version'  => 2,
     3403                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    34043404                        'settings' => array(
    34053405                                'color' => array(
     
    34293429                $user = new WP_Theme_JSON(
    34303430                        array(
    3431                                 'version'  => 2,
     3431                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    34323432                                'settings' => array(
    34333433                                        'color' => array(
     
    34523452                $actual   = $user->get_data();
    34533453                $expected = array(
    3454                         'version'  => 2,
     3454                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    34553455                        'settings' => array(
    34563456                                'color' => array(
     
    34783478         */
    34793479        public function test_export_data_deals_with_empty_data() {
    3480                 $theme_v2    = new WP_Theme_JSON(
    3481                         array(
    3482                                 'version' => 2,
     3480                $theme    = new WP_Theme_JSON(
     3481                        array(
     3482                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    34833483                        ),
    34843484                        'theme'
    34853485                );
    3486                 $actual_v2   = $theme_v2->get_data();
    3487                 $expected_v2 = array( 'version' => 2 );
    3488                 $this->assertEqualSetsWithIndex( $expected_v2, $actual_v2 );
    3489 
    3490                 $theme_v1    = new WP_Theme_JSON(
    3491                         array(
    3492                                 'version' => 1,
    3493                         ),
    3494                         'theme'
    3495                 );
    3496                 $actual_v1   = $theme_v1->get_data();
    3497                 $expected_v1 = array( 'version' => 2 );
    3498                 $this->assertEqualSetsWithIndex( $expected_v1, $actual_v1 );
     3486                $actual   = $theme->get_data();
     3487                $expected = array( 'version' => WP_Theme_JSON::LATEST_SCHEMA );
     3488                $this->assertEqualSetsWithIndex( $expected, $actual );
    34993489        }
    35003490
     
    35053495                $theme = new WP_Theme_JSON(
    35063496                        array(
    3507                                 'version'  => 2,
     3497                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    35083498                                'settings' => array(
    35093499                                        'appearanceTools' => true,
     
    35193509                $actual   = $theme->get_data();
    35203510                $expected = array(
    3521                         'version'  => 2,
     3511                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    35223512                        'settings' => array(
    35233513                                'appearanceTools' => true,
     
    35393529                $theme = new WP_Theme_JSON(
    35403530                        array(
    3541                                 'version'  => 2,
     3531                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    35423532                                'settings' => array(
    35433533                                        'useRootPaddingAwareAlignments' => true,
     
    35533543                $actual   = $theme->get_data();
    35543544                $expected = array(
    3555                         'version'  => 2,
     3545                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    35563546                        'settings' => array(
    35573547                                'useRootPaddingAwareAlignments' => true,
     
    36453635                $theme_json = new WP_Theme_JSON(
    36463636                        array(
    3647                                 'version' => 2,
     3637                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    36483638                                'styles'  => array(
    36493639                                        'color'    => array(
     
    37303720                $theme_json = new WP_Theme_JSON(
    37313721                        array(
    3732                                 'version' => 2,
     3722                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    37333723                                'styles'  => array(
    37343724                                        'color'    => array(
     
    37683758                $theme_json = new WP_Theme_JSON(
    37693759                        array(
    3770                                 'version' => 2,
     3760                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    37713761                                'styles'  => array(
    37723762                                        'color'    => array(
     
    38053795                $theme_json = new WP_Theme_JSON(
    38063796                        array(
    3807                                 'version' => 2,
     3797                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    38083798                                'styles'  => array(
    38093799                                        'color' => array(
     
    38313821                $theme_json = new WP_Theme_JSON(
    38323822                        array(
    3833                                 'version'  => 2,
     3823                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    38343824                                'styles'   => array(
    38353825                                        'spacing' => array(
     
    38683858                $theme_json = new WP_Theme_JSON(
    38693859                        array(
    3870                                 'version' => 2,
     3860                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    38713861                                'styles'  => array(
    38723862                                        'spacing' => array(
     
    39013891                $theme_json = new WP_Theme_JSON(
    39023892                        array(
    3903                                 'version'  => 2,
     3893                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    39043894                                'settings' => array(
    39053895                                        'layout' => array(
     
    39323922                $theme_json = new WP_Theme_JSON(
    39333923                        array(
    3934                                 'version'  => 2,
     3924                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    39353925                                'settings' => array(
    39363926                                        'appearanceTools' => true,
     
    39553945                $theme_json = new WP_Theme_JSON(
    39563946                        array(
    3957                                 'version' => 2,
     3947                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    39583948                                'styles'  => array(
    39593949                                        'spacing' => array(
     
    39743964                $actual   = $theme_json->get_raw_data();
    39753965                $expected = array(
    3976                         'version' => 2,
     3966                        'version' => WP_Theme_JSON::LATEST_SCHEMA,
    39773967                        'styles'  => array(
    39783968                                'spacing' => array(
     
    39983988                $theme_json = new WP_Theme_JSON(
    39993989                        array(
    4000                                 'version' => 2,
     3990                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    40013991                                'styles'  => array(
    40023992                                        'blocks' => array(
     
    40224012                $sanitized_theme_json = $theme_json->get_raw_data();
    40234013                $expected             = array(
    4024                         'version' => 2,
     4014                        'version' => WP_Theme_JSON::LATEST_SCHEMA,
    40254015                        'styles'  => array(
    40264016                                'blocks' => array(
     
    40514041                $theme_json = new WP_Theme_JSON(
    40524042                        array(
    4053                                 'version' => 2,
     4043                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    40544044                                'styles'  => array(
    40554045                                        'blocks' => array(
     
    41354125                $theme_json = new WP_Theme_JSON(
    41364126                        array(
    4137                                 'version'  => '2',
     4127                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    41384128                                'badKey2'  => 'I am Evil!',
    41394129                                'settings' => array(
     
    42034193
    42044194                $expected_sanitized   = array(
    4205                         'version'  => '2',
     4195                        'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    42064196                        'settings' => array(
    42074197                                'typography' => array(
     
    42724262                $theme_json = new WP_Theme_JSON(
    42734263                        array(
    4274                                 'version' => 2,
     4264                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    42754265                                'styles'  => array(
    42764266                                        'blocks' => array(
     
    43204310                $theme_json = new WP_Theme_JSON(
    43214311                        array(
    4322                                 'version' => 2,
     4312                                'version' => WP_Theme_JSON::LATEST_SCHEMA,
    43234313                                'styles'  => array(
    43244314                                        'blocks' => array(
     
    44744464                $theme_json = new WP_Theme_JSON(
    44754465                        array(
    4476                                 'version'  => 2,
     4466                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    44774467                                'settings' => array(
    44784468                                        'spacing' => array(
     
    44804470                                        ),
    44814471                                ),
    4482                         )
    4483                 );
    4484 
    4485                 $theme_json->set_spacing_sizes();
     4472                        ),
     4473                        'default'
     4474                );
     4475
    44864476                $this->assertSame( $expected_output, _wp_array_get( $theme_json->get_raw_data(), array( 'settings', 'spacing', 'spacingSizes', 'default' ) ) );
    44874477        }
     
    45064496                                'expected_output' => array(
    45074497                                        array(
    4508                                                 'name' => '1',
     4498                                                'name' => 'Medium',
    45094499                                                'slug' => '50',
    45104500                                                'size' => '4rem',
     
    45224512                                'expected_output' => array(
    45234513                                        array(
    4524                                                 'name' => '1',
     4514                                                'name' => 'Medium',
    45254515                                                'slug' => '50',
    45264516                                                'size' => '4rem',
    45274517                                        ),
    45284518                                        array(
    4529                                                 'name' => '2',
     4519                                                'name' => 'Large',
    45304520                                                'slug' => '60',
    45314521                                                'size' => '5.5rem',
     
    45434533                                'expected_output' => array(
    45444534                                        array(
    4545                                                 'name' => '1',
     4535                                                'name' => 'Small',
    45464536                                                'slug' => '40',
    45474537                                                'size' => '2.5rem',
    45484538                                        ),
    45494539                                        array(
    4550                                                 'name' => '2',
     4540                                                'name' => 'Medium',
    45514541                                                'slug' => '50',
    45524542                                                'size' => '4rem',
    45534543                                        ),
    45544544                                        array(
    4555                                                 'name' => '3',
     4545                                                'name' => 'Large',
    45564546                                                'slug' => '60',
    45574547                                                'size' => '5.5rem',
     
    45694559                                'expected_output' => array(
    45704560                                        array(
    4571                                                 'name' => '1',
     4561                                                'name' => 'Small',
    45724562                                                'slug' => '40',
    45734563                                                'size' => '2.5rem',
    45744564                                        ),
    45754565                                        array(
    4576                                                 'name' => '2',
     4566                                                'name' => 'Medium',
    45774567                                                'slug' => '50',
    45784568                                                'size' => '4rem',
    45794569                                        ),
    45804570                                        array(
    4581                                                 'name' => '3',
     4571                                                'name' => 'Large',
    45824572                                                'slug' => '60',
    45834573                                                'size' => '5.5rem',
    45844574                                        ),
    45854575                                        array(
    4586                                                 'name' => '4',
     4576                                                'name' => 'X-Large',
    45874577                                                'slug' => '70',
    45884578                                                'size' => '7rem',
     
    46004590                                'expected_output' => array(
    46014591                                        array(
    4602                                                 'name' => '1',
     4592                                                'name' => 'Small',
    46034593                                                'slug' => '40',
    46044594                                                'size' => '2.5rem',
    46054595                                        ),
    46064596                                        array(
    4607                                                 'name' => '2',
     4597                                                'name' => 'Medium',
    46084598                                                'slug' => '50',
    46094599                                                'size' => '5rem',
    46104600                                        ),
    46114601                                        array(
    4612                                                 'name' => '3',
     4602                                                'name' => 'Large',
    46134603                                                'slug' => '60',
    46144604                                                'size' => '7.5rem',
    46154605                                        ),
    46164606                                        array(
    4617                                                 'name' => '4',
     4607                                                'name' => 'X-Large',
    46184608                                                'slug' => '70',
    46194609                                                'size' => '10rem',
    46204610                                        ),
    46214611                                        array(
    4622                                                 'name' => '5',
     4612                                                'name' => '2X-Large',
    46234613                                                'slug' => '80',
    46244614                                                'size' => '12.5rem',
     
    46364626                                'expected_output' => array(
    46374627                                        array(
    4638                                                 'name' => '1',
     4628                                                'name' => 'X-Small',
    46394629                                                'slug' => '30',
    46404630                                                'size' => '0.67rem',
    46414631                                        ),
    46424632                                        array(
    4643                                                 'name' => '2',
     4633                                                'name' => 'Small',
    46444634                                                'slug' => '40',
    46454635                                                'size' => '1rem',
    46464636                                        ),
    46474637                                        array(
    4648                                                 'name' => '3',
     4638                                                'name' => 'Medium',
    46494639                                                'slug' => '50',
    46504640                                                'size' => '1.5rem',
    46514641                                        ),
    46524642                                        array(
    4653                                                 'name' => '4',
     4643                                                'name' => 'Large',
    46544644                                                'slug' => '60',
    46554645                                                'size' => '2.25rem',
    46564646                                        ),
    46574647                                        array(
    4658                                                 'name' => '5',
     4648                                                'name' => 'X-Large',
    46594649                                                'slug' => '70',
    46604650                                                'size' => '3.38rem',
     
    46724662                                'expected_output' => array(
    46734663                                        array(
    4674                                                 'name' => '1',
     4664                                                'name' => 'X-Small',
    46754665                                                'slug' => '30',
    46764666                                                'size' => '0.09rem',
    46774667                                        ),
    46784668                                        array(
    4679                                                 'name' => '2',
     4669                                                'name' => 'Small',
    46804670                                                'slug' => '40',
    46814671                                                'size' => '0.38rem',
    46824672                                        ),
    46834673                                        array(
    4684                                                 'name' => '3',
     4674                                                'name' => 'Medium',
    46854675                                                'slug' => '50',
    46864676                                                'size' => '1.5rem',
    46874677                                        ),
    46884678                                        array(
    4689                                                 'name' => '4',
     4679                                                'name' => 'Large',
    46904680                                                'slug' => '60',
    46914681                                                'size' => '6rem',
    46924682                                        ),
    46934683                                        array(
    4694                                                 'name' => '5',
     4684                                                'name' => 'X-Large',
    46954685                                                'slug' => '70',
    46964686                                                'size' => '24rem',
     
    47634753         */
    47644754        public function test_set_spacing_sizes_when_invalid( $spacing_scale, $expected_output ) {
    4765                 $this->expectException( Exception::class );
    4766                 $this->expectExceptionMessage( 'Some of the theme.json settings.spacing.spacingScale values are invalid' );
    4767 
    47684755                $theme_json = new WP_Theme_JSON(
    47694756                        array(
    4770                                 'version'  => 2,
     4757                                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
    47714758                                'settings' => array(
    47724759                                        'spacing' => array(
     
    47744761                                        ),
    47754762                                ),
    4776                         )
    4777                 );
    4778 
    4779                 // Ensure PHPUnit 10 compatibility.
    4780                 set_error_handler(
    4781                         static function ( $errno, $errstr ) {
    4782                                 restore_error_handler();
    4783                                 throw new Exception( $errstr, $errno );
    4784                         },
    4785                         E_ALL
    4786                 );
    4787 
    4788                 $theme_json->set_spacing_sizes();
    4789 
    4790                 restore_error_handler();
     4763                        ),
     4764                        'default'
     4765                );
    47914766
    47924767                $this->assertSame( $expected_output, _wp_array_get( $theme_json->get_raw_data(), array( 'settings', 'spacing', 'spacingSizes', 'default' ) ) );
     
    48104785                                        'unit'       => 'rem',
    48114786                                ),
    4812                                 'expected_output' => null,
     4787                                'expected_output' => array(),
    48134788                        ),
    48144789                        'non numeric increment'   => array(
     
    48204795                                        'unit'       => 'rem',
    48214796                                ),
    4822                                 'expected_output' => null,
     4797                                'expected_output' => array(),
    48234798                        ),
    48244799                        'non numeric steps'       => array(
     
    48304805                                        'unit'       => 'rem',
    48314806                                ),
    4832                                 'expected_output' => null,
     4807                                'expected_output' => array(),
    48334808                        ),
    48344809                        'non numeric medium step' => array(
     
    48404815                                        'unit'       => 'rem',
    48414816                                ),
    4842                                 'expected_output' => null,
     4817                                'expected_output' => array(),
    48434818                        ),
    48444819                        'missing unit value'      => array(
     
    48494824                                        'mediumStep' => 4,
    48504825                                ),
    4851                                 'expected_output' => null,
     4826                                'expected_output' => array(),
    48524827                        ),
    48534828                );
Note: See TracChangeset for help on using the changeset viewer.