/**
  * Populates FormBuilder
  *
  * @param FormBuilderInterface $fb
  * @param object $model
  * @param string $form view to generate
  * @param array $context
  */
 public function populateFormBuilder(FormBuilderInterface $fb, $model, $form = 'default', $context = array())
 {
     if ($this->needsSorting) {
         $this->sortRegisteredServices();
     }
     $fields = null;
     foreach ($this->sortedFormViewProviders as $provider) {
         if ($provider->supports($form, $model, $context)) {
             $fields = $provider->getFields($model, $context);
             break;
         }
     }
     if ($fields === null) {
         $fields = $this->getFields($model, $form);
     }
     $fields = $this->normalizeFields($fields);
     $configuration = $this->getFieldsConfiguration($model, $fields);
     foreach ($this->sortedFormConfigurationModifiers as $modifier) {
         if ($modifier->supports($model, $configuration, $context)) {
             $configuration = $modifier->modify($model, $configuration, $context);
         }
     }
     foreach ($configuration as $field => $options) {
         $type = null;
         if (isset($options['type'])) {
             $type = FieldTypeMapper::map($options['type']);
             unset($options['type']);
         }
         foreach ($this->sortedFormFieldResolvers as $resolver) {
             if ($resolver->supports($model, $field, $type, $options, $context)) {
                 $fb->add($resolver->getFormField($fb, $field, $type, $options, $context));
                 continue 2;
             }
         }
         $fb->add($field, $type, $options);
     }
 }
 /**
  * @dataProvider dataProvider
  * @param $actual
  * @param $expected
  */
 public function testMap($actual, $expected)
 {
     $this->assertEquals(FieldTypeMapper::map($actual), $expected);
 }