/**
* Test WP_Customize_Manager::validate_setting_values().
*
* @see WP_Customize_Manager::validate_setting_values()
*/
function test_validate_setting_values()
{
$default_value = 'foo_default';
$setting = $this->manager->add_setting('foo', array('validate_callback' => array($this, 'filter_customize_validate_foo'), 'sanitize_callback' => array($this, 'filter_customize_sanitize_foo')));
$post_value = 'bar';
$this->manager->set_post_value('foo', $post_value);
$this->assertEmpty($this->manager->validate_setting_values($this->manager->unsanitized_post_values()));
$this->manager->set_post_value('foo', 'return_wp_error_in_sanitize');
$invalid_settings = $this->manager->validate_setting_values($this->manager->unsanitized_post_values());
$this->assertCount(1, $invalid_settings);
$this->assertArrayHasKey($setting->id, $invalid_settings);
$this->assertInstanceOf('WP_Error', $invalid_settings[$setting->id]);
$error = $invalid_settings[$setting->id];
$this->assertEquals('invalid_value_in_sanitize', $error->get_error_code());
$this->assertEquals(array('source' => 'filter_customize_sanitize_foo'), $error->get_error_data());
$this->manager->set_post_value('foo', 'return_null_in_sanitize');
$invalid_settings = $this->manager->validate_setting_values($this->manager->unsanitized_post_values());
$this->assertCount(1, $invalid_settings);
$this->assertArrayHasKey($setting->id, $invalid_settings);
$this->assertInstanceOf('WP_Error', $invalid_settings[$setting->id]);
$this->assertNull($invalid_settings[$setting->id]->get_error_data());
$post_value = '<script>evil</script>';
$this->manager->set_post_value('foo', $post_value);
$invalid_settings = $this->manager->validate_setting_values($this->manager->unsanitized_post_values());
$this->assertCount(1, $invalid_settings);
$this->assertArrayHasKey($setting->id, $invalid_settings);
$this->assertInstanceOf('WP_Error', $invalid_settings[$setting->id]);
$error = $invalid_settings[$setting->id];
$this->assertEquals('invalid_value_in_validate', $error->get_error_code());
$this->assertEquals(array('source' => 'filter_customize_validate_foo'), $error->get_error_data());
}