Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Form] Improved test coverage of ChoiceList classes
- Loading branch information
Showing
5 changed files
with
486 additions
and
316 deletions.
There are no files selected for viewing
297 changes: 297 additions & 0 deletions
297
src/Symfony/Component/Form/Tests/Extension/Core/ChoiceList/AbstractChoiceListTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,297 @@ | ||
<?php | ||
|
||
/* | ||
* This file is part of the Symfony package. | ||
* | ||
* (c) Fabien Potencier <fabien@symfony.com> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
namespace Symfony\Component\Form\Tests\Extension\Core\ChoiceList; | ||
|
||
/** | ||
* @author Bernhard Schussek <bschussek@gmail.com> | ||
*/ | ||
abstract class AbstractChoiceListTest extends \PHPUnit_Framework_TestCase | ||
{ | ||
/** | ||
* @var \Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface | ||
*/ | ||
protected $list; | ||
|
||
/** | ||
* @var array | ||
*/ | ||
protected $choices; | ||
|
||
/** | ||
* @var array | ||
*/ | ||
protected $values; | ||
|
||
/** | ||
* @var array | ||
*/ | ||
protected $indices; | ||
|
||
/** | ||
* @var array | ||
*/ | ||
protected $labels; | ||
|
||
/** | ||
* @var mixed | ||
*/ | ||
protected $choice1; | ||
|
||
/** | ||
* @var mixed | ||
*/ | ||
protected $choice2; | ||
|
||
/** | ||
* @var mixed | ||
*/ | ||
protected $choice3; | ||
|
||
/** | ||
* @var mixed | ||
*/ | ||
protected $choice4; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $value1; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $value2; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $value3; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $value4; | ||
|
||
/** | ||
* @var int|string | ||
*/ | ||
protected $index1; | ||
|
||
/** | ||
* @var int|string | ||
*/ | ||
protected $index2; | ||
|
||
/** | ||
* @var int|string | ||
*/ | ||
protected $index3; | ||
|
||
/** | ||
* @var int|string | ||
*/ | ||
protected $index4; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $label1; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $label2; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $label3; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $label4; | ||
|
||
protected function setUp() | ||
{ | ||
parent::setUp(); | ||
|
||
$this->list = $this->createChoiceList(); | ||
|
||
$this->choices = $this->getChoices(); | ||
$this->indices = $this->getIndices(); | ||
$this->values = $this->getValues(); | ||
$this->labels = $this->getLabels(); | ||
|
||
// allow access to the individual entries without relying on their indices | ||
reset($this->choices); | ||
reset($this->indices); | ||
reset($this->values); | ||
reset($this->labels); | ||
|
||
for ($i = 1; $i <= 4; ++$i) { | ||
$this->{'choice'.$i} = current($this->choices); | ||
$this->{'index'.$i} = current($this->indices); | ||
$this->{'value'.$i} = current($this->values); | ||
$this->{'label'.$i} = current($this->labels); | ||
|
||
next($this->choices); | ||
next($this->indices); | ||
next($this->values); | ||
next($this->labels); | ||
} | ||
} | ||
|
||
public function testGetChoices() | ||
{ | ||
$this->assertSame($this->choices, $this->list->getChoices()); | ||
} | ||
|
||
public function testGetValues() | ||
{ | ||
$this->assertSame($this->values, $this->list->getValues()); | ||
} | ||
|
||
public function testGetIndicesForChoices() | ||
{ | ||
$choices = array($this->choice1, $this->choice2); | ||
$this->assertSame(array($this->index1, $this->index2), $this->list->getIndicesForChoices($choices)); | ||
} | ||
|
||
public function testGetIndicesForChoicesPreservesKeys() | ||
{ | ||
$choices = array(5 => $this->choice1, 8 => $this->choice2); | ||
$this->assertSame(array(5 => $this->index1, 8 => $this->index2), $this->list->getIndicesForChoices($choices)); | ||
} | ||
|
||
public function testGetIndicesForChoicesPreservesOrder() | ||
{ | ||
$choices = array($this->choice2, $this->choice1); | ||
$this->assertSame(array($this->index2, $this->index1), $this->list->getIndicesForChoices($choices)); | ||
} | ||
|
||
public function testGetIndicesForChoicesIgnoresNonExistingChoices() | ||
{ | ||
$choices = array($this->choice1, $this->choice2, 'foobar'); | ||
$this->assertSame(array($this->index1, $this->index2), $this->list->getIndicesForChoices($choices)); | ||
} | ||
|
||
public function testGetIndicesForChoicesEmpty() | ||
{ | ||
$this->assertSame(array(), $this->list->getIndicesForChoices(array())); | ||
} | ||
|
||
public function testGetIndicesForValues() | ||
{ | ||
// values and indices are always the same | ||
$values = array($this->value1, $this->value2); | ||
$this->assertSame(array($this->index1, $this->index2), $this->list->getIndicesForValues($values)); | ||
} | ||
|
||
public function testGetIndicesForValuesPreservesKeys() | ||
{ | ||
// values and indices are always the same | ||
$values = array(5 => $this->value1, 8 => $this->value2); | ||
$this->assertSame(array(5 => $this->index1, 8 => $this->index2), $this->list->getIndicesForValues($values)); | ||
} | ||
|
||
public function testGetIndicesForValuesPreservesOrder() | ||
{ | ||
$values = array($this->value2, $this->value1); | ||
$this->assertSame(array($this->index2, $this->index1), $this->list->getIndicesForValues($values)); | ||
} | ||
|
||
public function testGetIndicesForValuesIgnoresNonExistingValues() | ||
{ | ||
$values = array($this->value1, $this->value2, 'foobar'); | ||
$this->assertSame(array($this->index1, $this->index2), $this->list->getIndicesForValues($values)); | ||
} | ||
|
||
public function testGetIndicesForValuesEmpty() | ||
{ | ||
$this->assertSame(array(), $this->list->getIndicesForValues(array())); | ||
} | ||
|
||
public function testGetChoicesForValues() | ||
{ | ||
$values = array($this->value1, $this->value2); | ||
$this->assertSame(array($this->choice1, $this->choice2), $this->list->getChoicesForValues($values)); | ||
} | ||
|
||
public function testGetChoicesForValuesPreservesKeys() | ||
{ | ||
$values = array(5 => $this->value1, 8 => $this->value2); | ||
$this->assertSame(array(5 => $this->choice1, 8 => $this->choice2), $this->list->getChoicesForValues($values)); | ||
} | ||
|
||
public function testGetChoicesForValuesPreservesOrder() | ||
{ | ||
$values = array($this->value2, $this->value1); | ||
$this->assertSame(array($this->choice2, $this->choice1), $this->list->getChoicesForValues($values)); | ||
} | ||
|
||
public function testGetChoicesForValuesIgnoresNonExistingValues() | ||
{ | ||
$values = array($this->value1, $this->value2, 'foobar'); | ||
$this->assertSame(array($this->choice1, $this->choice2), $this->list->getChoicesForValues($values)); | ||
} | ||
|
||
// https://github.com/symfony/symfony/issues/3446 | ||
public function testGetChoicesForValuesEmpty() | ||
{ | ||
$this->assertSame(array(), $this->list->getChoicesForValues(array())); | ||
} | ||
|
||
public function testGetValuesForChoices() | ||
{ | ||
$choices = array($this->choice1, $this->choice2); | ||
$this->assertSame(array($this->value1, $this->value2), $this->list->getValuesForChoices($choices)); | ||
} | ||
|
||
|
||
public function testGetValuesForChoicesPreservesKeys() | ||
{ | ||
$choices = array(5 => $this->choice1, 8 => $this->choice2); | ||
$this->assertSame(array(5 => $this->value1, 8 => $this->value2), $this->list->getValuesForChoices($choices)); | ||
} | ||
|
||
|
||
public function testGetValuesForChoicesPreservesOrder() | ||
{ | ||
$choices = array($this->choice2, $this->choice1); | ||
$this->assertSame(array($this->value2, $this->value1), $this->list->getValuesForChoices($choices)); | ||
} | ||
|
||
public function testGetValuesForChoicesIgnoresNonExistingChoices() | ||
{ | ||
$choices = array($this->choice1, $this->choice2, 'foobar'); | ||
$this->assertSame(array($this->value1, $this->value2), $this->list->getValuesForChoices($choices)); | ||
} | ||
|
||
public function testGetValuesForChoicesEmpty() | ||
{ | ||
$this->assertSame(array(), $this->list->getValuesForChoices(array())); | ||
} | ||
|
||
/** | ||
* @return \Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface | ||
*/ | ||
abstract protected function createChoiceList(); | ||
|
||
abstract protected function getChoices(); | ||
|
||
abstract protected function getLabels(); | ||
|
||
abstract protected function getValues(); | ||
|
||
abstract protected function getIndices(); | ||
} |
Oops, something went wrong.