/**
  * Test invoke & render
  */
 public function testInvokeAndRender()
 {
     $checkboxes = new MultiCheckboxGroup('test_multicheckboxgroup', array('empty_option' => 'empty', 'options' => array('value 1' => 'label 1', 'label 2' => array('label' => 'label 2', 'value' => 'value 2', 'checked' => true), 'label 3' => array('label' => 'label 3', 'options' => array('value 3.1' => 'label 3.1', 'label 3.2' => array('label' => 'label 3.2', 'value' => 'value 3.2', 'disabled' => true)), 'data-foo' => 'baz'))));
     $translator = $this->getMock('Zend\\I18n\\Translator\\Translator');
     $translator->expects($this->at(0))->method('translate')->with('empty', 'default')->will($this->returnValue('empty at default'));
     $translator->expects($this->at(1))->method('translate')->with('label 1', 'default')->will($this->returnValue('label 1 at default'));
     $translator->expects($this->at(2))->method('translate')->with('label 2', 'default')->will($this->returnValue('label 2 at default'));
     $translator->expects($this->at(3))->method('translate')->with('label 3', 'default')->will($this->returnValue('label 3 at default'));
     $translator->expects($this->at(4))->method('translate')->with('label 3.1', 'default')->will($this->returnValue('label 3.1 at default'));
     $translator->expects($this->at(5))->method('translate')->with('label 3.2', 'default')->will($this->returnValue('label 3.2 at default'));
     $helper = $this->helper;
     $helper->setTranslator($translator);
     $checkboxes->setAttribute('data-foo', 'bar')->setValue(array('value 1', 'value 2'))->setTranslatorTextDomain('default');
     $rendered = $helper($checkboxes);
     $this->assertTag(array('tag' => 'input', 'attributes' => array('type' => 'hidden', 'name' => 'test_multicheckboxgroup', 'value' => ''), 'parent' => array('attributes' => array('data-foo' => 'bar'))), $rendered);
     $this->assertTag(array('tag' => 'label', 'content' => 'empty at default', 'parent' => array('attributes' => array('data-foo' => 'bar')), 'child' => array('tag' => 'input', 'attributes' => array('type' => 'checkbox', 'name' => 'test_multicheckboxgroup[]', 'value' => ''))), $rendered);
     $this->assertTag(array('tag' => 'label', 'content' => 'label 1 at default', 'parent' => array('attributes' => array('data-foo' => 'bar')), 'child' => array('tag' => 'input', 'attributes' => array('type' => 'checkbox', 'name' => 'test_multicheckboxgroup[]', 'value' => 'value 1', 'checked' => 'checked'))), $rendered);
     $this->assertTag(array('tag' => 'label', 'content' => 'label 2 at default', 'parent' => array('attributes' => array('data-foo' => 'bar')), 'child' => array('tag' => 'input', 'attributes' => array('type' => 'checkbox', 'name' => 'test_multicheckboxgroup[]', 'value' => 'value 2', 'checked' => 'checked'))), $rendered);
     $this->assertTag($fieldsetMatcher = array('tag' => 'fieldset', 'parent' => array('attributes' => array('data-foo' => 'bar')), 'child' => array('tag' => 'legend', 'content' => 'label 3 at default'), 'attributes' => array('data-foo' => 'baz')), $rendered);
     $this->assertTag(array('tag' => 'label', 'content' => 'label 3.1 at default', 'parent' => $fieldsetMatcher, 'child' => array('tag' => 'input', 'attributes' => array('type' => 'checkbox', 'name' => 'test_multicheckboxgroup[]', 'value' => 'value 3.1'))), $rendered);
     $this->assertTag(array('tag' => 'label', 'content' => 'label 3.2 at default', 'parent' => $fieldsetMatcher, 'child' => array('tag' => 'input', 'attributes' => array('type' => 'checkbox', 'name' => 'test_multicheckboxgroup[]', 'value' => 'value 3.2'))), $rendered);
 }
 /**
  * Sets checkboxes order by selection
  * @param mixed $value
  */
 public function setValue($value)
 {
     if (is_array($value)) {
         $defaultOptionsList = $this->getValueOptions();
         $sortedOptionsList = array();
         foreach ($value as $optionKey) {
             if (key_exists($optionKey, $defaultOptionsList)) {
                 $sortedOptionsList[$optionKey] = $defaultOptionsList[$optionKey];
                 unset($defaultOptionsList[$optionKey]);
             }
         }
         $sortedOptionsList = array_merge($sortedOptionsList, $defaultOptionsList);
         $this->setValueOptions($sortedOptionsList);
     }
     parent::setValue($value);
 }