added validation support for optgroups #2331

Merged
merged 2 commits into from Sep 13, 2012
@@ -175,9 +175,19 @@ protected function getValueOptionsValues()
$values = array();
$options = $this->getValueOptions();
foreach ($options as $key => $optionSpec) {
- $value = (is_array($optionSpec)) ? $optionSpec['value'] : $key;
- $values[] = $value;
+ if(is_array($optionSpec) && array_key_exists('options', $optionSpec)){
@weierophinney

weierophinney Sep 13, 2012

Owner

Add whitespace between if and opening paren, and between closing paren and opening brace.

+ foreach ($optionSpec['options'] as $nestedKey => $nestedOptionSpec) {
+ $values[] = $this->getOptionValue($nestedKey, $nestedOptionSpec);
+ }
+ }else{
@weierophinney

weierophinney Sep 13, 2012

Owner

Add whitespace around the else keyword, please.

+ $values[] = $this->getOptionValue($key, $optionSpec);
+ }
}
return $values;
}
+
+ private function getOptionValue($key, $optionSpec)
@weierophinney

weierophinney Sep 13, 2012

Owner

protected visibility, please.

+ {
+ return is_array($optionSpec) ? $optionSpec['value'] : $key;
+ }
}
@@ -49,6 +49,41 @@ public function testProvidesInputSpecificationForSingleSelect()
}
}
+ public function testValidateWorksForNestedSelectElementWithSimpleNaming()
+ {
+ $element = new SelectElement();
+ $element->setValueOptions(array(
+ array('label' => 'group 1', 'options' => array(
+ 'Option 1' => 'Label 1',
+ 'Option 2' => 'Label 2',
+ 'Option 3' => 'Label 2',
+ ))));
+
+ $inputSpec = $element->getInputSpecification();
+ $inArrayValidator = $inputSpec['validators'][0];
+
+ $this->assertTrue($inArrayValidator->isValid('Option 1'));
+ $this->assertFalse($inArrayValidator->isValid('Option 5'));
+ }
+
+ public function testValidateWorksForNestedSelectElementWithExplicitNaming()
+ {
+ $element = new SelectElement();
+ $element->setValueOptions(array(
+ array('label' => 'group 1', 'options' => array(
+ array('value' => 'Option 1', 'label'=> 'Label 1'),
+ array('value' => 'Option 2', 'label'=> 'Label 2'),
+ array('value' => 'Option 3', 'label'=> 'Label 3'),
+ ))));
+
+ $inputSpec = $element->getInputSpecification();
+ $inArrayValidator = $inputSpec['validators'][0];
+
+ $this->assertTrue($inArrayValidator->isValid('Option 1'));
+ $this->assertTrue($inArrayValidator->isValid('Option 2'));
+ $this->assertTrue($inArrayValidator->isValid('Option 3'));
+ $this->assertFalse($inArrayValidator->isValid('Option 5'));
+ }
public function testProvidesInputSpecificationForMultipleSelect()
{
$element = new SelectElement();
@@ -137,4 +172,4 @@ public function testDeprecateOptionsInAttributes()
));
$this->assertEquals($valueOptions, $element->getValueOptions());
}
-}
+}