8000 [Form] Fixed expanded choice field to be marked invalid when unknown choices are submitted by webmozart · Pull Request #7940 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Form] Fixed expanded choice field to be marked invalid when unknown choices are submitted #7940

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Sep 10, 2013
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[Form] Improved test coverage of ChoiceList classes
  • Loading branch information
webmozart committed Sep 10, 2013
commit 31e5ce5de17580d719cfd9719675cc538cf70673
10000
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();
}
Loading
0