WordPress.org

Make WordPress Core

Ticket #34597: 34597.1.diff

File 34597.1.diff, 3.9 KB (added by westonruter, 4 years ago)

Unit testing

  • src/wp-includes/class-wp-customize-manager.php

    diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
    index e95e115..daa15e6 100644
    final class WP_Customize_Manager { 
    10491049                if ( $id instanceof WP_Customize_Setting ) {
    10501050                        $setting = $id;
    10511051                } else {
    1052                         $setting = new WP_Customize_Setting( $this, $id, $args );
     1052                        $class = 'WP_Customize_Setting';
     1053
     1054                        /** This filter is documented in wp-includes/class-wp-customize-manager.php */
     1055                        $args = apply_filters( 'customize_dynamic_setting_args', $args, $id );
     1056
     1057                        /** This filter is documented in wp-includes/class-wp-customize-manager.php */
     1058                        $class = apply_filters( 'customize_dynamic_setting_class', $class, $id, $args );
     1059
     1060                        $setting = new $class( $this, $id, $args );
    10531061                }
    10541062
    10551063                $this->settings[ $setting->id ] = $setting;
  • tests/phpunit/tests/customize/manager.php

    diff --git tests/phpunit/tests/customize/manager.php tests/phpunit/tests/customize/manager.php
    index 272166b..929df0a 100644
    class Tests_WP_Customize_Manager extends WP_UnitTestCase { 
    245245         * @return array
    246246         */
    247247        function filter_customize_dynamic_setting_args_for_test_dynamic_settings( $setting_args, $setting_id ) {
    248                 $this->assertEquals( false, $setting_args, 'Expected $setting_args to be false by default.' );
    249248                $this->assertInternalType( 'string', $setting_id );
    250249                if ( in_array( $setting_id, array( 'foo', 'bar' ) ) ) {
    251250                        $setting_args = array( 'default' => "dynamic_{$setting_id}_default" );
    class Tests_WP_Customize_Manager extends WP_UnitTestCase { 
    542541        }
    543542
    544543        /**
     544         * @ticket 34597
     545         */
     546        function test_add_setting_honoring_dynamic() {
     547                $manager = new WP_Customize_Manager();
     548
     549                $setting_id = 'dynamic';
     550                $setting = $manager->add_setting( $setting_id );
     551                $this->assertEquals( 'WP_Customize_Setting', get_class( $setting ) );
     552                $this->assertObjectNotHasAttribute( 'custom', $setting );
     553                $manager->remove_setting( $setting_id );
     554
     555                add_filter( 'customize_dynamic_setting_class', array( $this, 'return_dynamic_customize_setting_class' ), 10, 3 );
     556                add_filter( 'customize_dynamic_setting_args', array( $this, 'return_dynamic_customize_setting_args' ), 10, 2 );
     557                $setting = $manager->add_setting( $setting_id );
     558                $this->assertEquals( 'Test_Dynamic_Customize_Setting', get_class( $setting ) );
     559                $this->assertObjectHasAttribute( 'custom', $setting );
     560                $this->assertEquals( 'foo', $setting->custom );
     561        }
     562
     563        /**
     564         * Return 'Test_Dynamic_Customize_Setting' in 'customize_dynamic_setting_class.
     565         *
     566         * @param string $class Setting class.
     567         * @param array  $args  Setting args.
     568         * @param string $id    Setting ID.
     569         * @return string       Setting class.
     570         */
     571        function return_dynamic_customize_setting_class( $class, $id, $args ) {
     572                unset( $args );
     573                if ( 0 === strpos( $id, 'dynamic' ) ) {
     574                        $class = 'Test_Dynamic_Customize_Setting';
     575                }
     576                return $class;
     577        }
     578
     579        /**
     580         * Return 'Test_Dynamic_Customize_Setting' in 'customize_dynamic_setting_class.
     581         *
     582         * @param array  $args Setting args.
     583         * @param string $id   Setting ID.
     584         * @return string      Setting args.
     585         */
     586        function return_dynamic_customize_setting_args( $args, $id ) {
     587                if ( 0 === strpos( $id, 'dynamic' ) ) {
     588                        $args['custom'] = 'foo';
     589                }
     590                return $args;
     591        }
     592
     593        /**
    545594         * @ticket 34596
    546595         */
    547596        function test_add_panel_return_instance() {
    class Tests_WP_Customize_Manager extends WP_UnitTestCase { 
    602651                $this->assertEquals( $control_id, $result_control->id );
    603652        }
    604653}
     654
     655require_once ABSPATH . WPINC . '/class-wp-customize-setting.php';
     656
     657/**
     658 * Class Test_Dynamic_Customize_Setting
     659 *
     660 * @see Tests_WP_Customize_Manager::test_add_setting_honoring_dynamic()
     661 */
     662class Test_Dynamic_Customize_Setting extends WP_Customize_Setting {
     663        public $type = 'dynamic';
     664        public $custom;
     665}