123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- <?php
- namespace Symfony\Tests\Component\Form;
- use Symfony\Component\Form\ChoiceField;
- class ChoiceFieldTest extends \PHPUnit_Framework_TestCase
- {
- protected $choices = array(
- 'a' => 'Bernhard',
- 'b' => 'Fabien',
- 'c' => 'Kris',
- 'd' => 'Jon',
- 'e' => 'Roman',
- );
- protected $preferredChoices = array('d', 'e');
- protected $groupedChoices = array(
- 'Symfony' => array(
- 'a' => 'Bernhard',
- 'b' => 'Fabien',
- 'c' => 'Kris',
- ),
- 'Doctrine' => array(
- 'd' => 'Jon',
- 'e' => 'Roman',
- )
- );
- protected $numericChoices = array(
- 0 => 'Bernhard',
- 1 => 'Fabien',
- 2 => 'Kris',
- 3 => 'Jon',
- 4 => 'Roman',
- );
- public function testConfigureChoicesWithArrayObject()
- {
- $choices = new \ArrayObject($this->choices);
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $choices,
- 'preferred_choices' => $this->preferredChoices,
- ));
- $this->assertEquals($this->choices, $choices->getArrayCopy());
- }
- public function testBindSingleNonExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- ));
- $field->bind('b');
- $this->assertEquals('b', $field->getData());
- $this->assertEquals('b', $field->getDisplayedData());
- }
- public function testRenderSingleNonExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- ));
- $field->setData('b');
- $html = <<<EOF
- <select id="name" name="name" class="foobar">
- <option value="a">Bernhard</option>
- <option value="b" selected="selected">Fabien</option>
- <option value="c">Kris</option>
- <option value="d">Jon</option>
- <option value="e">Roman</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render(array(
- 'class' => 'foobar',
- )));
- }
- public function testRenderSingleNonExpanded_translateChoices()
- {
- $translator = $this->getMock('Symfony\Component\I18N\TranslatorInterface');
- $translator->expects($this->any())
- ->method('translate')
- ->will($this->returnCallback(function($text) {
- return 'translated['.$text.']';
- }));
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- 'translate_choices' => true,
- ));
- $field->setTranslator($translator);
- $field->setData('b');
- $html = <<<EOF
- <select id="name" name="name" class="foobar">
- <option value="a">translated[Bernhard]</option>
- <option value="b" selected="selected">translated[Fabien]</option>
- <option value="c">translated[Kris]</option>
- <option value="d">translated[Jon]</option>
- <option value="e">translated[Roman]</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render(array(
- 'class' => 'foobar',
- )));
- }
- public function testRenderSingleNonExpanded_disabled()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- 'disabled' => true,
- ));
- $html = <<<EOF
- <select id="name" name="name" disabled="disabled">
- <option value="a">Bernhard</option>
- <option value="b">Fabien</option>
- <option value="c">Kris</option>
- <option value="d">Jon</option>
- <option value="e">Roman</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testRenderSingleNonExpandedWithPreferred()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- 'preferred_choices' => $this->preferredChoices,
- 'separator' => '---',
- ));
- $field->setData('d');
- $html = <<<EOF
- <select id="name" name="name">
- <option value="d" selected="selected">Jon</option>
- <option value="e">Roman</option>
- <option disabled="disabled">---</option>
- <option value="a">Bernhard</option>
- <option value="b">Fabien</option>
- <option value="c">Kris</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testRenderSingleNonExpandedWithGroups()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->groupedChoices,
- ));
- $html = <<<EOF
- <select id="name" name="name">
- <optgroup label="Symfony">
- <option value="a">Bernhard</option>
- <option value="b">Fabien</option>
- <option value="c">Kris</option>
- </optgroup>
- <optgroup label="Doctrine">
- <option value="d">Jon</option>
- <option value="e">Roman</option>
- </optgroup>
- </select>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testRenderSingleNonExpandedNonRequired()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => false,
- 'choices' => $this->choices,
- 'empty_value' => 'empty',
- ));
- $field->setData(null);
- $field->setRequired(false);
- $html = <<<EOF
- <select id="name" name="name">
- <option value="" selected="selected">empty</option>
- <option value="a">Bernhard</option>
- <option value="b">Fabien</option>
- <option value="c">Kris</option>
- <option value="d">Jon</option>
- <option value="e">Roman</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testBindMultipleNonExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => true,
- 'expanded' => false,
- 'choices' => $this->choices,
- ));
- $field->bind(array('a', 'b'));
- $this->assertEquals(array('a', 'b'), $field->getData());
- $this->assertEquals(array('a', 'b'), $field->getDisplayedData());
- }
- public function testRenderMultipleNonExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => true,
- 'expanded' => false,
- 'choices' => $this->choices,
- ));
- $field->setData(array('a', 'b'));
- $html = <<<EOF
- <select id="name" name="name[]" multiple="multiple">
- <option value="a" selected="selected">Bernhard</option>
- <option value="b" selected="selected">Fabien</option>
- <option value="c">Kris</option>
- <option value="d">Jon</option>
- <option value="e">Roman</option>
- </select>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testBindSingleExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $this->choices,
- ));
- $field->bind('b');
- $this->assertSame('b', $field->getData());
- $this->assertSame(null, $field['a']->getData());
- $this->assertSame(true, $field['b']->getData());
- $this->assertSame(null, $field['c']->getData());
- $this->assertSame(null, $field['d']->getData());
- $this->assertSame(null, $field['e']->getData());
- $this->assertSame('', $field['a']->getDisplayedData());
- $this->assertSame('1', $field['b']->getDisplayedData());
- $this->assertSame('', $field['c']->getDisplayedData());
- $this->assertSame('', $field['d']->getDisplayedData());
- $this->assertSame('', $field['e']->getDisplayedData());
- $this->assertSame(array('a' => '', 'b' => '1', 'c' => '', 'd' => '', 'e' => ''), $field->getDisplayedData());
- }
- public function testBindSingleExpandedNumericChoices()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $this->numericChoices,
- ));
- $field->bind('1');
- $this->assertSame(1, $field->getData());
- $this->assertSame(null, $field[0]->getData());
- $this->assertSame(true, $field[1]->getData());
- $this->assertSame(null, $field[2]->getData());
- $this->assertSame(null, $field[3]->getData());
- $this->assertSame(null, $field[4]->getData());
- $this->assertSame('', $field[0]->getDisplayedData());
- $this->assertSame('1', $field[1]->getDisplayedData());
- $this->assertSame('', $field[2]->getDisplayedData());
- $this->assertSame('', $field[3]->getDisplayedData());
- $this->assertSame('', $field[4]->getDisplayedData());
- $this->assertSame(array(0 => '', 1 => '1', 2 => '', 3 => '', 4 => ''), $field->getDisplayedData());
- }
- public function testRenderSingleExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $this->choices,
- ));
- $field->setData('b');
- $html = <<<EOF
- <input id="name_a" name="name" value="a" type="radio" /> <label for="name_a">Bernhard</label>
- <input id="name_b" name="name" value="b" checked="checked" type="radio" /> <label for="name_b">Fabien</label>
- <input id="name_c" name="name" value="c" type="radio" /> <label for="name_c">Kris</label>
- <input id="name_d" name="name" value="d" type="radio" /> <label for="name_d">Jon</label>
- <input id="name_e" name="name" value="e" type="radio" /> <label for="name_e">Roman</label>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testRenderSingleExpanded_translateChoices()
- {
- $translator = $this->getMock('Symfony\Component\I18N\TranslatorInterface');
- $translator->expects($this->any())
- ->method('translate')
- ->will($this->returnCallback(function($text) {
- return 'translated['.$text.']';
- }));
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $this->choices,
- 'translate_choices' => true,
- ));
- $field->setTranslator($translator);
- $field->setData('b');
- $html = <<<EOF
- <input id="name_a" name="name" value="a" type="radio" /> <label for="name_a">translated[Bernhard]</label>
- <input id="name_b" name="name" value="b" checked="checked" type="radio" /> <label for="name_b">translated[Fabien]</label>
- <input id="name_c" name="name" value="c" type="radio" /> <label for="name_c">translated[Kris]</label>
- <input id="name_d" name="name" value="d" type="radio" /> <label for="name_d">translated[Jon]</label>
- <input id="name_e" name="name" value="e" type="radio" /> <label for="name_e">translated[Roman]</label>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testRenderSingleExpandedWithPreferred()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => false,
- 'expanded' => true,
- 'choices' => $this->choices,
- 'preferred_choices' => $this->preferredChoices,
- ));
- $html = <<<EOF
- <input id="name_d" name="name" value="d" type="radio" /> <label for="name_d">Jon</label>
- <input id="name_e" name="name" value="e" type="radio" /> <label for="name_e">Roman</label>
- <input id="name_a" name="name" value="a" type="radio" /> <label for="name_a">Bernhard</label>
- <input id="name_b" name="name" value="b" type="radio" /> <label for="name_b">Fabien</label>
- <input id="name_c" name="name" value="c" type="radio" /> <label for="name_c">Kris</label>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- public function testBindMultipleExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => true,
- 'expanded' => true,
- 'choices' => $this->choices,
- ));
- $field->bind(array('a' => 'a', 'b' => 'b'));
- $this->assertSame(array('a', 'b'), $field->getData());
- $this->assertSame(true, $field['a']->getData());
- $this->assertSame(true, $field['b']->getData());
- $this->assertSame(null, $field['c']->getData());
- $this->assertSame(null, $field['d']->getData());
- $this->assertSame(null, $field['e']->getData());
- $this->assertSame('1', $field['a']->getDisplayedData());
- $this->assertSame('1', $field['b']->getDisplayedData());
- $this->assertSame('', $field['c']->getDisplayedData());
- $this->assertSame('', $field['d']->getDisplayedData());
- $this->assertSame('', $field['e']->getDisplayedData());
- $this->assertSame(array('a' => '1', 'b' => '1', 'c' => '', 'd' => '', 'e' => ''), $field->getDisplayedData());
- }
- public function testBindMultipleExpandedNumericChoices()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => true,
- 'expanded' => true,
- 'choices' => $this->numericChoices,
- ));
- $field->bind(array(1 => 1, 2 => 2));
- $this->assertSame(array(1, 2), $field->getData());
- $this->assertSame(null, $field[0]->getData());
- $this->assertSame(true, $field[1]->getData());
- $this->assertSame(true, $field[2]->getData());
- $this->assertSame(null, $field[3]->getData());
- $this->assertSame(null, $field[4]->getData());
- $this->assertSame('', $field[0]->getDisplayedData());
- $this->assertSame('1', $field[1]->getDisplayedData());
- $this->assertSame('1', $field[2]->getDisplayedData());
- $this->assertSame('', $field[3]->getDisplayedData());
- $this->assertSame('', $field[4]->getDisplayedData());
- $this->assertSame(array(0 => '', 1 => '1', 2 => '1', 3 => '', 4 => ''), $field->getDisplayedData());
- }
- public function testRenderMultipleExpanded()
- {
- $field = new ChoiceField('name', array(
- 'multiple' => true,
- 'expanded' => true,
- 'choices' => $this->choices,
- ));
- $field->setData(array('a', 'b'));
- $html = <<<EOF
- <input id="name_a" name="name[a]" value="a" checked="checked" type="checkbox" /> <label for="name_a">Bernhard</label>
- <input id="name_b" name="name[b]" value="b" checked="checked" type="checkbox" /> <label for="name_b">Fabien</label>
- <input id="name_c" name="name[c]" value="c" type="checkbox" /> <label for="name_c">Kris</label>
- <input id="name_d" name="name[d]" value="d" type="checkbox" /> <label for="name_d">Jon</label>
- <input id="name_e" name="name[e]" value="e" type="checkbox" /> <label for="name_e">Roman</label>
- EOF;
- $this->assertEquals($html, $field->render());
- }
- }
|