Skip to content

Commit

Permalink
Merge pull request #11 from alanpoulain/master
Browse files Browse the repository at this point in the history
Added key_options option
  • Loading branch information
Burgov committed Apr 3, 2015
2 parents 80bf5a4 + df56e6f commit 8bc3cc5
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 10 deletions.
12 changes: 6 additions & 6 deletions Form/Type/KeyValueRowType.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ class KeyValueRowType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
{
if (null === $options['allowed_keys']) {
$builder->add('key', 'text', array(
));
$builder->add('key', 'text', $options['key_options']
);
} else {
$builder->add('key', 'choice', array(
$builder->add('key', 'choice', array_merge(array(
'choice_list' => new SimpleChoiceList($options['allowed_keys'])
), $options['key_options']
));
}

Expand All @@ -32,13 +33,12 @@ public function getName()
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'key_options' => array(),
'value_options' => array(),
'allowed_keys' => null
));

$resolver->setRequired(array('value_type'));
$resolver->setAllowedTypes(array('allowed_keys' => array('null', 'array')));
}


}
}
2 changes: 2 additions & 0 deletions Form/Type/KeyValueType.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,14 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
'type' => 'burgov_key_value_row',
'allow_add' => true,
'allow_delete' => true,
'key_options' => array(),
'value_options' => array(),
'allowed_keys' => null,
'use_container_object' => false,
'options' => function(Options $options) {
return array(
'value_type' => $options['value_type'],
'key_options' => $options['key_options'],
'value_options' => $options['value_options'],
'allowed_keys' => $options['allowed_keys']
);
Expand Down
31 changes: 27 additions & 4 deletions Tests/Form/Type/KeyValueTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,21 @@ public function testSubmitValidData()
'key3' => '1',
);

$builder = $this->factory->createBuilder('burgov_key_value', $originalData, array('value_type' => 'text'));
$builder = $this->factory->createBuilder('burgov_key_value', $originalData, array(
'value_type' => 'text',
'key_options' => array('label' => 'label_key'),
'value_options' => array('label' => 'label_value')));

$form = $builder->getForm();

$this->assertFormTypes(array('text', 'text'), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$form->submit($submitData);
$this->assertTrue($form->isValid(), $form->getErrorsAsString());

$this->assertFormTypes(array('text', 'text', 'text'), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$this->assertSame($expectedData, $form->getData());
}
Expand All @@ -67,13 +72,18 @@ public function testWithChoiceType()
$obj2->id = 2;
$obj2->name = 'choice2';

$builder = $this->factory->createBuilder('burgov_key_value', null, array('value_type' => 'choice', 'value_options' => array(
'choice_list' => new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id')
)));
$builder = $this->factory->createBuilder('burgov_key_value', null, array(
'value_type' => 'choice',
'key_options' => array('label' => 'label_key'),
'value_options' => array(
'choice_list' => new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id'),
'label' => 'label_value'
)));

$form = $builder->getForm();

$this->assertFormTypes(array(), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$form->submit(array(
array(
Expand All @@ -87,6 +97,7 @@ public function testWithChoiceType()
));

$this->assertFormTypes(array('choice', 'choice'), $form);
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);

$this->assertTrue($form->isValid());

Expand All @@ -100,6 +111,18 @@ private function assertFormTypes(array $types, $form)
$this->assertEquals($type, $form->get($key)->get('value')->getConfig()->getType()->getInnerType()->getName());
}
}

private function assertFormOptions(array $options, $form)
{
for ($i = 0; $i < count($form); $i++) {
foreach ($options[0] as $option => $optionValue) {
$this->assertEquals($optionValue, $form->get($i)->get('key')->getConfig()->getOption($option));
}
foreach ($options[1] as $option => $optionValue) {
$this->assertEquals($optionValue, $form->get($i)->get('value')->getConfig()->getOption($option));
}
}
}
}

class ConcreteExtension extends AbstractExtension
Expand Down

0 comments on commit 8bc3cc5

Please sign in to comment.