/**
  * @param AttributeTypeInterface|OptionAttributeTypeInterface $type
  * @param array $expected
  * @param Attribute|null $attribute
  * @param array $normalizationData
  * @dataProvider attributeTypeDataProvider
  */
 public function testAttributeTypes(AttributeTypeInterface $type, array $expected, Attribute $attribute = null, array $normalizationData = [])
 {
     if (!$attribute) {
         $attribute = new Attribute();
     }
     $this->assertEquals($expected['name'], $type->getName());
     $this->assertEquals($expected['typeField'], $type->getDataTypeField());
     $this->assertEquals($expected['isContainHtml'], $type->isContainHtml());
     $this->assertEquals($expected['isUsedForSearch'], $type->isUsedForSearch());
     $this->assertEquals($expected['isUsedInFilters'], $type->isUsedInFilters());
     $this->assertEquals($expected['formParameters'], $type->getFormParameters($attribute));
     $this->assertEquals($expected['requiredConstraints'], $type->getRequiredConstraints());
     $this->assertEquals($expected['optionalConstraints'], $type->getOptionalConstraints());
     $this->assertEquals($expected['canBeUnique'], $type->canBeUnique());
     $this->assertEquals($expected['canBeRequired'], $type->canBeRequired());
     if (isset($expected['defaultFormParameters'])) {
         $this->assertEquals($expected['defaultFormParameters'], $type->getDefaultValueFormParameters($attribute));
     }
     $testValue = 'test';
     if (!empty($normalizationData['normalize'])) {
         foreach ($normalizationData['normalize'] as $value) {
             $this->assertSame($value['to'], $type->normalize($value['from']));
         }
     } else {
         $this->assertSame($testValue, $type->normalize($testValue));
     }
     if (!empty($normalizationData['denormalize'])) {
         foreach ($normalizationData['denormalize'] as $value) {
             $this->assertSame($value['to'], $type->denormalize($value['from']));
         }
     } else {
         $this->assertSame($testValue, $type->denormalize($testValue));
     }
 }
 /**
  * @param FormBuilderInterface $builder
  * @param Attribute $attribute
  * @param AttributeTypeInterface $attributeType
  */
 protected function addDefaultValueField(FormBuilderInterface $builder, Attribute $attribute, AttributeTypeInterface $attributeType)
 {
     $formParameters = $attributeType->getFormParameters($attribute);
     if (empty($formParameters['type'])) {
         throw new LogicException(sprintf('Form type is required for attribute type "%s"', $attribute->getType()));
     }
     $formType = $formParameters['type'];
     $formOptions = !empty($formParameters['options']) ? $formParameters['options'] : [];
     $requiredConstraints = $attributeType->getRequiredConstraints();
     if ($requiredConstraints) {
         $formOptions['constraints'] = $requiredConstraints;
         $formOptions['validation_groups'] = ['Default'];
     }
     if ($attribute->isLocalized()) {
         $builder->add('defaultValue', LocalizedPropertyType::NAME, ['label' => 'orob2b.attribute.default_values.label', 'required' => false, 'type' => $formType, 'options' => array_merge($formOptions, ['required' => false])]);
     } else {
         $builder->add('defaultValue', $formType, array_merge($formOptions, ['label' => 'orob2b.attribute.default_values.label', 'required' => false]));
     }
     $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
 }