wordpress-develop/tests/phpunit/tests/customize/widgets.php
Sergey Biryukov 164b22cf6a Tests: First pass at using assertSame() instead of assertEquals() in most of the unit tests.
This ensures that not only the return values match the expected results, but also that their type is the same.

Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable.

Props johnbillion, jrf, SergeyBiryukov.
See #38266.

git-svn-id: https://develop.svn.wordpress.org/trunk@48937 602fd350-edb4-49c9-b593-d223f7449a82
2020-09-02 00:35:36 +00:00

677 lines
27 KiB
PHP

<?php
/**
* Tests for the WP_Customize_Widgets class.
*
* @group customize
*/
class Tests_WP_Customize_Widgets extends WP_UnitTestCase {
/**
* @var WP_Customize_Manager
*/
protected $manager;
/**
* Stored global variable in setUp for restoration in tearDown.
*
* @see $wp_registered_sidebars
* @var array
*/
protected $backup_registered_sidebars;
function setUp() {
parent::setUp();
require_once ABSPATH . WPINC . '/class-wp-customize-manager.php';
add_theme_support( 'customize-selective-refresh-widgets' );
$user_id = self::factory()->user->create( array( 'role' => 'administrator' ) );
wp_set_current_user( $user_id );
$GLOBALS['wp_customize'] = new WP_Customize_Manager();
$this->manager = $GLOBALS['wp_customize'];
unset( $GLOBALS['_wp_sidebars_widgets'] ); // Clear out cache set by wp_get_sidebars_widgets().
$sidebars_widgets = wp_get_sidebars_widgets();
$this->assertEqualSets( array( 'wp_inactive_widgets', 'sidebar-1', 'sidebar-2' ), array_keys( wp_get_sidebars_widgets() ) );
$this->assertContains( 'search-2', $sidebars_widgets['sidebar-1'] );
$this->assertContains( 'categories-2', $sidebars_widgets['sidebar-2'] );
$this->assertArrayHasKey( 2, get_option( 'widget_search' ) );
$widget_categories = get_option( 'widget_categories' );
$this->assertArrayHasKey( 2, $widget_categories );
$this->assertSame( '', $widget_categories[2]['title'] );
$this->backup_registered_sidebars = $GLOBALS['wp_registered_sidebars'];
// Reset protected static var on class.
WP_Customize_Setting::reset_aggregated_multidimensionals();
}
function clean_up_global_scope() {
global $wp_widget_factory, $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates;
$wp_registered_sidebars = array();
$wp_registered_widgets = array();
$wp_registered_widget_controls = array();
$wp_registered_widget_updates = array();
$wp_widget_factory->widgets = array();
parent::clean_up_global_scope();
}
function tearDown() {
$this->manager = null;
unset( $GLOBALS['wp_customize'] );
unset( $GLOBALS['wp_scripts'] );
$GLOBALS['wp_registered_sidebars'] = $this->backup_registered_sidebars;
parent::tearDown();
}
function set_customized_post_data( $customized ) {
$_POST['customized'] = wp_slash( wp_json_encode( $customized ) );
if ( $this->manager ) {
foreach ( $customized as $id => $value ) {
$this->manager->set_post_value( $id, $value );
}
}
}
function do_customize_boot_actions() {
$_SERVER['REQUEST_METHOD'] = 'POST';
$_REQUEST['nonce'] = wp_create_nonce( 'preview-customize_' . $this->manager->theme()->get_stylesheet() );
do_action( 'setup_theme' );
do_action( 'after_setup_theme' );
do_action( 'init' );
do_action( 'wp_loaded' );
do_action( 'wp', $GLOBALS['wp'] );
}
/**
* Test WP_Customize_Widgets::__construct()
*/
function test_construct() {
$this->assertInstanceOf( 'WP_Customize_Widgets', $this->manager->widgets );
$this->assertSame( $this->manager, $this->manager->widgets->manager );
}
/**
* Test registering sidebars without an extant sidebars_widgets option.
*
* @see WP_Customize_Widgets::customize_register()
* @see WP_Customize_Widgets::preview_sidebars_widgets()
* @ticket 36660
*/
function test_customize_register_with_deleted_sidebars() {
$sidebar_id = 'sidebar-1';
delete_option( 'sidebars_widgets' );
register_sidebar( array( 'id' => $sidebar_id ) );
$this->manager->widgets->customize_register();
$this->assertSame( array_fill_keys( array( 'wp_inactive_widgets', $sidebar_id ), array() ), wp_get_sidebars_widgets() );
}
/**
* Tests WP_Customize_Widgets::get_selective_refreshable_widgets().
*
* @see WP_Customize_Widgets::get_selective_refreshable_widgets()
*/
function test_get_selective_refreshable_widgets_when_theme_supports() {
global $wp_widget_factory;
add_action( 'widgets_init', array( $this, 'override_search_widget_customize_selective_refresh' ), 90 );
add_theme_support( 'customize-selective-refresh-widgets' );
$this->do_customize_boot_actions();
$selective_refreshable_widgets = $this->manager->widgets->get_selective_refreshable_widgets();
$this->assertInternalType( 'array', $selective_refreshable_widgets );
$this->assertSame( count( $wp_widget_factory->widgets ), count( $selective_refreshable_widgets ) );
$this->assertArrayHasKey( 'text', $selective_refreshable_widgets );
$this->assertTrue( $selective_refreshable_widgets['text'] );
$this->assertArrayHasKey( 'search', $selective_refreshable_widgets );
$this->assertFalse( $selective_refreshable_widgets['search'] );
}
/**
* Tests WP_Customize_Widgets::get_selective_refreshable_widgets().
*
* @see WP_Customize_Widgets::get_selective_refreshable_widgets()
*/
function test_get_selective_refreshable_widgets_when_no_theme_supports() {
add_action( 'widgets_init', array( $this, 'override_search_widget_customize_selective_refresh' ), 90 );
remove_theme_support( 'customize-selective-refresh-widgets' );
$this->do_customize_boot_actions();
$selective_refreshable_widgets = $this->manager->widgets->get_selective_refreshable_widgets();
$this->assertEmpty( $selective_refreshable_widgets );
}
/**
* Hook into widgets_init to override the search widget's customize_selective_refresh widget option.
*
* @see Tests_WP_Customize_Widgets::test_get_selective_refreshable_widgets_when_theme_supports()
* @see Tests_WP_Customize_Widgets::test_get_selective_refreshable_widgets_when_no_theme_supports()
*/
function override_search_widget_customize_selective_refresh() {
global $wp_widget_factory;
$wp_widget_factory->widgets['WP_Widget_Search']->widget_options['customize_selective_refresh'] = false;
}
/**
* Tests WP_Customize_Widgets::is_widget_selective_refreshable().
*
* @see WP_Customize_Widgets::is_widget_selective_refreshable()
*/
function test_is_widget_selective_refreshable() {
add_action( 'widgets_init', array( $this, 'override_search_widget_customize_selective_refresh' ), 90 );
add_theme_support( 'customize-selective-refresh-widgets' );
$this->do_customize_boot_actions();
$this->assertFalse( $this->manager->widgets->is_widget_selective_refreshable( 'search' ) );
$this->assertTrue( $this->manager->widgets->is_widget_selective_refreshable( 'text' ) );
remove_theme_support( 'customize-selective-refresh-widgets' );
$this->assertFalse( $this->manager->widgets->is_widget_selective_refreshable( 'text' ) );
}
/**
* Test WP_Customize_Widgets::register_settings() with selective refresh enabled.
*
* @ticket 30988
* @ticket 36389
*/
function test_register_settings() {
add_theme_support( 'customize-selective-refresh-widgets' );
$raw_widget_customized = array(
'widget_categories[2]' => array(
'title' => 'Taxonomies Brand New Value',
'count' => 0,
'hierarchical' => 0,
'dropdown' => 0,
),
'widget_search[3]' => array(
'title' => 'Not as good as Google!',
),
);
$customized = array();
foreach ( $raw_widget_customized as $setting_id => $instance ) {
$customized[ $setting_id ] = $this->manager->widgets->sanitize_widget_js_instance( $instance );
}
$this->set_customized_post_data( $customized );
$this->do_customize_boot_actions();
$this->assertTrue( is_customize_preview() );
if ( current_theme_supports( 'customize-selective-refresh-widgets' ) ) {
$expected_transport = 'postMessage';
$this->assertNotEmpty( $this->manager->widgets->get_selective_refreshable_widgets() );
} else {
$expected_transport = 'refresh';
$this->assertEmpty( $this->manager->widgets->get_selective_refreshable_widgets() );
}
$setting = $this->manager->get_setting( 'widget_categories[2]' );
$this->assertNotEmpty( $setting, 'Expected setting for pre-existing widget category-2, being customized.' );
$this->assertSame( $expected_transport, $setting->transport );
$setting = $this->manager->get_setting( 'widget_search[2]' );
$this->assertNotEmpty( $setting, 'Expected setting for pre-existing widget search-2, not being customized.' );
$this->assertSame( $expected_transport, $setting->transport );
$setting = $this->manager->get_setting( 'widget_search[3]' );
$this->assertNotEmpty( $setting, 'Expected dynamic setting for non-existing widget search-3, being customized.' );
$this->assertSame( $expected_transport, $setting->transport );
$widget_categories = get_option( 'widget_categories' );
$this->assertSame( $raw_widget_customized['widget_categories[2]'], $widget_categories[2], 'Expected $wp_customize->get_setting(widget_categories[2])->preview() to have been called.' );
}
/**
* Test registering settings without selective refresh enabled.
*
* @ticket 36389
*/
function test_register_settings_without_selective_refresh() {
remove_theme_support( 'customize-selective-refresh-widgets' );
$this->test_register_settings();
}
/**
* Test registering settings with selective refresh enabled at a late after_setup_theme action.
*
* @ticket 36389
*/
function test_register_settings_with_late_theme_support_added() {
remove_theme_support( 'customize-selective-refresh-widgets' );
add_action( 'after_setup_theme', array( $this, 'add_customize_selective_refresh_theme_support' ), 100 );
$this->test_register_settings();
}
/**
* Add customize-selective-refresh-widgets theme support.
*/
function add_customize_selective_refresh_theme_support() {
add_theme_support( 'customize-selective-refresh-widgets' );
}
/**
* Test WP_Customize_Widgets::get_setting_args()
*/
function test_get_setting_args() {
add_theme_support( 'customize-selective-refresh-widgets' );
$this->do_customize_boot_actions();
add_filter( 'widget_customizer_setting_args', array( $this, 'filter_widget_customizer_setting_args' ), 10, 2 );
$default_args = array(
'type' => 'option',
'capability' => 'edit_theme_options',
'transport' => 'refresh',
'default' => array(),
'sanitize_callback' => array( $this->manager->widgets, 'sanitize_widget_instance' ),
'sanitize_js_callback' => array( $this->manager->widgets, 'sanitize_widget_js_instance' ),
);
$args = $this->manager->widgets->get_setting_args( 'widget_foo[2]' );
foreach ( $default_args as $key => $default_value ) {
$this->assertSame( $default_value, $args[ $key ] );
}
$this->assertSame( 'WIDGET_FOO[2]', $args['uppercase_id_set_by_filter'] );
$default_args = array(
'type' => 'option',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'default' => array(),
'sanitize_callback' => array( $this->manager->widgets, 'sanitize_widget_instance' ),
'sanitize_js_callback' => array( $this->manager->widgets, 'sanitize_widget_js_instance' ),
);
$args = $this->manager->widgets->get_setting_args( 'widget_search[2]' );
foreach ( $default_args as $key => $default_value ) {
$this->assertSame( $default_value, $args[ $key ] );
}
remove_theme_support( 'customize-selective-refresh-widgets' );
$args = $this->manager->widgets->get_setting_args( 'widget_search[2]' );
$this->assertSame( 'refresh', $args['transport'] );
add_theme_support( 'customize-selective-refresh-widgets' );
$override_args = array(
'type' => 'theme_mod',
'capability' => 'edit_posts',
'transport' => 'postMessage',
'default' => array( 'title' => 'asd' ),
'sanitize_callback' => '__return_empty_array',
'sanitize_js_callback' => '__return_empty_array',
);
$args = $this->manager->widgets->get_setting_args( 'widget_bar[3]', $override_args );
foreach ( $override_args as $key => $override_value ) {
$this->assertSame( $override_value, $args[ $key ] );
}
$this->assertSame( 'WIDGET_BAR[3]', $args['uppercase_id_set_by_filter'] );
$default_args = array(
'type' => 'option',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'default' => array(),
'sanitize_callback' => array( $this->manager->widgets, 'sanitize_sidebar_widgets' ),
'sanitize_js_callback' => array( $this->manager->widgets, 'sanitize_sidebar_widgets_js_instance' ),
);
$args = $this->manager->widgets->get_setting_args( 'sidebars_widgets[sidebar-1]' );
foreach ( $default_args as $key => $default_value ) {
$this->assertSame( $default_value, $args[ $key ] );
}
$this->assertSame( 'SIDEBARS_WIDGETS[SIDEBAR-1]', $args['uppercase_id_set_by_filter'] );
$override_args = array(
'type' => 'theme_mod',
'capability' => 'edit_posts',
'transport' => 'postMessage',
'default' => array( 'title' => 'asd' ),
'sanitize_callback' => '__return_empty_array',
'sanitize_js_callback' => '__return_empty_array',
);
$args = $this->manager->widgets->get_setting_args( 'sidebars_widgets[sidebar-2]', $override_args );
foreach ( $override_args as $key => $override_value ) {
$this->assertSame( $override_value, $args[ $key ] );
}
$this->assertSame( 'SIDEBARS_WIDGETS[SIDEBAR-2]', $args['uppercase_id_set_by_filter'] );
}
function filter_widget_customizer_setting_args( $args, $id ) {
$args['uppercase_id_set_by_filter'] = strtoupper( $id );
return $args;
}
/**
* Test WP_Customize_Widgets::sanitize_widget_js_instance() and WP_Customize_Widgets::sanitize_widget_instance()
*/
function test_sanitize_widget_js_instance() {
$this->do_customize_boot_actions();
$new_categories_instance = array(
'title' => 'Taxonomies Brand New Value',
'count' => '1',
'hierarchical' => '1',
'dropdown' => '1',
);
$sanitized_for_js = $this->manager->widgets->sanitize_widget_js_instance( $new_categories_instance );
$this->assertArrayHasKey( 'encoded_serialized_instance', $sanitized_for_js );
$this->assertTrue( is_serialized( base64_decode( $sanitized_for_js['encoded_serialized_instance'] ), true ) );
$this->assertSame( $new_categories_instance['title'], $sanitized_for_js['title'] );
$this->assertTrue( $sanitized_for_js['is_widget_customizer_js_value'] );
$this->assertArrayHasKey( 'instance_hash_key', $sanitized_for_js );
$corrupted_sanitized_for_js = $sanitized_for_js;
$corrupted_sanitized_for_js['encoded_serialized_instance'] = base64_encode( serialize( array( 'title' => 'EVIL' ) ) );
$this->assertNull( $this->manager->widgets->sanitize_widget_instance( $corrupted_sanitized_for_js ), 'Expected sanitize_widget_instance to reject corrupted data.' );
$unsanitized_from_js = $this->manager->widgets->sanitize_widget_instance( $sanitized_for_js );
$this->assertSame( $unsanitized_from_js, $new_categories_instance );
}
/**
* Get the widget control args for tests.
*
* @return array
*/
function get_test_widget_control_args() {
global $wp_registered_widgets;
require_once ABSPATH . '/wp-admin/includes/widgets.php';
$widget_id = 'search-2';
$widget = $wp_registered_widgets[ $widget_id ];
$args = array(
'widget_id' => $widget['id'],
'widget_name' => $widget['name'],
);
$args = wp_list_widget_controls_dynamic_sidebar(
array(
0 => $args,
1 => $widget['params'][0],
)
);
return $args;
}
/**
* @see WP_Customize_Widgets::get_widget_control()
*/
function test_get_widget_control() {
$this->do_customize_boot_actions();
$widget_control = $this->manager->widgets->get_widget_control( $this->get_test_widget_control_args() );
$this->assertContains( '<div class="form">', $widget_control );
$this->assertContains( '<div class="widget-content">', $widget_control );
$this->assertContains( '<input type="hidden" name="id_base" class="id_base" value="search"', $widget_control );
$this->assertContains( '<input class="widefat"', $widget_control );
}
/**
* @see WP_Customize_Widgets::get_widget_control_parts()
*/
function test_get_widget_control_parts() {
$this->do_customize_boot_actions();
$widget_control_parts = $this->manager->widgets->get_widget_control_parts( $this->get_test_widget_control_args() );
$this->assertArrayHasKey( 'content', $widget_control_parts );
$this->assertArrayHasKey( 'control', $widget_control_parts );
$this->assertContains( '<div class="form">', $widget_control_parts['control'] );
$this->assertContains( '<div class="widget-content">', $widget_control_parts['control'] );
$this->assertContains( '<input type="hidden" name="id_base" class="id_base" value="search"', $widget_control_parts['control'] );
$this->assertNotContains( '<input class="widefat"', $widget_control_parts['control'] );
$this->assertContains( '<input class="widefat"', $widget_control_parts['content'] );
}
/**
* @see WP_Widget_Form_Customize_Control::json()
*/
function test_wp_widget_form_customize_control_json() {
$this->do_customize_boot_actions();
$control = $this->manager->get_control( 'widget_search[2]' );
$params = $control->json();
$this->assertSame( 'widget_form', $params['type'] );
$this->assertRegExp( '#^<li[^>]+>\s*</li>$#', $params['content'] );
$this->assertRegExp( '#^<div[^>]*class=\'widget\'[^>]*#s', $params['widget_control'] );
$this->assertContains( '<div class="widget-content"></div>', $params['widget_control'] );
$this->assertNotContains( '<input class="widefat"', $params['widget_control'] );
$this->assertContains( '<input class="widefat"', $params['widget_content'] );
$this->assertSame( 'search-2', $params['widget_id'] );
$this->assertSame( 'search', $params['widget_id_base'] );
$this->assertArrayHasKey( 'sidebar_id', $params );
$this->assertArrayHasKey( 'width', $params );
$this->assertArrayHasKey( 'height', $params );
$this->assertInternalType( 'bool', $params['is_wide'] );
}
/**
* @see WP_Customize_Widgets::is_panel_active()
*/
function test_is_panel_active() {
global $wp_registered_sidebars;
$this->do_customize_boot_actions();
$this->assertNotEmpty( $wp_registered_sidebars );
$this->assertTrue( $this->manager->widgets->is_panel_active() );
$this->assertTrue( $this->manager->get_panel( 'widgets' )->active() );
$wp_registered_sidebars = array();
$this->assertFalse( $this->manager->widgets->is_panel_active() );
$this->assertFalse( $this->manager->get_panel( 'widgets' )->active() );
}
/**
* @ticket 34738
* @see WP_Customize_Widgets::call_widget_update()
*/
function test_call_widget_update() {
$widget_number = 2;
$widget_id = "search-{$widget_number}";
$setting_id = "widget_search[{$widget_number}]";
$instance = array(
'title' => 'Buscar',
);
$_POST = wp_slash(
array(
'action' => 'update-widget',
'wp_customize' => 'on',
'nonce' => wp_create_nonce( 'update-widget' ),
'theme' => $this->manager->get_stylesheet(),
'customized' => '{}',
'widget-search' => array(
2 => $instance,
),
'widget-id' => $widget_id,
'id_base' => 'search',
'widget-width' => '250',
'widget-height' => '200',
'widget_number' => strval( $widget_number ),
'multi_number' => '',
'add_new' => '',
)
);
$this->do_customize_boot_actions();
$this->assertArrayNotHasKey( $setting_id, $this->manager->unsanitized_post_values() );
$result = $this->manager->widgets->call_widget_update( $widget_id );
$this->assertInternalType( 'array', $result );
$this->assertArrayHasKey( 'instance', $result );
$this->assertArrayHasKey( 'form', $result );
$this->assertSame( $instance, $result['instance'] );
$this->assertContains( sprintf( 'value="%s"', esc_attr( $instance['title'] ) ), $result['form'] );
$post_values = $this->manager->unsanitized_post_values();
$this->assertArrayHasKey( $setting_id, $post_values );
$post_value = $post_values[ $setting_id ];
$this->assertInternalType( 'array', $post_value );
$this->assertArrayHasKey( 'title', $post_value );
$this->assertArrayHasKey( 'encoded_serialized_instance', $post_value );
$this->assertArrayHasKey( 'instance_hash_key', $post_value );
$this->assertArrayHasKey( 'is_widget_customizer_js_value', $post_value );
$this->assertSame( $post_value, $this->manager->widgets->sanitize_widget_js_instance( $instance ) );
}
/**
* Test WP_Customize_Widgets::customize_dynamic_partial_args().
*
* @see WP_Customize_Widgets::customize_dynamic_partial_args()
*/
function test_customize_dynamic_partial_args() {
do_action( 'customize_register', $this->manager );
$args = apply_filters( 'customize_dynamic_partial_args', false, 'widget[search-2]' );
$this->assertInternalType( 'array', $args );
$this->assertSame( 'widget', $args['type'] );
$this->assertSame( array( $this->manager->widgets, 'render_widget_partial' ), $args['render_callback'] );
$this->assertTrue( $args['container_inclusive'] );
$args = apply_filters( 'customize_dynamic_partial_args', array( 'fallback_refresh' => false ), 'widget[search-2]' );
$this->assertInternalType( 'array', $args );
$this->assertSame( 'widget', $args['type'] );
$this->assertSame( array( $this->manager->widgets, 'render_widget_partial' ), $args['render_callback'] );
$this->assertTrue( $args['container_inclusive'] );
$this->assertFalse( $args['fallback_refresh'] );
remove_theme_support( 'customize-selective-refresh-widgets' );
$args = apply_filters( 'customize_dynamic_partial_args', false, 'widget[search-2]' );
$this->assertFalse( $args );
}
/**
* Test WP_Customize_Widgets::selective_refresh_init().
*
* @see WP_Customize_Widgets::selective_refresh_init()
*/
function test_selective_refresh_init_with_theme_support() {
add_theme_support( 'customize-selective-refresh-widgets' );
$this->manager->widgets->selective_refresh_init();
$this->assertSame( 10, has_action( 'dynamic_sidebar_before', array( $this->manager->widgets, 'start_dynamic_sidebar' ) ) );
$this->assertSame( 10, has_action( 'dynamic_sidebar_after', array( $this->manager->widgets, 'end_dynamic_sidebar' ) ) );
$this->assertSame( 10, has_filter( 'dynamic_sidebar_params', array( $this->manager->widgets, 'filter_dynamic_sidebar_params' ) ) );
$this->assertSame( 10, has_filter( 'wp_kses_allowed_html', array( $this->manager->widgets, 'filter_wp_kses_allowed_data_attributes' ) ) );
}
/**
* Test WP_Customize_Widgets::selective_refresh_init().
*
* @see WP_Customize_Widgets::selective_refresh_init()
*/
function test_selective_refresh_init_without_theme_support() {
remove_theme_support( 'customize-selective-refresh-widgets' );
$this->manager->widgets->selective_refresh_init();
$this->assertFalse( has_action( 'dynamic_sidebar_before', array( $this->manager->widgets, 'start_dynamic_sidebar' ) ) );
$this->assertFalse( has_action( 'dynamic_sidebar_after', array( $this->manager->widgets, 'end_dynamic_sidebar' ) ) );
$this->assertFalse( has_filter( 'dynamic_sidebar_params', array( $this->manager->widgets, 'filter_dynamic_sidebar_params' ) ) );
$this->assertFalse( has_filter( 'wp_kses_allowed_html', array( $this->manager->widgets, 'filter_wp_kses_allowed_data_attributes' ) ) );
}
/**
* Test WP_Customize_Widgets::customize_preview_enqueue().
*
* @see WP_Customize_Widgets::customize_preview_enqueue()
*/
function test_customize_preview_enqueue() {
$this->manager->widgets->customize_preview_enqueue();
$this->assertTrue( wp_script_is( 'customize-preview-widgets', 'enqueued' ) );
$this->assertTrue( wp_style_is( 'customize-preview', 'enqueued' ) );
$script = wp_scripts()->registered['customize-preview-widgets'];
$this->assertContains( 'customize-selective-refresh', $script->deps );
}
/**
* Test extensions to dynamic_sidebar().
*
* @see WP_Customize_Widgets::filter_dynamic_sidebar_params()
* @see WP_Customize_Widgets::start_dynamic_sidebar()
* @see WP_Customize_Widgets::end_dynamic_sidebar()
*/
function test_filter_dynamic_sidebar_params() {
global $wp_registered_sidebars;
register_sidebar(
array(
'id' => 'foo',
)
);
$this->manager->widgets->selective_refresh_init();
$params = array(
array_merge(
$wp_registered_sidebars['foo'],
array(
'widget_id' => 'search-2',
)
),
array(),
);
$this->assertSame( $params, $this->manager->widgets->filter_dynamic_sidebar_params( $params ), 'Expected short-circuit if not called after dynamic_sidebar_before.' );
ob_start();
do_action( 'dynamic_sidebar_before', 'foo' );
$output = ob_get_clean();
$this->assertSame( '<!--dynamic_sidebar_before:foo:1-->', trim( $output ) );
$bad_params = $params;
unset( $bad_params[0]['id'] );
$this->assertSame( $bad_params, $this->manager->widgets->filter_dynamic_sidebar_params( $bad_params ) );
$bad_params = $params;
$bad_params[0]['id'] = 'non-existing';
$this->assertSame( $bad_params, $this->manager->widgets->filter_dynamic_sidebar_params( $bad_params ) );
$bad_params = $params;
$bad_params[0]['before_widget'] = ' <oops>';
$this->assertSame( $bad_params, $this->manager->widgets->filter_dynamic_sidebar_params( $bad_params ) );
$filtered_params = $this->manager->widgets->filter_dynamic_sidebar_params( $params );
$this->assertNotEquals( $params, $filtered_params );
ob_start();
do_action( 'dynamic_sidebar_after', 'foo' );
$output = ob_get_clean();
$this->assertSame( '<!--dynamic_sidebar_after:foo:1-->', trim( $output ) );
$output = wp_kses_post( $filtered_params[0]['before_widget'] );
$this->assertContains( 'data-customize-partial-id="widget[search-2]"', $output );
$this->assertContains( 'data-customize-partial-type="widget"', $output );
}
/**
* Test WP_Customize_Widgets::render_widget_partial() method.
*
* @see WP_Customize_Widgets::render_widget_partial()
*/
function test_render_widget_partial() {
add_theme_support( 'customize-selective-refresh-widgets' );
$this->do_customize_boot_actions();
$this->manager->widgets->selective_refresh_init();
$partial_id = 'widget[search-2]';
$partials = $this->manager->selective_refresh->add_dynamic_partials( array( $partial_id ) );
$this->assertNotEmpty( $partials );
$partial = array_shift( $partials );
$this->assertSame( $partial_id, $partial->id );
$this->assertFalse( $this->manager->widgets->render_widget_partial( $partial, array() ) );
$this->assertFalse( $this->manager->widgets->render_widget_partial( $partial, array( 'sidebar_id' => 'non-existing' ) ) );
$output = $this->manager->widgets->render_widget_partial( $partial, array( 'sidebar_id' => 'sidebar-1' ) );
$this->assertSame( 1, substr_count( $output, 'data-customize-partial-id' ) );
$this->assertSame( 1, substr_count( $output, 'data-customize-partial-type="widget"' ) );
$this->assertContains( ' id="search-2"', $output );
}
/**
* Test deprecated methods.
*/
public function test_deprecated_methods() {
$this->setExpectedDeprecated( 'WP_Customize_Widgets::setup_widget_addition_previews' );
$this->setExpectedDeprecated( 'WP_Customize_Widgets::prepreview_added_sidebars_widgets' );
$this->setExpectedDeprecated( 'WP_Customize_Widgets::prepreview_added_widget_instance' );
$this->setExpectedDeprecated( 'WP_Customize_Widgets::remove_prepreview_filters' );
$this->manager->widgets->setup_widget_addition_previews();
$this->manager->widgets->prepreview_added_sidebars_widgets();
$this->manager->widgets->prepreview_added_widget_instance();
$this->manager->widgets->remove_prepreview_filters();
}
}