public function testSerializeWithFormAddedMultipleTimes()
{
$form1 = $this->createForm('form1');
$form2 = $this->createForm('form2');
$child1 = $this->createForm('child1');
$form1View = new FormView();
$form2View = new FormView();
$child1View = new FormView();
$child1View->vars['is_selected'] = function ($choice, array $values) {
return in_array($choice, $values, true);
};
$form1->add($child1);
$form2->add($child1);
$form1View->children['child1'] = $child1View;
$form2View->children['child1'] = $child1View;
$this->dataExtractor->expects($this->at(0))
->method('extractConfiguration')
->with($form1)
->will($this->returnValue(array('config' => 'foo')));
$this->dataExtractor->expects($this->at(1))
->method('extractConfiguration')
->with($child1)
->will($this->returnValue(array('config' => 'bar')));
$this->dataExtractor->expects($this->at(2))
->method('extractDefaultData')
->with($form1)
->will($this->returnValue(array('default_data' => 'foo')));
$this->dataExtractor->expects($this->at(3))
->method('extractDefaultData')
->with($child1)
->will($this->returnValue(array('default_data' => 'bar')));
$this->dataExtractor->expects($this->at(4))
->method('extractSubmittedData')
->with($form1)
->will($this->returnValue(array('submitted_data' => 'foo')));
$this->dataExtractor->expects($this->at(5))
->method('extractSubmittedData')
->with($child1)
->will($this->returnValue(array('submitted_data' => 'bar')));
$this->dataExtractor->expects($this->at(6))
->method('extractViewVariables')
->with($form1View)
->will($this->returnValue(array('view_vars' => 'foo')));
$this->dataExtractor->expects($this->at(7))
->method('extractViewVariables')
->with($child1View)
->will($this->returnValue(array('view_vars' => $child1View->vars)));
$this->dataExtractor->expects($this->at(8))
->method('extractConfiguration')
->with($form2)
->will($this->returnValue(array('config' => 'foo')));
$this->dataExtractor->expects($this->at(9))
->method('extractConfiguration')
->with($child1)
->will($this->returnValue(array('config' => 'bar')));
$this->dataExtractor->expects($this->at(10))
->method('extractDefaultData')
->with($form2)
->will($this->returnValue(array('default_data' => 'foo')));
$this->dataExtractor->expects($this->at(11))
->method('extractDefaultData')
->with($child1)
->will($this->returnValue(array('default_data' => 'bar')));
$this->dataExtractor->expects($this->at(12))
->method('extractSubmittedData')
->with($form2)
->will($this->returnValue(array('submitted_data' => 'foo')));
$this->dataExtractor->expects($this->at(13))
->method('extractSubmittedData')
->with($child1)
->will($this->returnValue(array('submitted_data' => 'bar')));
$this->dataExtractor->expects($this->at(14))
->method('extractViewVariables')
->with($form2View)
->will($this->returnValue(array('view_vars' => 'foo')));
$this->dataExtractor->expects($this->at(15))
->method('extractViewVariables')
->with($child1View)
->will($this->returnValue(array('view_vars' => $child1View->vars)));
$this->dataCollector->collectConfiguration($form1);
$this->dataCollector->collectDefaultData($form1);
$this->dataCollector->collectSubmittedData($form1);
$this->dataCollector->collectViewVariables($form1View);
$this->dataCollector->buildFinalFormTree($form1, $form1View);
$this->dataCollector->collectConfiguration($form2);
$this->dataCollector->collectDefaultData($form2);
$this->dataCollector->collectSubmittedData($form2);
$this->dataCollector->collectViewVariables($form2View);
$this->dataCollector->buildFinalFormTree($form2, $form2View);
$this->dataCollector->serialize();
}