Make WordPress Core


Ignore:
Timestamp:
04/11/2022 10:36:02 AM (3 years ago)
Author:
gziolo
Message:

Editor: Add functionality required for theme export in the site editor

This bring across changes to theme export functionality, and related code, and tests. Relates issue in Gutenberg: https://github.com/WordPress/gutenberg/issues/39889.

Props scruffian, timothyblynjacobs, oandregal, ajlende, zieleadam.
See #55505.

File:
1 edited

Legend:

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

    r52434 r53129  
    424424        );
    425425
    426         $expected = 'body { margin: 0; }body{--wp--style--block-gap: 1em;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }';
    427         $this->assertSame( $expected, $theme_json->get_stylesheet() );
    428         $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) );
     426        $expected = 'body { margin: 0; }body{--wp--style--block-gap: 1em;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: var( --wp--style--block-gap ); }';
     427        $this->assertEquals( $expected, $theme_json->get_stylesheet() );
     428        $this->assertEquals( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) );
    429429    }
    430430
     
    554554
    555555        $variables = 'body{--wp--preset--color--grey: grey;--wp--preset--font-family--small: 14px;--wp--preset--font-family--big: 41px;}.wp-block-group{--wp--custom--base-font: 16;--wp--custom--line-height--small: 1.2;--wp--custom--line-height--medium: 1.4;--wp--custom--line-height--large: 1.8;}';
    556         $styles    = 'body { margin: 0; }body{color: var(--wp--preset--color--grey);}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }a{background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a{color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a{background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
     556        $styles    = 'body { margin: 0; }body{color: var(--wp--preset--color--grey);}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: var( --wp--style--block-gap ); }a{background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a{color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a{background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
    557557        $presets   = '.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-small-font-family{font-family: var(--wp--preset--font-family--small) !important;}.has-big-font-family{font-family: var(--wp--preset--font-family--big) !important;}';
    558558        $all       = $variables . $styles . $presets;
    559         $this->assertSame( $all, $theme_json->get_stylesheet() );
    560         $this->assertSame( $styles, $theme_json->get_stylesheet( array( 'styles' ) ) );
    561         $this->assertSame( $presets, $theme_json->get_stylesheet( array( 'presets' ) ) );
    562         $this->assertSame( $variables, $theme_json->get_stylesheet( array( 'variables' ) ) );
     559        $this->assertEquals( $all, $theme_json->get_stylesheet() );
     560        $this->assertEquals( $styles, $theme_json->get_stylesheet( array( 'styles' ) ) );
     561        $this->assertEquals( $presets, $theme_json->get_stylesheet( array( 'presets' ) ) );
     562        $this->assertEquals( $variables, $theme_json->get_stylesheet( array( 'variables' ) ) );
    563563    }
    564564
     
    23852385    }
    23862386
     2387    /**
     2388     * @ticket 55505
     2389     */
     2390    function test_export_data() {
     2391        $theme = new WP_Theme_JSON(
     2392            array(
     2393                'version'  => 2,
     2394                'settings' => array(
     2395                    'color' => array(
     2396                        'palette' => array(
     2397                            array(
     2398                                'slug'  => 'white',
     2399                                'color' => 'white',
     2400                                'label' => 'White',
     2401                            ),
     2402                            array(
     2403                                'slug'  => 'black',
     2404                                'color' => 'black',
     2405                                'label' => 'Black',
     2406                            ),
     2407                        ),
     2408                    ),
     2409                ),
     2410            )
     2411        );
     2412        $user  = new WP_Theme_JSON(
     2413            array(
     2414                'version'  => 2,
     2415                'settings' => array(
     2416                    'color' => array(
     2417                        'palette' => array(
     2418                            array(
     2419                                'slug'  => 'white',
     2420                                'color' => '#fff',
     2421                                'label' => 'User White',
     2422                            ),
     2423                            array(
     2424                                'slug'  => 'hotpink',
     2425                                'color' => 'hotpink',
     2426                                'label' => 'hotpink',
     2427                            ),
     2428                        ),
     2429                    ),
     2430                ),
     2431            ),
     2432            'custom'
     2433        );
     2434
     2435        $theme->merge( $user );
     2436        $actual   = $theme->get_data();
     2437        $expected = array(
     2438            'version'  => 2,
     2439            'settings' => array(
     2440                'color' => array(
     2441                    'palette' => array(
     2442                        array(
     2443                            'slug'  => 'white',
     2444                            'color' => '#fff',
     2445                            'label' => 'User White',
     2446                        ),
     2447                        array(
     2448                            'slug'  => 'black',
     2449                            'color' => 'black',
     2450                            'label' => 'Black',
     2451                        ),
     2452                        array(
     2453                            'slug'  => 'hotpink',
     2454                            'color' => 'hotpink',
     2455                            'label' => 'hotpink',
     2456                        ),
     2457                    ),
     2458                ),
     2459            ),
     2460        );
     2461
     2462        $this->assertEqualSetsWithIndex( $expected, $actual );
     2463    }
     2464
     2465    /**
     2466     * @ticket 55505
     2467     */
     2468    function test_export_data_deals_with_empty_user_data() {
     2469        $theme = new WP_Theme_JSON(
     2470            array(
     2471                'version'  => 2,
     2472                'settings' => array(
     2473                    'color' => array(
     2474                        'palette' => array(
     2475                            array(
     2476                                'slug'  => 'white',
     2477                                'color' => 'white',
     2478                                'label' => 'White',
     2479                            ),
     2480                            array(
     2481                                'slug'  => 'black',
     2482                                'color' => 'black',
     2483                                'label' => 'Black',
     2484                            ),
     2485                        ),
     2486                    ),
     2487                ),
     2488            )
     2489        );
     2490
     2491        $actual   = $theme->get_data();
     2492        $expected = array(
     2493            'version'  => 2,
     2494            'settings' => array(
     2495                'color' => array(
     2496                    'palette' => array(
     2497                        array(
     2498                            'slug'  => 'white',
     2499                            'color' => 'white',
     2500                            'label' => 'White',
     2501                        ),
     2502                        array(
     2503                            'slug'  => 'black',
     2504                            'color' => 'black',
     2505                            'label' => 'Black',
     2506                        ),
     2507                    ),
     2508                ),
     2509            ),
     2510        );
     2511
     2512        $this->assertEqualSetsWithIndex( $expected, $actual );
     2513    }
     2514
     2515    /**
     2516     * @ticket 55505
     2517     */
     2518    function test_export_data_deals_with_empty_theme_data() {
     2519        $user = new WP_Theme_JSON(
     2520            array(
     2521                'version'  => 2,
     2522                'settings' => array(
     2523                    'color' => array(
     2524                        'palette' => array(
     2525                            array(
     2526                                'slug'  => 'white',
     2527                                'color' => '#fff',
     2528                                'label' => 'User White',
     2529                            ),
     2530                            array(
     2531                                'slug'  => 'hotpink',
     2532                                'color' => 'hotpink',
     2533                                'label' => 'hotpink',
     2534                            ),
     2535                        ),
     2536                    ),
     2537                ),
     2538            ),
     2539            'custom'
     2540        );
     2541
     2542        $actual   = $user->get_data();
     2543        $expected = array(
     2544            'version'  => 2,
     2545            'settings' => array(
     2546                'color' => array(
     2547                    'palette' => array(
     2548                        array(
     2549                            'slug'  => 'white',
     2550                            'color' => '#fff',
     2551                            'label' => 'User White',
     2552                        ),
     2553                        array(
     2554                            'slug'  => 'hotpink',
     2555                            'color' => 'hotpink',
     2556                            'label' => 'hotpink',
     2557                        ),
     2558                    ),
     2559                ),
     2560            ),
     2561        );
     2562
     2563        $this->assertEqualSetsWithIndex( $expected, $actual );
     2564    }
     2565
     2566    /**
     2567     * @ticket 55505
     2568     */
     2569    function test_export_data_deals_with_empty_data() {
     2570        $theme_v2    = new WP_Theme_JSON(
     2571            array(
     2572                'version' => 2,
     2573            ),
     2574            'theme'
     2575        );
     2576        $actual_v2   = $theme_v2->get_data();
     2577        $expected_v2 = array( 'version' => 2 );
     2578        $this->assertEqualSetsWithIndex( $expected_v2, $actual_v2 );
     2579
     2580        $theme_v1    = new WP_Theme_JSON(
     2581            array(
     2582                'version' => 1,
     2583            ),
     2584            'theme'
     2585        );
     2586        $actual_v1   = $theme_v1->get_data();
     2587        $expected_v1 = array( 'version' => 2 );
     2588        $this->assertEqualSetsWithIndex( $expected_v1, $actual_v1 );
     2589    }
     2590
     2591    /**
     2592     * @ticket 55505
     2593     */
     2594    function test_export_data_sets_appearance_tools() {
     2595        $theme = new WP_Theme_JSON(
     2596            array(
     2597                'version'  => 2,
     2598                'settings' => array(
     2599                    'appearanceTools' => true,
     2600                    'blocks'          => array(
     2601                        'core/paragraph' => array(
     2602                            'appearanceTools' => true,
     2603                        ),
     2604                    ),
     2605                ),
     2606            )
     2607        );
     2608
     2609        $actual   = $theme->get_data();
     2610        $expected = array(
     2611            'version'  => 2,
     2612            'settings' => array(
     2613                'appearanceTools' => true,
     2614                'blocks'          => array(
     2615                    'core/paragraph' => array(
     2616                        'appearanceTools' => true,
     2617                    ),
     2618                ),
     2619            ),
     2620        );
     2621
     2622        $this->assertEqualSetsWithIndex( $expected, $actual );
     2623    }
    23872624}
Note: See TracChangeset for help on using the changeset viewer.