/**
  * Executes this filter.
  *
  * @param sfFilterChain A sfFilterChain instance
  */
 public function execute($filterChain)
 {
     // execute next filter
     $filterChain->execute();
     $response = $this->context->getResponse();
     $request = $this->context->getRequest();
     $fillInForm = new sfFillInForm();
     // converters
     foreach ($this->getParameter('converters', array()) as $functionName => $fields) {
         $fillInForm->addConverter($functionName, $fields);
     }
     // skip fields
     $fillInForm->setSkipFields((array) $this->getParameter('skip_fields', array()));
     // types
     $excludeTypes = (array) $this->getParameter('exclude_types', array('hidden', 'password'));
     $checkTypes = (array) $this->getParameter('check_types', array('text', 'checkbox', 'radio', 'password', 'hidden'));
     $fillInForm->setTypes(array_diff($checkTypes, $excludeTypes));
     // fill in
     $method = 'fillIn' . ucfirst(strtolower($this->getParameter('content_type', 'Html')));
     try {
         $content = $fillInForm->{$method}($response->getContent(), $this->getParameter('name'), $this->getParameter('id'), $request->getParameterHolder()->getAll());
         $response->setContent($content);
     } catch (sfException $e) {
         if (sfConfig::get('sf_logging_enabled')) {
             $this->context->getEventDispatcher()->notify(new sfEvent($this, 'application.log', array($e->getMessage(), 'priority' => sfLogger::ERR)));
         }
     }
 }
$xml = simplexml_import_dom($f->fillInDom(clone $dom, null, null, $values));
$t->is(get_input_value($xml, 'hidden_input'), '2', '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'input_text'), 'default_value', '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'empty_input_text'), 'input text', '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'password'), 'mypassword', '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'input_checkbox', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'input_checkbox_not_checked', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled');
$t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array('content'), '->setSkipFields() allows to prevent some fields to be filled');
$t->is($xml->xpath('//form[@name="form1"]/select[@name="select"]/option[@selected="selected"]'), array('first'), '->setSkipFields() allows to prevent some fields to be filled');
$t->is($xml->xpath('//form[@name="form1"]/select[@name="select_multiple"]/option[@selected="selected"]'), array('selected', 'last'), '->setSkipFields() allows to prevent some fields to be filled');
$t->is(get_input_value($xml, 'article[title]'), 'title', '->setSkipFields() allows to prevent some fields to be filled');
$t->is($xml->xpath('//form[@name="form1"]/select[@name="article[category]"]/option[@selected="selected"]'), array(1, 2), '->setSkipFields() allows to prevent some fields to be filled');
// ->addconverter()
$t->diag('->addConverter()');
$f = new sfFillInForm();
$f->addConverter('str_rot13', array('input_text', 'textarea'));
$xml = simplexml_import_dom($f->fillInDom(clone $dom, null, null, $values));
$t->is(get_input_value($xml, 'input_text'), str_rot13('my input text'), '->addConverter() register a callable to be called for each value');
$t->is(get_input_value($xml, 'empty_input_text'), 'input text', '->addConverter() register a callable to be called for each value');
$t->is(get_input_value($xml, 'input_checkbox', 'checked'), '', '->addConverter() register a callable to be called for each value');
$t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array(str_rot13('my content')), '->addConverter() register a callable to be called for each value');
function get_input_value($xml, $name, $attribute = 'value', $form = null)
{
    $value = "";
    $xpath = ($form ? '//form[@name="' . $form . '"]' : '//form') . sprintf('/input[@name="%s"]', $name);
    $values = $xml->xpath($xpath);
    if (count($values) > 1 || substr($name, -2) == '[]') {
        foreach ($values as $val) {
            $value[] = $val[$attribute];
        }
    } else {