minor #21877 [Form] Hardened form type tests (HeahDude)

This PR was merged into the 2.7 branch.

Discussion
----------

[Form] Hardened form type tests

| Q             | A
| ------------- | ---
| Branch?       | 2.7
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | ~
| License       | MIT
| Doc PR        | ~

This one the PRs to come targeting 2.7 needed to harden the code base before doing some changes in master.

It takes care of the form types tests part (even if some other tests will be added later, it will also be easier after it), and unlocks merging https://github.com/symfony/symfony/pull/21481.
It also back ports tests added in https://github.com/symfony/symfony/pull/18357 for the TextType.

Since it's very hard to merge branches when modifying tests because of BC, and making every test type extend the base type test would involve many function calls to get the tested type, the function `getTestedType` is no longer abstract and return a constant to override instead, it's much better for performance, I didn't change the call in the base type test to keep BC but I suggest to deprecate it in master. Even if those are tests I really think it is worth keeping BC here.

The constants also ease testing in the ecosystem of form related libraries that need to be compatible with Symfony 2.7 and 3. I think using "test" as both prefix and suffix on namespaces, classes and names of the constants should discourage using them in real application code. Since this is just about our test suite, I don't think this should be considered a feature, so tis change should be good for 2.7.

Two other PRs will follow to solve conflicts in 2.8 and 3.2.

I missed last month patches, I hope I won't this time :).

Commits
-------

8cfc3e92ed [Form] Hardened form type tests
This commit is contained in:
Fabien Potencier 2017-03-05 09:34:46 -08:00
commit ea8025b863
26 changed files with 1281 additions and 912 deletions

View File

@ -29,13 +29,16 @@ use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleStringIdEntity;
use Symfony\Component\Form\ChoiceList\View\ChoiceGroupView; use Symfony\Component\Form\ChoiceList\View\ChoiceGroupView;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Form\Forms; use Symfony\Component\Form\Forms;
use Symfony\Component\Form\Test\TypeTestCase; use Symfony\Component\Form\Tests\Extension\Core\Type\BaseTypeTest;
use Symfony\Component\Form\Tests\Extension\Core\Type\FormTypeTest;
use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleAssociationToIntIdEntity; use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleAssociationToIntIdEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity; use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity;
class EntityTypeTest extends TypeTestCase class EntityTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'entity';
const ITEM_GROUP_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\GroupableEntity'; const ITEM_GROUP_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\GroupableEntity';
const SINGLE_IDENT_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity'; const SINGLE_IDENT_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity';
const SINGLE_IDENT_NO_TO_STRING_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity'; const SINGLE_IDENT_NO_TO_STRING_CLASS = 'Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity';
@ -116,7 +119,7 @@ class EntityTypeTest extends TypeTestCase
*/ */
public function testClassOptionIsRequired() public function testClassOptionIsRequired()
{ {
$this->factory->createNamed('name', 'entity'); $this->factory->createNamed('name', static::TESTED_TYPE);
} }
/** /**
@ -124,7 +127,7 @@ class EntityTypeTest extends TypeTestCase
*/ */
public function testInvalidClassOption() public function testInvalidClassOption()
{ {
$this->factory->createNamed('name', 'entity', null, array( $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'class' => 'foo', 'class' => 'foo',
)); ));
} }
@ -136,7 +139,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
@ -153,13 +156,14 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $view = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
)); ))
->createView();
$this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $field->createView()->vars['choices']); $this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $view->vars['choices']);
} }
public function testSetDataToUninitializedEntityWithNonRequiredQueryBuilder() public function testSetDataToUninitializedEntityWithNonRequiredQueryBuilder()
@ -170,15 +174,16 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$qb = $this->em->createQueryBuilder()->select('e')->from(self::SINGLE_IDENT_CLASS, 'e'); $qb = $this->em->createQueryBuilder()->select('e')->from(self::SINGLE_IDENT_CLASS, 'e');
$field = $this->factory->createNamed('name', 'entity', null, array( $view = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
'choice_label' => 'name', 'choice_label' => 'name',
'query_builder' => $qb, 'query_builder' => $qb,
)); ))
->createView();
$this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $field->createView()->vars['choices']); $this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $view->vars['choices']);
} }
/** /**
@ -186,7 +191,7 @@ class EntityTypeTest extends TypeTestCase
*/ */
public function testConfigureQueryBuilderWithNonQueryBuilderAndNonClosure() public function testConfigureQueryBuilderWithNonQueryBuilderAndNonClosure()
{ {
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => new \stdClass(), 'query_builder' => new \stdClass(),
@ -198,7 +203,7 @@ class EntityTypeTest extends TypeTestCase
*/ */
public function testConfigureQueryBuilderWithClosureReturningNonQueryBuilder() public function testConfigureQueryBuilderWithClosureReturningNonQueryBuilder()
{ {
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function () { 'query_builder' => function () {
@ -211,7 +216,7 @@ class EntityTypeTest extends TypeTestCase
public function testSetDataSingleNull() public function testSetDataSingleNull()
{ {
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
@ -224,7 +229,7 @@ class EntityTypeTest extends TypeTestCase
public function testSetDataMultipleExpandedNull() public function testSetDataMultipleExpandedNull()
{ {
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -238,7 +243,7 @@ class EntityTypeTest extends TypeTestCase
public function testSetDataMultipleNonExpandedNull() public function testSetDataMultipleNonExpandedNull()
{ {
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -250,47 +255,6 @@ class EntityTypeTest extends TypeTestCase
$this->assertSame(array(), $field->getViewData()); $this->assertSame(array(), $field->getViewData());
} }
public function testSubmitSingleExpandedNull()
{
$field = $this->factory->createNamed('name', 'entity', null, array(
'multiple' => false,
'expanded' => true,
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
));
$field->submit(null);
$this->assertNull($field->getData());
$this->assertSame('', $field->getViewData(), 'View data is always a string');
}
public function testSubmitSingleNonExpandedNull()
{
$field = $this->factory->createNamed('name', 'entity', null, array(
'multiple' => false,
'expanded' => false,
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
));
$field->submit(null);
$this->assertNull($field->getData());
$this->assertSame('', $field->getViewData());
}
public function testSubmitMultipleNull()
{
$field = $this->factory->createNamed('name', 'entity', null, array(
'multiple' => true,
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
));
$field->submit(null);
$this->assertEquals(new ArrayCollection(), $field->getData());
$this->assertSame(array(), $field->getViewData());
}
public function testSubmitSingleNonExpandedSingleIdentifier() public function testSubmitSingleNonExpandedSingleIdentifier()
{ {
$entity1 = new SingleIntIdEntity(1, 'Foo'); $entity1 = new SingleIntIdEntity(1, 'Foo');
@ -298,7 +262,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -323,7 +287,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($innerEntity1, $innerEntity2, $entity1, $entity2)); $this->persist(array($innerEntity1, $innerEntity2, $entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -345,7 +309,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -369,7 +333,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -398,7 +362,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($innerEntity1, $innerEntity2, $innerEntity3, $entity1, $entity2, $entity3)); $this->persist(array($innerEntity1, $innerEntity2, $innerEntity3, $entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -423,7 +387,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -454,7 +418,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -480,7 +444,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -510,7 +474,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -536,7 +500,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -565,7 +529,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -590,7 +554,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -612,7 +576,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -638,7 +602,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -669,7 +633,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -694,7 +658,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
'expanded' => true, 'expanded' => true,
'em' => 'default', 'em' => 'default',
@ -724,7 +688,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
// not all persisted entities should be displayed // not all persisted entities should be displayed
@ -747,7 +711,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'choice_label' => 'name', 'choice_label' => 'name',
@ -769,7 +733,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::ITEM_GROUP_CLASS, 'class' => self::ITEM_GROUP_CLASS,
'choice_label' => 'name', 'choice_label' => 'name',
@ -800,7 +764,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'choice_label' => 'name', 'choice_label' => 'name',
@ -826,7 +790,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($item1, $item2, $item3, $item4)); $this->persist(array($item1, $item2, $item3, $item4));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::ITEM_GROUP_CLASS, 'class' => self::ITEM_GROUP_CLASS,
'choices' => array($item1, $item2, $item3, $item4), 'choices' => array($item1, $item2, $item3, $item4),
@ -857,7 +821,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'preferred_choices' => array($entity3, $entity2), 'preferred_choices' => array($entity3, $entity2),
@ -876,7 +840,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'choices' => array($entity2, $entity3), 'choices' => array($entity2, $entity3),
@ -896,7 +860,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'choices' => array($entity1, $entity2), 'choices' => array($entity1, $entity2),
@ -919,7 +883,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($innerEntity1, $innerEntity2, $entity1, $entity2)); $this->persist(array($innerEntity1, $innerEntity2, $entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_ASSOC_IDENT_CLASS, 'class' => self::SINGLE_ASSOC_IDENT_CLASS,
'choices' => array($entity1, $entity2), 'choices' => array($entity1, $entity2),
@ -940,7 +904,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::COMPOSITE_IDENT_CLASS, 'class' => self::COMPOSITE_IDENT_CLASS,
'choices' => array($entity1, $entity2), 'choices' => array($entity1, $entity2),
@ -963,7 +927,7 @@ class EntityTypeTest extends TypeTestCase
$repository = $this->em->getRepository(self::SINGLE_IDENT_CLASS); $repository = $this->em->getRepository(self::SINGLE_IDENT_CLASS);
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => $repository->createQueryBuilder('e') 'query_builder' => $repository->createQueryBuilder('e')
@ -991,7 +955,7 @@ class EntityTypeTest extends TypeTestCase
$repository = $this->em->getRepository(self::SINGLE_ASSOC_IDENT_CLASS); $repository = $this->em->getRepository(self::SINGLE_ASSOC_IDENT_CLASS);
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_ASSOC_IDENT_CLASS, 'class' => self::SINGLE_ASSOC_IDENT_CLASS,
'query_builder' => $repository->createQueryBuilder('e') 'query_builder' => $repository->createQueryBuilder('e')
@ -1013,10 +977,10 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function ($repository) { 'query_builder' => function (EntityRepository $repository) {
return $repository->createQueryBuilder('e') return $repository->createQueryBuilder('e')
->where('e.id IN (1, 2)'); ->where('e.id IN (1, 2)');
}, },
@ -1037,10 +1001,10 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2, $entity3)); $this->persist(array($entity1, $entity2, $entity3));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::COMPOSITE_IDENT_CLASS, 'class' => self::COMPOSITE_IDENT_CLASS,
'query_builder' => function ($repository) { 'query_builder' => function (EntityRepository $repository) {
return $repository->createQueryBuilder('e') return $repository->createQueryBuilder('e')
->where('e.id1 IN (10, 50)'); ->where('e.id1 IN (10, 50)');
}, },
@ -1059,7 +1023,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1)); $this->persist(array($entity1));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -1080,7 +1044,7 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1)); $this->persist(array($entity1));
$field = $this->factory->createNamed('name', 'entity', null, array( $field = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'multiple' => false, 'multiple' => false,
'expanded' => false, 'expanded' => false,
'em' => 'default', 'em' => 'default',
@ -1106,7 +1070,7 @@ class EntityTypeTest extends TypeTestCase
->with(self::SINGLE_IDENT_CLASS) ->with(self::SINGLE_IDENT_CLASS)
->will($this->returnValue($this->em)); ->will($this->returnValue($this->em));
$this->factory->createNamed('name', 'entity', null, array( $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
'choice_label' => 'name', 'choice_label' => 'name',
@ -1121,7 +1085,7 @@ class EntityTypeTest extends TypeTestCase
$this->emRegistry->expects($this->never()) $this->emRegistry->expects($this->never())
->method('getManagerForClass'); ->method('getManagerForClass');
$this->factory->createNamed('name', 'entity', null, array( $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => $this->em, 'em' => $this->em,
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'choice_label' => 'name', 'choice_label' => 'name',
@ -1150,15 +1114,15 @@ class EntityTypeTest extends TypeTestCase
->addTypeGuesser($entityTypeGuesser) ->addTypeGuesser($entityTypeGuesser)
->getFormFactory(); ->getFormFactory();
$formBuilder = $factory->createNamedBuilder('form', 'form'); $formBuilder = $factory->createNamedBuilder('form', FormTypeTest::TESTED_TYPE);
$formBuilder->add('property1', 'entity', array( $formBuilder->add('property1', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => $repo->createQueryBuilder('e')->where('e.id IN (1, 2)'), 'query_builder' => $repo->createQueryBuilder('e')->where('e.id IN (1, 2)'),
)); ));
$formBuilder->add('property2', 'entity', array( $formBuilder->add('property2', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function (EntityRepository $repo) { 'query_builder' => function (EntityRepository $repo) {
@ -1166,7 +1130,7 @@ class EntityTypeTest extends TypeTestCase
}, },
)); ));
$formBuilder->add('property3', 'entity', array( $formBuilder->add('property3', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function (EntityRepository $repo) { 'query_builder' => function (EntityRepository $repo) {
@ -1213,15 +1177,15 @@ class EntityTypeTest extends TypeTestCase
->addTypeGuesser($entityTypeGuesser) ->addTypeGuesser($entityTypeGuesser)
->getFormFactory(); ->getFormFactory();
$formBuilder = $factory->createNamedBuilder('form', 'form'); $formBuilder = $factory->createNamedBuilder('form', FormTypeTest::TESTED_TYPE);
$formBuilder->add('property1', 'entity', array( $formBuilder->add('property1', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => $repo->createQueryBuilder('e')->where('e.id = :id')->setParameter('id', 1), 'query_builder' => $repo->createQueryBuilder('e')->where('e.id = :id')->setParameter('id', 1),
)); ));
$formBuilder->add('property2', 'entity', array( $formBuilder->add('property2', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function (EntityRepository $repo) { 'query_builder' => function (EntityRepository $repo) {
@ -1229,7 +1193,7 @@ class EntityTypeTest extends TypeTestCase
}, },
)); ));
$formBuilder->add('property3', 'entity', array( $formBuilder->add('property3', static::TESTED_TYPE, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'query_builder' => function (EntityRepository $repo) { 'query_builder' => function (EntityRepository $repo) {
@ -1260,14 +1224,14 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1)); $this->persist(array($entity1));
$field1 = $this->factory->createNamed('name', 'entity', null, array( $field1 = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
'choice_label' => 'name', 'choice_label' => 'name',
)); ));
$field2 = $this->factory->createNamed('name', 'entity', null, array( $field2 = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
@ -1288,14 +1252,15 @@ class EntityTypeTest extends TypeTestCase
$this->persist(array($entity1, $entity2)); $this->persist(array($entity1, $entity2));
$field = $this->factory->createNamed('name', 'entity', null, array( $view = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default', 'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS, 'class' => self::SINGLE_IDENT_CLASS,
'required' => false, 'required' => false,
'property' => 'name', 'property' => 'name',
)); ))
->createView();
$this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $field->createView()->vars['choices']); $this->assertEquals(array(1 => new ChoiceView($entity1, '1', 'Foo'), 2 => new ChoiceView($entity2, '2', 'Bar')), $view->vars['choices']);
} }
protected function createRegistryMock($name, $em) protected function createRegistryMock($name, $em)
@ -1308,4 +1273,213 @@ class EntityTypeTest extends TypeTestCase
return $registry; return $registry;
} }
public function testPassDisabledAsOption()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'disabled' => true,
'class' => self::SINGLE_IDENT_CLASS,
));
$this->assertTrue($form->isDisabled());
}
public function testPassIdAndNameToView()
{
$view = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->createView();
$this->assertEquals('name', $view->vars['id']);
$this->assertEquals('name', $view->vars['name']);
$this->assertEquals('name', $view->vars['full_name']);
}
public function testStripLeadingUnderscoresAndDigitsFromId()
{
$view = $this->factory->createNamed('_09name', static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->createView();
$this->assertEquals('name', $view->vars['id']);
$this->assertEquals('_09name', $view->vars['name']);
$this->assertEquals('_09name', $view->vars['full_name']);
}
public function testPassIdAndNameToViewWithParent()
{
$view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', static::TESTED_TYPE, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->getForm()
->createView();
$this->assertEquals('parent_child', $view['child']->vars['id']);
$this->assertEquals('child', $view['child']->vars['name']);
$this->assertEquals('parent[child]', $view['child']->vars['full_name']);
}
public function testPassIdAndNameToViewWithGrandParent()
{
$builder = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', FormTypeTest::TESTED_TYPE);
$builder->get('child')->add('grand_child', static::TESTED_TYPE, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
));
$view = $builder->getForm()->createView();
$this->assertEquals('parent_child_grand_child', $view['child']['grand_child']->vars['id']);
$this->assertEquals('grand_child', $view['child']['grand_child']->vars['name']);
$this->assertEquals('parent[child][grand_child]', $view['child']['grand_child']->vars['full_name']);
}
public function testPassTranslationDomainToView()
{
$view = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
'translation_domain' => 'domain',
))
->createView();
$this->assertSame('domain', $view->vars['translation_domain']);
}
public function testInheritTranslationDomainFromParent()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, array(
'translation_domain' => 'domain',
))
->add('child', static::TESTED_TYPE, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->getForm()
->createView();
$this->assertEquals('domain', $view['child']->vars['translation_domain']);
}
public function testPreferOwnTranslationDomain()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, array(
'translation_domain' => 'parent_domain',
))
->add('child', static::TESTED_TYPE, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
'translation_domain' => 'domain',
))
->getForm()
->createView();
$this->assertEquals('domain', $view['child']->vars['translation_domain']);
}
public function testDefaultTranslationDomain()
{
$view = $this->factory
->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', static::TESTED_TYPE, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->getForm()
->createView();
$this->assertNull($view['child']->vars['translation_domain']);
}
public function testPassLabelToView()
{
$view = $this->factory->createNamed('__test___field', static::TESTED_TYPE, null, array(
'label' => 'My label',
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->createView();
$this->assertSame('My label', $view->vars['label']);
}
public function testPassMultipartFalseToView()
{
$view = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
))
->createView();
$this->assertFalse($view->vars['multipart']);
}
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
));
$form->submit(null);
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame('', $form->getViewData(), 'View data is always a string');
}
public function testSubmitNullExpanded()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
'expanded' => true,
));
$form->submit(null);
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame('', $form->getViewData(), 'View data is always a string');
}
public function testSubmitNullMultiple()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
'multiple' => true,
));
$form->submit(null);
$collection = new ArrayCollection();
$this->assertEquals($collection, $form->getData());
$this->assertEquals($collection, $form->getNormData());
$this->assertSame(array(), $form->getViewData(), 'View data is always an array');
}
public function testSubmitNullExpandedMultiple()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'em' => 'default',
'class' => self::SINGLE_IDENT_CLASS,
'expanded' => true,
'multiple' => true,
));
$form->submit(null);
$collection = new ArrayCollection();
$this->assertEquals($collection, $form->getData());
$this->assertEquals($collection, $form->getNormData());
$this->assertSame(array(), $form->getViewData(), 'View data is always an array');
}
} }

View File

@ -18,6 +18,8 @@ use Symfony\Component\Form\Test\TypeTestCase;
*/ */
abstract class BaseTypeTest extends TypeTestCase abstract class BaseTypeTest extends TypeTestCase
{ {
const TESTED_TYPE = '';
public function testPassDisabledAsOption() public function testPassDisabledAsOption()
{ {
$form = $this->factory->create($this->getTestedType(), null, array('disabled' => true)); $form = $this->factory->create($this->getTestedType(), null, array('disabled' => true));
@ -47,7 +49,7 @@ abstract class BaseTypeTest extends TypeTestCase
public function testPassIdAndNameToViewWithParent() public function testPassIdAndNameToViewWithParent()
{ {
$view = $this->factory->createNamedBuilder('parent', 'form') $view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', $this->getTestedType()) ->add('child', $this->getTestedType())
->getForm() ->getForm()
->createView(); ->createView();
@ -59,8 +61,8 @@ abstract class BaseTypeTest extends TypeTestCase
public function testPassIdAndNameToViewWithGrandParent() public function testPassIdAndNameToViewWithGrandParent()
{ {
$builder = $this->factory->createNamedBuilder('parent', 'form') $builder = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', 'form'); ->add('child', FormTypeTest::TESTED_TYPE);
$builder->get('child')->add('grand_child', $this->getTestedType()); $builder->get('child')->add('grand_child', $this->getTestedType());
$view = $builder->getForm()->createView(); $view = $builder->getForm()->createView();
@ -71,10 +73,10 @@ abstract class BaseTypeTest extends TypeTestCase
public function testPassTranslationDomainToView() public function testPassTranslationDomainToView()
{ {
$form = $this->factory->create($this->getTestedType(), null, array( $view = $this->factory->create($this->getTestedType(), null, array(
'translation_domain' => 'domain', 'translation_domain' => 'domain',
)); ))
$view = $form->createView(); ->createView();
$this->assertSame('domain', $view->vars['translation_domain']); $this->assertSame('domain', $view->vars['translation_domain']);
} }
@ -82,7 +84,7 @@ abstract class BaseTypeTest extends TypeTestCase
public function testInheritTranslationDomainFromParent() public function testInheritTranslationDomainFromParent()
{ {
$view = $this->factory $view = $this->factory
->createNamedBuilder('parent', 'form', null, array( ->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, array(
'translation_domain' => 'domain', 'translation_domain' => 'domain',
)) ))
->add('child', $this->getTestedType()) ->add('child', $this->getTestedType())
@ -95,7 +97,7 @@ abstract class BaseTypeTest extends TypeTestCase
public function testPreferOwnTranslationDomain() public function testPreferOwnTranslationDomain()
{ {
$view = $this->factory $view = $this->factory
->createNamedBuilder('parent', 'form', null, array( ->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE, null, array(
'translation_domain' => 'parent_domain', 'translation_domain' => 'parent_domain',
)) ))
->add('child', $this->getTestedType(), array( ->add('child', $this->getTestedType(), array(
@ -109,7 +111,7 @@ abstract class BaseTypeTest extends TypeTestCase
public function testDefaultTranslationDomain() public function testDefaultTranslationDomain()
{ {
$view = $this->factory->createNamedBuilder('parent', 'form') $view = $this->factory->createNamedBuilder('parent', FormTypeTest::TESTED_TYPE)
->add('child', $this->getTestedType()) ->add('child', $this->getTestedType())
->getForm() ->getForm()
->createView(); ->createView();
@ -119,19 +121,32 @@ abstract class BaseTypeTest extends TypeTestCase
public function testPassLabelToView() public function testPassLabelToView()
{ {
$form = $this->factory->createNamed('__test___field', $this->getTestedType(), null, array('label' => 'My label')); $view = $this->factory->createNamed('__test___field', $this->getTestedType(), null, array('label' => 'My label'))
$view = $form->createView(); ->createView();
$this->assertSame('My label', $view->vars['label']); $this->assertSame('My label', $view->vars['label']);
} }
public function testPassMultipartFalseToView() public function testPassMultipartFalseToView()
{ {
$form = $this->factory->create($this->getTestedType()); $view = $this->factory->create($this->getTestedType())
$view = $form->createView(); ->createView();
$this->assertFalse($view->vars['multipart']); $this->assertFalse($view->vars['multipart']);
} }
abstract protected function getTestedType(); public function testSubmitNull($expected = null, $norm = null, $view = null)
{
$form = $this->factory->create($this->getTestedType());
$form->submit(null);
$this->assertSame($expected, $form->getData());
$this->assertSame($norm, $form->getNormData());
$this->assertSame($view, $form->getViewData());
}
protected function getTestedType()
{
return static::TESTED_TYPE;
}
} }

View File

@ -14,20 +14,17 @@ namespace Symfony\Component\Form\Tests\Extension\Core\Type;
/** /**
* @author Stepan Anchugov <kixxx1@gmail.com> * @author Stepan Anchugov <kixxx1@gmail.com>
*/ */
class BirthdayTypeTest extends BaseTypeTest class BirthdayTypeTest extends DateTypeTest
{ {
const TESTED_TYPE = 'birthday';
/** /**
* @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
*/ */
public function testSetInvalidYearsOption() public function testSetInvalidYearsOption()
{ {
$this->factory->create('birthday', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'years' => 'bad value', 'years' => 'bad value',
)); ));
} }
protected function getTestedType()
{
return 'birthday';
}
} }

View File

@ -16,13 +16,10 @@ namespace Symfony\Component\Form\Tests\Extension\Core\Type;
*/ */
class ButtonTypeTest extends BaseTypeTest class ButtonTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'button';
public function testCreateButtonInstances() public function testCreateButtonInstances()
{ {
$this->assertInstanceOf('Symfony\Component\Form\Button', $this->factory->create('button')); $this->assertInstanceOf('Symfony\Component\Form\Button', $this->factory->create(static::TESTED_TYPE));
}
protected function getTestedType()
{
return 'button';
} }
} }

View File

@ -12,13 +12,14 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Test\TypeTestCase;
class CheckboxTypeTest extends TypeTestCase class CheckboxTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'checkbox';
public function testDataIsFalseByDefault() public function testDataIsFalseByDefault()
{ {
$form = $this->factory->create('checkbox'); $form = $this->factory->create(static::TESTED_TYPE);
$this->assertFalse($form->getData()); $this->assertFalse($form->getData());
$this->assertFalse($form->getNormData()); $this->assertFalse($form->getNormData());
@ -27,42 +28,42 @@ class CheckboxTypeTest extends TypeTestCase
public function testPassValueToView() public function testPassValueToView()
{ {
$form = $this->factory->create('checkbox', null, array('value' => 'foobar')); $view = $this->factory->create(static::TESTED_TYPE, null, array('value' => 'foobar'))
$view = $form->createView(); ->createView();
$this->assertEquals('foobar', $view->vars['value']); $this->assertEquals('foobar', $view->vars['value']);
} }
public function testCheckedIfDataTrue() public function testCheckedIfDataTrue()
{ {
$form = $this->factory->create('checkbox'); $view = $this->factory->create(static::TESTED_TYPE)
$form->setData(true); ->setData(true)
$view = $form->createView(); ->createView();
$this->assertTrue($view->vars['checked']); $this->assertTrue($view->vars['checked']);
} }
public function testCheckedIfDataTrueWithEmptyValue() public function testCheckedIfDataTrueWithEmptyValue()
{ {
$form = $this->factory->create('checkbox', null, array('value' => '')); $view = $this->factory->create(static::TESTED_TYPE, null, array('value' => ''))
$form->setData(true); ->setData(true)
$view = $form->createView(); ->createView();
$this->assertTrue($view->vars['checked']); $this->assertTrue($view->vars['checked']);
} }
public function testNotCheckedIfDataFalse() public function testNotCheckedIfDataFalse()
{ {
$form = $this->factory->create('checkbox'); $view = $this->factory->create(static::TESTED_TYPE)
$form->setData(false); ->setData(false)
$view = $form->createView(); ->createView();
$this->assertFalse($view->vars['checked']); $this->assertFalse($view->vars['checked']);
} }
public function testSubmitWithValueChecked() public function testSubmitWithValueChecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => 'foobar', 'value' => 'foobar',
)); ));
$form->submit('foobar'); $form->submit('foobar');
@ -73,7 +74,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithRandomValueChecked() public function testSubmitWithRandomValueChecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => 'foobar', 'value' => 'foobar',
)); ));
$form->submit('krixikraxi'); $form->submit('krixikraxi');
@ -84,7 +85,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithValueUnchecked() public function testSubmitWithValueUnchecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => 'foobar', 'value' => 'foobar',
)); ));
$form->submit(null); $form->submit(null);
@ -95,7 +96,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithEmptyValueChecked() public function testSubmitWithEmptyValueChecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => '', 'value' => '',
)); ));
$form->submit(''); $form->submit('');
@ -106,7 +107,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithEmptyValueUnchecked() public function testSubmitWithEmptyValueUnchecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => '', 'value' => '',
)); ));
$form->submit(null); $form->submit(null);
@ -117,7 +118,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithEmptyValueAndFalseUnchecked() public function testSubmitWithEmptyValueAndFalseUnchecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => '', 'value' => '',
)); ));
$form->submit(false); $form->submit(false);
@ -128,7 +129,7 @@ class CheckboxTypeTest extends TypeTestCase
public function testSubmitWithEmptyValueAndTrueChecked() public function testSubmitWithEmptyValueAndTrueChecked()
{ {
$form = $this->factory->create('checkbox', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'value' => '', 'value' => '',
)); ));
$form->submit(true); $form->submit(true);
@ -152,7 +153,7 @@ class CheckboxTypeTest extends TypeTestCase
} }
); );
$form = $this->factory->createBuilder('checkbox') $form = $this->factory->createBuilder(static::TESTED_TYPE)
->addModelTransformer($transformer) ->addModelTransformer($transformer)
->getForm(); ->getForm();
@ -171,4 +172,9 @@ class CheckboxTypeTest extends TypeTestCase
array('unchecked', false), array('unchecked', false),
); );
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull(false, false, null);
}
} }

View File

@ -11,16 +11,17 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\Form\Tests\Fixtures\Author; use Symfony\Component\Form\Tests\Fixtures\Author;
use Symfony\Component\Form\Tests\Fixtures\AuthorType; use Symfony\Component\Form\Tests\Fixtures\AuthorType;
class CollectionTypeTest extends TypeTestCase class CollectionTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'collection';
public function testContainsNoChildByDefault() public function testContainsNoChildByDefault()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$this->assertCount(0, $form); $this->assertCount(0, $form);
@ -28,8 +29,8 @@ class CollectionTypeTest extends TypeTestCase
public function testSetDataAdjustsSize() public function testSetDataAdjustsSize()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'options' => array( 'options' => array(
'attr' => array('maxlength' => 20), 'attr' => array('maxlength' => 20),
), ),
@ -57,8 +58,8 @@ class CollectionTypeTest extends TypeTestCase
public function testThrowsExceptionIfObjectIsNotTraversable() public function testThrowsExceptionIfObjectIsNotTraversable()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Form\Exception\UnexpectedTypeException'); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Form\Exception\UnexpectedTypeException');
$form->setData(new \stdClass()); $form->setData(new \stdClass());
@ -66,8 +67,8 @@ class CollectionTypeTest extends TypeTestCase
public function testNotResizedIfSubmittedWithMissingData() public function testNotResizedIfSubmittedWithMissingData()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$form->setData(array('foo@foo.com', 'bar@bar.com')); $form->setData(array('foo@foo.com', 'bar@bar.com'));
$form->submit(array('foo@bar.com')); $form->submit(array('foo@bar.com'));
@ -80,8 +81,8 @@ class CollectionTypeTest extends TypeTestCase
public function testResizedDownIfSubmittedWithMissingDataAndAllowDelete() public function testResizedDownIfSubmittedWithMissingDataAndAllowDelete()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'allow_delete' => true, 'allow_delete' => true,
)); ));
$form->setData(array('foo@foo.com', 'bar@bar.com')); $form->setData(array('foo@foo.com', 'bar@bar.com'));
@ -95,8 +96,8 @@ class CollectionTypeTest extends TypeTestCase
public function testResizedDownIfSubmittedWithEmptyDataAndDeleteEmpty() public function testResizedDownIfSubmittedWithEmptyDataAndDeleteEmpty()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'allow_delete' => true, 'allow_delete' => true,
'delete_empty' => true, 'delete_empty' => true,
)); ));
@ -112,8 +113,8 @@ class CollectionTypeTest extends TypeTestCase
public function testDontAddEmptyDataIfDeleteEmpty() public function testDontAddEmptyDataIfDeleteEmpty()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'delete_empty' => true, 'delete_empty' => true,
)); ));
@ -129,8 +130,8 @@ class CollectionTypeTest extends TypeTestCase
public function testNoDeleteEmptyIfDeleteNotAllowed() public function testNoDeleteEmptyIfDeleteNotAllowed()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'allow_delete' => false, 'allow_delete' => false,
'delete_empty' => true, 'delete_empty' => true,
)); ));
@ -144,7 +145,7 @@ class CollectionTypeTest extends TypeTestCase
public function testResizedDownIfSubmittedWithCompoundEmptyDataAndDeleteEmpty() public function testResizedDownIfSubmittedWithCompoundEmptyDataAndDeleteEmpty()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => new AuthorType(), 'type' => new AuthorType(),
// If the field is not required, no new Author will be created if the // If the field is not required, no new Author will be created if the
// form is completely empty // form is completely empty
@ -167,8 +168,8 @@ class CollectionTypeTest extends TypeTestCase
public function testNotResizedIfSubmittedWithExtraData() public function testNotResizedIfSubmittedWithExtraData()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$form->setData(array('foo@bar.com')); $form->setData(array('foo@bar.com'));
$form->submit(array('foo@foo.com', 'bar@bar.com')); $form->submit(array('foo@foo.com', 'bar@bar.com'));
@ -180,8 +181,8 @@ class CollectionTypeTest extends TypeTestCase
public function testResizedUpIfSubmittedWithExtraDataAndAllowAdd() public function testResizedUpIfSubmittedWithExtraDataAndAllowAdd()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
)); ));
$form->setData(array('foo@bar.com')); $form->setData(array('foo@bar.com'));
@ -196,8 +197,8 @@ class CollectionTypeTest extends TypeTestCase
public function testAllowAddButNoPrototype() public function testAllowAddButNoPrototype()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'form', 'type' => FormTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => false, 'prototype' => false,
)); ));
@ -208,8 +209,8 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeMultipartPropagation() public function testPrototypeMultipartPropagation()
{ {
$form = $this->factory $form = $this->factory
->create('collection', null, array( ->create(static::TESTED_TYPE, null, array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
)) ))
@ -220,8 +221,8 @@ class CollectionTypeTest extends TypeTestCase
public function testGetDataDoesNotContainsPrototypeNameBeforeDataAreSet() public function testGetDataDoesNotContainsPrototypeNameBeforeDataAreSet()
{ {
$form = $this->factory->create('collection', array(), array( $form = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'prototype' => true, 'prototype' => true,
'allow_add' => true, 'allow_add' => true,
)); ));
@ -232,8 +233,8 @@ class CollectionTypeTest extends TypeTestCase
public function testGetDataDoesNotContainsPrototypeNameAfterDataAreSet() public function testGetDataDoesNotContainsPrototypeNameAfterDataAreSet()
{ {
$form = $this->factory->create('collection', array(), array( $form = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
)); ));
@ -245,16 +246,16 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeNameOption() public function testPrototypeNameOption()
{ {
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'form', 'type' => FormTypeTest::TESTED_TYPE,
'prototype' => true, 'prototype' => true,
'allow_add' => true, 'allow_add' => true,
)); ));
$this->assertSame('__name__', $form->getConfig()->getAttribute('prototype')->getName(), '__name__ is the default'); $this->assertSame('__name__', $form->getConfig()->getAttribute('prototype')->getName(), '__name__ is the default');
$form = $this->factory->create('collection', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'form', 'type' => FormTypeTest::TESTED_TYPE,
'prototype' => true, 'prototype' => true,
'allow_add' => true, 'allow_add' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
@ -265,8 +266,8 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeDefaultLabel() public function testPrototypeDefaultLabel()
{ {
$form = $this->factory->create('collection', array(), array( $form = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
@ -277,8 +278,8 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeDefaultRequired() public function testPrototypeDefaultRequired()
{ {
$form = $this->factory->create('collection', array(), array( $form = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
@ -289,8 +290,8 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeSetNotRequired() public function testPrototypeSetNotRequired()
{ {
$form = $this->factory->create('collection', array(), array( $form = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
@ -303,14 +304,14 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeSetNotRequiredIfParentNotRequired() public function testPrototypeSetNotRequiredIfParentNotRequired()
{ {
$child = $this->factory->create('collection', array(), array( $child = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
)); ));
$parent = $this->factory->create('form', array(), array( $parent = $this->factory->create(FormTypeTest::TESTED_TYPE, array(), array(
'required' => false, 'required' => false,
)); ));
@ -322,8 +323,8 @@ class CollectionTypeTest extends TypeTestCase
public function testPrototypeNotOverrideRequiredByEntryOptionsInFavorOfParent() public function testPrototypeNotOverrideRequiredByEntryOptionsInFavorOfParent()
{ {
$child = $this->factory->create('collection', array(), array( $child = $this->factory->create(static::TESTED_TYPE, array(), array(
'type' => 'file', 'type' => FileTypeTest::TESTED_TYPE,
'allow_add' => true, 'allow_add' => true,
'prototype' => true, 'prototype' => true,
'prototype_name' => '__test__', 'prototype_name' => '__test__',
@ -332,7 +333,7 @@ class CollectionTypeTest extends TypeTestCase
), ),
)); ));
$parent = $this->factory->create('form', array(), array( $parent = $this->factory->create(FormTypeTest::TESTED_TYPE, array(), array(
'required' => false, 'required' => false,
)); ));
@ -342,4 +343,9 @@ class CollectionTypeTest extends TypeTestCase
$this->assertFalse($child->createView()->vars['required'], 'Child is not required'); $this->assertFalse($child->createView()->vars['required'], 'Child is not required');
$this->assertFalse($child->createView()->vars['prototype']->vars['required'], '"Prototype" should not be required'); $this->assertFalse($child->createView()->vars['prototype']->vars['required'], '"Prototype" should not be required');
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull(array(), array(), array());
}
} }

View File

@ -11,12 +11,13 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class CountryTypeTest extends TestCase class CountryTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'country';
protected function setUp() protected function setUp()
{ {
IntlTestHelper::requireIntl($this, false); IntlTestHelper::requireIntl($this, false);
@ -26,9 +27,8 @@ class CountryTypeTest extends TestCase
public function testCountriesAreSelectable() public function testCountriesAreSelectable()
{ {
$form = $this->factory->create('country'); $choices = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
// Don't check objects for identity // Don't check objects for identity
$this->assertContains(new ChoiceView('DE', 'DE', 'Germany'), $choices, '', false, false); $this->assertContains(new ChoiceView('DE', 'DE', 'Germany'), $choices, '', false, false);
@ -40,9 +40,8 @@ class CountryTypeTest extends TestCase
public function testUnknownCountryIsNotIncluded() public function testUnknownCountryIsNotIncluded()
{ {
$form = $this->factory->create('country', 'country'); $choices = $this->factory->create(static::TESTED_TYPE, 'country')
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
foreach ($choices as $choice) { foreach ($choices as $choice) {
if ('ZZ' === $choice->value) { if ('ZZ' === $choice->value) {
@ -50,4 +49,9 @@ class CountryTypeTest extends TestCase
} }
} }
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,12 +11,13 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class CurrencyTypeTest extends TestCase class CurrencyTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'currency';
protected function setUp() protected function setUp()
{ {
IntlTestHelper::requireIntl($this, false); IntlTestHelper::requireIntl($this, false);
@ -26,12 +27,16 @@ class CurrencyTypeTest extends TestCase
public function testCurrenciesAreSelectable() public function testCurrenciesAreSelectable()
{ {
$form = $this->factory->create('currency'); $choices = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
$this->assertContains(new ChoiceView('EUR', 'EUR', 'Euro'), $choices, '', false, false); $this->assertContains(new ChoiceView('EUR', 'EUR', 'Euro'), $choices, '', false, false);
$this->assertContains(new ChoiceView('USD', 'USD', 'US Dollar'), $choices, '', false, false); $this->assertContains(new ChoiceView('USD', 'USD', 'US Dollar'), $choices, '', false, false);
$this->assertContains(new ChoiceView('SIT', 'SIT', 'Slovenian Tolar'), $choices, '', false, false); $this->assertContains(new ChoiceView('SIT', 'SIT', 'Slovenian Tolar'), $choices, '', false, false);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -12,10 +12,11 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
class DateTimeTypeTest extends TestCase class DateTimeTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'datetime';
protected function setUp() protected function setUp()
{ {
\Locale::setDefault('en'); \Locale::setDefault('en');
@ -25,7 +26,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitDateTime() public function testSubmitDateTime()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'date_widget' => 'choice', 'date_widget' => 'choice',
@ -53,7 +54,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitString() public function testSubmitString()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -79,7 +80,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitTimestamp() public function testSubmitTimestamp()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'timestamp', 'input' => 'timestamp',
@ -107,7 +108,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitWithoutMinutes() public function testSubmitWithoutMinutes()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'date_widget' => 'choice', 'date_widget' => 'choice',
@ -137,7 +138,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitWithSeconds() public function testSubmitWithSeconds()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'date_widget' => 'choice', 'date_widget' => 'choice',
@ -169,7 +170,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitDifferentTimezones() public function testSubmitDifferentTimezones()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'America/New_York', 'model_timezone' => 'America/New_York',
'view_timezone' => 'Pacific/Tahiti', 'view_timezone' => 'Pacific/Tahiti',
'date_widget' => 'choice', 'date_widget' => 'choice',
@ -201,7 +202,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitDifferentTimezonesDateTime() public function testSubmitDifferentTimezonesDateTime()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'America/New_York', 'model_timezone' => 'America/New_York',
'view_timezone' => 'Pacific/Tahiti', 'view_timezone' => 'Pacific/Tahiti',
'widget' => 'single_text', 'widget' => 'single_text',
@ -220,7 +221,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitStringSingleText() public function testSubmitStringSingleText()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -235,7 +236,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitStringSingleTextWithSeconds() public function testSubmitStringSingleTextWithSeconds()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -251,7 +252,7 @@ class DateTimeTypeTest extends TestCase
public function testSubmitDifferentPattern() public function testSubmitDifferentPattern()
{ {
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'date_format' => 'MM*yyyy*dd', 'date_format' => 'MM*yyyy*dd',
'date_widget' => 'single_text', 'date_widget' => 'single_text',
'time_widget' => 'single_text', 'time_widget' => 'single_text',
@ -272,27 +273,27 @@ class DateTimeTypeTest extends TestCase
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create('datetime', new \DateTime()); $this->factory->create(static::TESTED_TYPE, new \DateTime());
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
->createView();
$view = $form->createView();
$this->assertEquals('datetime', $view->vars['type']); $this->assertEquals('datetime', $view->vars['type']);
} }
public function testPassDefaultPlaceholderToViewIfNotRequired() public function testPassDefaultPlaceholderToViewIfNotRequired()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('', $view['date']['year']->vars['placeholder']); $this->assertSame('', $view['date']['year']->vars['placeholder']);
$this->assertSame('', $view['date']['month']->vars['placeholder']); $this->assertSame('', $view['date']['month']->vars['placeholder']);
$this->assertSame('', $view['date']['day']->vars['placeholder']); $this->assertSame('', $view['date']['day']->vars['placeholder']);
@ -303,12 +304,12 @@ class DateTimeTypeTest extends TestCase
public function testPassNoPlaceholderToViewIfRequired() public function testPassNoPlaceholderToViewIfRequired()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertNull($view['date']['year']->vars['placeholder']); $this->assertNull($view['date']['year']->vars['placeholder']);
$this->assertNull($view['date']['month']->vars['placeholder']); $this->assertNull($view['date']['month']->vars['placeholder']);
$this->assertNull($view['date']['day']->vars['placeholder']); $this->assertNull($view['date']['day']->vars['placeholder']);
@ -319,12 +320,12 @@ class DateTimeTypeTest extends TestCase
public function testPassPlaceholderAsString() public function testPassPlaceholderAsString()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => 'Empty', 'placeholder' => 'Empty',
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty', $view['date']['year']->vars['placeholder']); $this->assertSame('Empty', $view['date']['year']->vars['placeholder']);
$this->assertSame('Empty', $view['date']['month']->vars['placeholder']); $this->assertSame('Empty', $view['date']['month']->vars['placeholder']);
$this->assertSame('Empty', $view['date']['day']->vars['placeholder']); $this->assertSame('Empty', $view['date']['day']->vars['placeholder']);
@ -338,12 +339,12 @@ class DateTimeTypeTest extends TestCase
*/ */
public function testPassEmptyValueBC() public function testPassEmptyValueBC()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'empty_value' => 'Empty', 'empty_value' => 'Empty',
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty', $view['date']['year']->vars['placeholder']); $this->assertSame('Empty', $view['date']['year']->vars['placeholder']);
$this->assertSame('Empty', $view['date']['month']->vars['placeholder']); $this->assertSame('Empty', $view['date']['month']->vars['placeholder']);
$this->assertSame('Empty', $view['date']['day']->vars['placeholder']); $this->assertSame('Empty', $view['date']['day']->vars['placeholder']);
@ -360,7 +361,7 @@ class DateTimeTypeTest extends TestCase
public function testPassPlaceholderAsArray() public function testPassPlaceholderAsArray()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
'month' => 'Empty month', 'month' => 'Empty month',
@ -370,9 +371,9 @@ class DateTimeTypeTest extends TestCase
'second' => 'Empty second', 'second' => 'Empty second',
), ),
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['date']['year']->vars['placeholder']); $this->assertSame('Empty year', $view['date']['year']->vars['placeholder']);
$this->assertSame('Empty month', $view['date']['month']->vars['placeholder']); $this->assertSame('Empty month', $view['date']['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['date']['day']->vars['placeholder']); $this->assertSame('Empty day', $view['date']['day']->vars['placeholder']);
@ -383,7 +384,7 @@ class DateTimeTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired() public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
@ -392,9 +393,9 @@ class DateTimeTypeTest extends TestCase
'second' => 'Empty second', 'second' => 'Empty second',
), ),
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['date']['year']->vars['placeholder']); $this->assertSame('Empty year', $view['date']['year']->vars['placeholder']);
$this->assertSame('', $view['date']['month']->vars['placeholder']); $this->assertSame('', $view['date']['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['date']['day']->vars['placeholder']); $this->assertSame('Empty day', $view['date']['day']->vars['placeholder']);
@ -405,7 +406,7 @@ class DateTimeTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddNullIfRequired() public function testPassPlaceholderAsPartialArrayAddNullIfRequired()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
@ -414,9 +415,9 @@ class DateTimeTypeTest extends TestCase
'second' => 'Empty second', 'second' => 'Empty second',
), ),
'with_seconds' => true, 'with_seconds' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['date']['year']->vars['placeholder']); $this->assertSame('Empty year', $view['date']['year']->vars['placeholder']);
$this->assertNull($view['date']['month']->vars['placeholder']); $this->assertNull($view['date']['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['date']['day']->vars['placeholder']); $this->assertSame('Empty day', $view['date']['day']->vars['placeholder']);
@ -427,50 +428,50 @@ class DateTimeTypeTest extends TestCase
public function testPassHtml5TypeIfSingleTextAndHtml5Format() public function testPassHtml5TypeIfSingleTextAndHtml5Format()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('datetime', $view->vars['type']); $this->assertSame('datetime', $view->vars['type']);
} }
public function testDontPassHtml5TypeIfHtml5NotAllowed() public function testDontPassHtml5TypeIfHtml5NotAllowed()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'html5' => false, 'html5' => false,
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
public function testDontPassHtml5TypeIfNotHtml5Format() public function testDontPassHtml5TypeIfNotHtml5Format()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm', 'format' => 'yyyy-MM-dd HH:mm',
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
public function testDontPassHtml5TypeIfNotSingleText() public function testDontPassHtml5TypeIfNotSingleText()
{ {
$form = $this->factory->create('datetime', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'text', 'widget' => 'text',
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
public function testDateTypeChoiceErrorsBubbleUp() public function testDateTypeChoiceErrorsBubbleUp()
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('datetime', null); $form = $this->factory->create(static::TESTED_TYPE, null);
$form['date']->addError($error); $form['date']->addError($error);
@ -481,7 +482,7 @@ class DateTimeTypeTest extends TestCase
public function testDateTypeSingleTextErrorsBubbleUp() public function testDateTypeSingleTextErrorsBubbleUp()
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'date_widget' => 'single_text', 'date_widget' => 'single_text',
)); ));
@ -494,7 +495,7 @@ class DateTimeTypeTest extends TestCase
public function testTimeTypeChoiceErrorsBubbleUp() public function testTimeTypeChoiceErrorsBubbleUp()
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('datetime', null); $form = $this->factory->create(static::TESTED_TYPE, null);
$form['time']->addError($error); $form['time']->addError($error);
@ -505,7 +506,7 @@ class DateTimeTypeTest extends TestCase
public function testTimeTypeSingleTextErrorsBubbleUp() public function testTimeTypeSingleTextErrorsBubbleUp()
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('datetime', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'time_widget' => 'single_text', 'time_widget' => 'single_text',
)); ));
@ -514,4 +515,41 @@ class DateTimeTypeTest extends TestCase
$this->assertSame(array(), iterator_to_array($form['time']->getErrors())); $this->assertSame(array(), iterator_to_array($form['time']->getErrors()));
$this->assertSame(array($error), iterator_to_array($form->getErrors())); $this->assertSame(array($error), iterator_to_array($form->getErrors()));
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, array(
// View data is an array of choice values array
'date' => array('year' => '', 'month' => '', 'day' => ''),
'time' => array('hour' => '', 'minute' => ''),
));
}
public function testSubmitNullWithText()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'text',
));
$form->submit(null);
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame(array(
// View data is an array of choice values array
'date' => array('year' => '', 'month' => '', 'day' => ''),
'time' => array('hour' => '', 'minute' => ''),
), $form->getViewData());
}
public function testSubmitNullWithSingleText()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text',
));
$form->submit(null);
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame('', $form->getViewData());
}
} }

View File

@ -13,11 +13,12 @@ namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class DateTypeTest extends TestCase class DateTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'date';
private $defaultTimezone; private $defaultTimezone;
protected function setUp() protected function setUp()
@ -37,7 +38,7 @@ class DateTypeTest extends TestCase
*/ */
public function testInvalidWidgetOption() public function testInvalidWidgetOption()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'fake_widget', 'widget' => 'fake_widget',
)); ));
} }
@ -47,14 +48,14 @@ class DateTypeTest extends TestCase
*/ */
public function testInvalidInputOption() public function testInvalidInputOption()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'input' => 'fake_input', 'input' => 'fake_input',
)); ));
} }
public function testSubmitFromSingleTextDateTimeWithDefaultFormat() public function testSubmitFromSingleTextDateTimeWithDefaultFormat()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'single_text', 'widget' => 'single_text',
@ -69,7 +70,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromSingleTextDateTimeWithCustomFormat() public function testSubmitFromSingleTextDateTimeWithCustomFormat()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'single_text', 'widget' => 'single_text',
@ -90,7 +91,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
@ -111,7 +112,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
@ -132,7 +133,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
@ -155,7 +156,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
@ -177,7 +178,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromText() public function testSubmitFromText()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'text', 'widget' => 'text',
@ -199,7 +200,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromChoice() public function testSubmitFromChoice()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'choice', 'widget' => 'choice',
@ -222,7 +223,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromChoiceEmpty() public function testSubmitFromChoiceEmpty()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'choice', 'widget' => 'choice',
@ -243,7 +244,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromInputDateTimeDifferentPattern() public function testSubmitFromInputDateTimeDifferentPattern()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'format' => 'MM*yyyy*dd', 'format' => 'MM*yyyy*dd',
@ -259,7 +260,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromInputStringDifferentPattern() public function testSubmitFromInputStringDifferentPattern()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'format' => 'MM*yyyy*dd', 'format' => 'MM*yyyy*dd',
@ -275,7 +276,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromInputTimestampDifferentPattern() public function testSubmitFromInputTimestampDifferentPattern()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'format' => 'MM*yyyy*dd', 'format' => 'MM*yyyy*dd',
@ -293,7 +294,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromInputRawDifferentPattern() public function testSubmitFromInputRawDifferentPattern()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'format' => 'MM*yyyy*dd', 'format' => 'MM*yyyy*dd',
@ -318,11 +319,10 @@ class DateTypeTest extends TestCase
*/ */
public function testDatePatternWithFormatOption($format, $pattern) public function testDatePatternWithFormatOption($format, $pattern)
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => $format, 'format' => $format,
)); ))
->createView();
$view = $form->createView();
$this->assertEquals($pattern, $view->vars['date_pattern']); $this->assertEquals($pattern, $view->vars['date_pattern']);
} }
@ -344,7 +344,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfFormatIsNoPattern() public function testThrowExceptionIfFormatIsNoPattern()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'format' => '0', 'format' => '0',
'widget' => 'single_text', 'widget' => 'single_text',
'input' => 'string', 'input' => 'string',
@ -357,7 +357,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay() public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'months' => array(6, 7), 'months' => array(6, 7),
'format' => 'yy', 'format' => 'yy',
)); ));
@ -369,7 +369,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfFormatMissesYearMonthAndDayWithSingleTextWidget() public function testThrowExceptionIfFormatMissesYearMonthAndDayWithSingleTextWidget()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'format' => 'wrong', 'format' => 'wrong',
)); ));
@ -380,7 +380,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfFormatIsNoConstant() public function testThrowExceptionIfFormatIsNoConstant()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'format' => 105, 'format' => 105,
)); ));
} }
@ -390,7 +390,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfFormatIsInvalid() public function testThrowExceptionIfFormatIsInvalid()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'format' => array(), 'format' => array(),
)); ));
} }
@ -400,7 +400,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfYearsIsInvalid() public function testThrowExceptionIfYearsIsInvalid()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'years' => 'bad value', 'years' => 'bad value',
)); ));
} }
@ -410,7 +410,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfMonthsIsInvalid() public function testThrowExceptionIfMonthsIsInvalid()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'months' => 'bad value', 'months' => 'bad value',
)); ));
} }
@ -420,7 +420,7 @@ class DateTypeTest extends TestCase
*/ */
public function testThrowExceptionIfDaysIsInvalid() public function testThrowExceptionIfDaysIsInvalid()
{ {
$this->factory->create('date', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'days' => 'bad value', 'days' => 'bad value',
)); ));
} }
@ -432,7 +432,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'America/New_York', 'view_timezone' => 'America/New_York',
@ -454,7 +454,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'America/New_York', 'view_timezone' => 'America/New_York',
@ -474,7 +474,7 @@ class DateTypeTest extends TestCase
public function testYearsOption() public function testYearsOption()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'years' => array(2010, 2011), 'years' => array(2010, 2011),
)); ));
@ -488,7 +488,7 @@ class DateTypeTest extends TestCase
public function testMonthsOption() public function testMonthsOption()
{ {
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'months' => array(6, 7), 'months' => array(6, 7),
'format' => \IntlDateFormatter::SHORT, 'format' => \IntlDateFormatter::SHORT,
)); ));
@ -508,7 +508,7 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_AT'); \Locale::setDefault('de_AT');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'months' => array(1, 4), 'months' => array(1, 4),
'format' => 'dd.MMM.yy', 'format' => 'dd.MMM.yy',
)); ));
@ -528,12 +528,11 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_AT'); \Locale::setDefault('de_AT');
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'months' => array(1, 4), 'months' => array(1, 4),
'format' => 'dd.MMMM.yy', 'format' => 'dd.MMMM.yy',
)); ))
->createView();
$view = $form->createView();
$this->assertEquals(array( $this->assertEquals(array(
new ChoiceView(1, '1', 'Jänner'), new ChoiceView(1, '1', 'Jänner'),
@ -548,12 +547,11 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_AT'); \Locale::setDefault('de_AT');
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'months' => array(1, 4), 'months' => array(1, 4),
'format' => 'dd.MMMM.yy', 'format' => 'dd.MMMM.yy',
)); ))
->createView();
$view = $form->createView();
$this->assertEquals(array( $this->assertEquals(array(
new ChoiceView(1, '1', 'Jänner'), new ChoiceView(1, '1', 'Jänner'),
@ -563,11 +561,10 @@ class DateTypeTest extends TestCase
public function testIsDayWithinRangeReturnsTrueIfWithin() public function testIsDayWithinRangeReturnsTrueIfWithin()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'days' => array(6, 7), 'days' => array(6, 7),
)); ))
->createView();
$view = $form->createView();
$this->assertEquals(array( $this->assertEquals(array(
new ChoiceView(6, '6', '06'), new ChoiceView(6, '6', '06'),
@ -575,26 +572,9 @@ class DateTypeTest extends TestCase
), $view['day']->vars['choices']); ), $view['day']->vars['choices']);
} }
public function testIsPartiallyFilledReturnsFalseIfSingleText() public function testIsSynchronizedReturnsTrueIfChoiceAndCompletelyEmpty()
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $form = $this->factory->create(static::TESTED_TYPE, null, array(
$form = $this->factory->create('date', null, array(
'model_timezone' => 'UTC',
'view_timezone' => 'UTC',
'widget' => 'single_text',
));
$form->submit('7.6.2010');
$this->assertFalse($form->isPartiallyFilled());
}
public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyEmpty()
{
$this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('date', null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'choice', 'widget' => 'choice',
@ -606,33 +586,29 @@ class DateTypeTest extends TestCase
'year' => '', 'year' => '',
)); ));
$this->assertFalse($form->isPartiallyFilled()); $this->assertTrue($form->isSynchronized());
} }
public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyFilled() public function testIsSynchronizedReturnsTrueIfChoiceAndCompletelyFilled()
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $form = $this->factory->create(static::TESTED_TYPE, new \DateTime(), array(
$form = $this->factory->create('date', null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'choice', 'widget' => 'choice',
)); ));
$form->submit(array( $form->submit(array(
'day' => '2', 'day' => '0',
'month' => '6', 'month' => '6',
'year' => '2010', 'year' => '2010',
)); ));
$this->assertFalse($form->isPartiallyFilled()); $this->assertTrue($form->isSynchronized());
} }
public function testIsPartiallyFilledReturnsTrueIfChoiceAndDayEmpty() public function testIsSynchronizedReturnsFalseIfChoiceAndDayEmpty()
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $form = $this->factory->create(static::TESTED_TYPE, null, array(
$form = $this->factory->create('date', null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'widget' => 'choice', 'widget' => 'choice',
@ -644,7 +620,7 @@ class DateTypeTest extends TestCase
'year' => '2010', 'year' => '2010',
)); ));
$this->assertTrue($form->isPartiallyFilled()); $this->assertFalse($form->isSynchronized());
} }
public function testPassDatePatternToView() public function testPassDatePatternToView()
@ -654,8 +630,8 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_AT'); \Locale::setDefault('de_AT');
$form = $this->factory->create('date'); $view = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView();
$this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']); $this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']);
} }
@ -667,43 +643,40 @@ class DateTypeTest extends TestCase
\Locale::setDefault('de_AT'); \Locale::setDefault('de_AT');
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => \IntlDateFormatter::LONG, 'format' => \IntlDateFormatter::LONG,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']); $this->assertSame('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']);
} }
public function testPassDatePatternToViewDifferentPattern() public function testPassDatePatternToViewDifferentPattern()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => 'MMyyyydd', 'format' => 'MMyyyydd',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('{{ month }}{{ year }}{{ day }}', $view->vars['date_pattern']); $this->assertSame('{{ month }}{{ year }}{{ day }}', $view->vars['date_pattern']);
} }
public function testPassDatePatternToViewDifferentPatternWithSeparators() public function testPassDatePatternToViewDifferentPatternWithSeparators()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'format' => 'MM*yyyy*dd', 'format' => 'MM*yyyy*dd',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->vars['date_pattern']); $this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->vars['date_pattern']);
} }
public function testDontPassDatePatternIfText() public function testDontPassDatePatternIfText()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
$view = $form->createView(); ->createView();
$this->assertFalse(isset($view->vars['date_pattern'])); $this->assertFalse(isset($view->vars['date_pattern']));
} }
@ -715,22 +688,21 @@ class DateTypeTest extends TestCase
\Locale::setDefault('es_ES'); \Locale::setDefault('es_ES');
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
// EEEE, d 'de' MMMM 'de' y // EEEE, d 'de' MMMM 'de' y
'format' => \IntlDateFormatter::FULL, 'format' => \IntlDateFormatter::FULL,
)); ))
->createView();
$view = $form->createView();
$this->assertEquals('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']); $this->assertEquals('{{ day }}{{ month }}{{ year }}', $view->vars['date_pattern']);
} }
public function testPassWidgetToView() public function testPassWidgetToView()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
$view = $form->createView(); ->createView();
$this->assertSame('single_text', $view->vars['widget']); $this->assertSame('single_text', $view->vars['widget']);
} }
@ -739,26 +711,26 @@ class DateTypeTest extends TestCase
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create('date', new \DateTime()); $this->factory->create(static::TESTED_TYPE, new \DateTime());
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
->createView();
$view = $form->createView();
$this->assertEquals('date', $view->vars['type']); $this->assertEquals('date', $view->vars['type']);
} }
public function testPassDefaultPlaceholderToViewIfNotRequired() public function testPassDefaultPlaceholderToViewIfNotRequired()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
)); ))
->createView();
$view = $form->createView();
$this->assertSame('', $view['year']->vars['placeholder']); $this->assertSame('', $view['year']->vars['placeholder']);
$this->assertSame('', $view['month']->vars['placeholder']); $this->assertSame('', $view['month']->vars['placeholder']);
$this->assertSame('', $view['day']->vars['placeholder']); $this->assertSame('', $view['day']->vars['placeholder']);
@ -766,11 +738,11 @@ class DateTypeTest extends TestCase
public function testPassNoPlaceholderToViewIfRequired() public function testPassNoPlaceholderToViewIfRequired()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
)); ))
->createView();
$view = $form->createView();
$this->assertNull($view['year']->vars['placeholder']); $this->assertNull($view['year']->vars['placeholder']);
$this->assertNull($view['month']->vars['placeholder']); $this->assertNull($view['month']->vars['placeholder']);
$this->assertNull($view['day']->vars['placeholder']); $this->assertNull($view['day']->vars['placeholder']);
@ -778,11 +750,11 @@ class DateTypeTest extends TestCase
public function testPassPlaceholderAsString() public function testPassPlaceholderAsString()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => 'Empty', 'placeholder' => 'Empty',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty', $view['year']->vars['placeholder']); $this->assertSame('Empty', $view['year']->vars['placeholder']);
$this->assertSame('Empty', $view['month']->vars['placeholder']); $this->assertSame('Empty', $view['month']->vars['placeholder']);
$this->assertSame('Empty', $view['day']->vars['placeholder']); $this->assertSame('Empty', $view['day']->vars['placeholder']);
@ -793,11 +765,11 @@ class DateTypeTest extends TestCase
*/ */
public function testPassEmptyValueBC() public function testPassEmptyValueBC()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'empty_value' => 'Empty', 'empty_value' => 'Empty',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty', $view['year']->vars['placeholder']); $this->assertSame('Empty', $view['year']->vars['placeholder']);
$this->assertSame('Empty', $view['month']->vars['placeholder']); $this->assertSame('Empty', $view['month']->vars['placeholder']);
$this->assertSame('Empty', $view['day']->vars['placeholder']); $this->assertSame('Empty', $view['day']->vars['placeholder']);
@ -808,15 +780,15 @@ class DateTypeTest extends TestCase
public function testPassPlaceholderAsArray() public function testPassPlaceholderAsArray()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
'month' => 'Empty month', 'month' => 'Empty month',
'day' => 'Empty day', 'day' => 'Empty day',
), ),
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['year']->vars['placeholder']); $this->assertSame('Empty year', $view['year']->vars['placeholder']);
$this->assertSame('Empty month', $view['month']->vars['placeholder']); $this->assertSame('Empty month', $view['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['day']->vars['placeholder']); $this->assertSame('Empty day', $view['day']->vars['placeholder']);
@ -824,15 +796,15 @@ class DateTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired() public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
'day' => 'Empty day', 'day' => 'Empty day',
), ),
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['year']->vars['placeholder']); $this->assertSame('Empty year', $view['year']->vars['placeholder']);
$this->assertSame('', $view['month']->vars['placeholder']); $this->assertSame('', $view['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['day']->vars['placeholder']); $this->assertSame('Empty day', $view['day']->vars['placeholder']);
@ -840,15 +812,15 @@ class DateTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddNullIfRequired() public function testPassPlaceholderAsPartialArrayAddNullIfRequired()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
'placeholder' => array( 'placeholder' => array(
'year' => 'Empty year', 'year' => 'Empty year',
'day' => 'Empty day', 'day' => 'Empty day',
), ),
)); ))
->createView();
$view = $form->createView();
$this->assertSame('Empty year', $view['year']->vars['placeholder']); $this->assertSame('Empty year', $view['year']->vars['placeholder']);
$this->assertNull($view['month']->vars['placeholder']); $this->assertNull($view['month']->vars['placeholder']);
$this->assertSame('Empty day', $view['day']->vars['placeholder']); $this->assertSame('Empty day', $view['day']->vars['placeholder']);
@ -856,43 +828,43 @@ class DateTypeTest extends TestCase
public function testPassHtml5TypeIfSingleTextAndHtml5Format() public function testPassHtml5TypeIfSingleTextAndHtml5Format()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ))
->createView();
$view = $form->createView();
$this->assertSame('date', $view->vars['type']); $this->assertSame('date', $view->vars['type']);
} }
public function testDontPassHtml5TypeIfHtml5NotAllowed() public function testDontPassHtml5TypeIfHtml5NotAllowed()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'html5' => false, 'html5' => false,
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
public function testDontPassHtml5TypeIfNotHtml5Format() public function testDontPassHtml5TypeIfNotHtml5Format()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'format' => \IntlDateFormatter::MEDIUM, 'format' => \IntlDateFormatter::MEDIUM,
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
public function testDontPassHtml5TypeIfNotSingleText() public function testDontPassHtml5TypeIfNotSingleText()
{ {
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'text', 'widget' => 'text',
)); ))
->createView();
$view = $form->createView();
$this->assertFalse(isset($view->vars['type'])); $this->assertFalse(isset($view->vars['type']));
} }
@ -910,7 +882,7 @@ class DateTypeTest extends TestCase
public function testYearErrorsBubbleUp($widget) public function testYearErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
)); ));
$form['year']->addError($error); $form['year']->addError($error);
@ -925,7 +897,7 @@ class DateTypeTest extends TestCase
public function testMonthErrorsBubbleUp($widget) public function testMonthErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
)); ));
$form['month']->addError($error); $form['month']->addError($error);
@ -940,7 +912,7 @@ class DateTypeTest extends TestCase
public function testDayErrorsBubbleUp($widget) public function testDayErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('date', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
)); ));
$form['day']->addError($error); $form['day']->addError($error);
@ -955,11 +927,10 @@ class DateTypeTest extends TestCase
$this->markTestSkipped('PHP 32 bit is required.'); $this->markTestSkipped('PHP 32 bit is required.');
} }
$form = $this->factory->create('date', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'years' => range(1900, 2040), 'years' => range(1900, 2040),
)); ))
->createView();
$view = $form->createView();
$listChoices = array(); $listChoices = array();
foreach (range(1902, 2037) as $y) { foreach (range(1902, 2037) as $y) {
@ -968,4 +939,21 @@ class DateTypeTest extends TestCase
$this->assertEquals($listChoices, $view['year']->vars['choices']); $this->assertEquals($listChoices, $view['year']->vars['choices']);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, array('year' => '', 'month' => '', 'day' => ''));
}
public function testSubmitNullWithSingleText()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text',
));
$form->submit(null);
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame('', $form->getViewData());
}
} }

View File

@ -11,24 +11,26 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase; class FileTypeTest extends BaseTypeTest
class FileTypeTest extends TypeTestCase
{ {
// https://github.com/symfony/symfony/pull/5028 const TESTED_TYPE = 'file';
public function testSetData() public function testSetData()
{ {
$form = $this->factory->createBuilder('file')->getForm(); $form = $this->factory->createBuilder(static::TESTED_TYPE)->getForm();
$data = $this->createUploadedFileMock('abcdef', 'original.jpg', true); $data = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\File')
->setConstructorArgs(array(__DIR__.'/../../../Fixtures/foo', 'foo'))
->getMock();
$form->setData($data); $form->setData($data);
// Ensures the data class is defined to accept File instance
$this->assertSame($data, $form->getData()); $this->assertSame($data, $form->getData());
} }
public function testSubmit() public function testSubmit()
{ {
$form = $this->factory->createBuilder('file')->getForm(); $form = $this->factory->createBuilder(static::TESTED_TYPE)->getForm();
$data = $this->createUploadedFileMock('abcdef', 'original.jpg', true); $data = $this->createUploadedFileMock('abcdef', 'original.jpg', true);
$form->submit($data); $form->submit($data);
@ -36,31 +38,9 @@ class FileTypeTest extends TypeTestCase
$this->assertSame($data, $form->getData()); $this->assertSame($data, $form->getData());
} }
// https://github.com/symfony/symfony/issues/6134
public function testSubmitEmpty()
{
$form = $this->factory->createBuilder('file')->getForm();
$form->submit(null);
$this->assertNull($form->getData());
}
public function testSubmitEmptyMultiple()
{
$form = $this->factory->createBuilder('file', null, array(
'multiple' => true,
))->getForm();
// submitted data when an input file is uploaded without choosing any file
$form->submit(array(null));
$this->assertSame(array(), $form->getData());
}
public function testSetDataMultiple() public function testSetDataMultiple()
{ {
$form = $this->factory->createBuilder('file', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
))->getForm(); ))->getForm();
@ -75,7 +55,7 @@ class FileTypeTest extends TypeTestCase
public function testSubmitMultiple() public function testSubmitMultiple()
{ {
$form = $this->factory->createBuilder('file', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'multiple' => true, 'multiple' => true,
))->getForm(); ))->getForm();
@ -94,13 +74,38 @@ class FileTypeTest extends TypeTestCase
public function testDontPassValueToView() public function testDontPassValueToView()
{ {
$form = $this->factory->create('file'); $form = $this->factory->create(static::TESTED_TYPE);
$form->submit(array( $form->submit(array(
'file' => $this->createUploadedFileMock('abcdef', 'original.jpg', true), 'file' => $this->createUploadedFileMock('abcdef', 'original.jpg', true),
)); ));
$view = $form->createView();
$this->assertEquals('', $view->vars['value']); $this->assertEquals('', $form->createView()->vars['value']);
}
public function testPassMultipartFalseToView()
{
$view = $this->factory->create(static::TESTED_TYPE)
->createView();
$this->assertTrue($view->vars['multipart']);
}
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
public function testSubmitNullWhenMultiple()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'multiple' => true,
));
// submitted data when an input file is uploaded without choosing any file
$form->submit(array(null));
$this->assertSame(array(), $form->getData());
$this->assertSame(array(), $form->getNormData());
$this->assertSame(array(), $form->getViewData());
} }
private function createUploadedFileMock($name, $originalName, $valid) private function createUploadedFileMock($name, $originalName, $valid)

View File

@ -51,27 +51,29 @@ class FormTest_AuthorWithoutRefSetter
class FormTypeTest extends BaseTypeTest class FormTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'form';
public function testCreateFormInstances() public function testCreateFormInstances()
{ {
$this->assertInstanceOf('Symfony\Component\Form\Form', $this->factory->create('form')); $this->assertInstanceOf('Symfony\Component\Form\Form', $this->factory->create(static::TESTED_TYPE));
} }
public function testPassRequiredAsOption() public function testPassRequiredAsOption()
{ {
$form = $this->factory->create('form', null, array('required' => false)); $form = $this->factory->create(static::TESTED_TYPE, null, array('required' => false));
$this->assertFalse($form->isRequired()); $this->assertFalse($form->isRequired());
$form = $this->factory->create('form', null, array('required' => true)); $form = $this->factory->create(static::TESTED_TYPE, null, array('required' => true));
$this->assertTrue($form->isRequired()); $this->assertTrue($form->isRequired());
} }
public function testSubmittedDataIsTrimmedBeforeTransforming() public function testSubmittedDataIsTrimmedBeforeTransforming()
{ {
$form = $this->factory->createBuilder('form') $form = $this->factory->createBuilder(static::TESTED_TYPE)
->addViewTransformer(new FixedDataTransformer(array( ->addViewTransformer(new FixedDataTransformer(array(
null => '', '' => '',
'reverse[a]' => 'a', 'reverse[a]' => 'a',
))) )))
->setCompound(false) ->setCompound(false)
@ -85,9 +87,9 @@ class FormTypeTest extends BaseTypeTest
public function testSubmittedDataIsNotTrimmedBeforeTransformingIfNoTrimming() public function testSubmittedDataIsNotTrimmedBeforeTransformingIfNoTrimming()
{ {
$form = $this->factory->createBuilder('form', null, array('trim' => false)) $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array('trim' => false))
->addViewTransformer(new FixedDataTransformer(array( ->addViewTransformer(new FixedDataTransformer(array(
null => '', '' => '',
'reverse[ a ]' => ' a ', 'reverse[ a ]' => ' a ',
))) )))
->setCompound(false) ->setCompound(false)
@ -101,8 +103,8 @@ class FormTypeTest extends BaseTypeTest
public function testNonReadOnlyFormWithReadOnlyParentIsReadOnly() public function testNonReadOnlyFormWithReadOnlyParentIsReadOnly()
{ {
$view = $this->factory->createNamedBuilder('parent', 'form', null, array('read_only' => true)) $view = $this->factory->createNamedBuilder('parent', static::TESTED_TYPE, null, array('read_only' => true))
->add('child', 'form') ->add('child', static::TESTED_TYPE)
->getForm() ->getForm()
->createView(); ->createView();
@ -111,8 +113,8 @@ class FormTypeTest extends BaseTypeTest
public function testReadOnlyFormWithNonReadOnlyParentIsReadOnly() public function testReadOnlyFormWithNonReadOnlyParentIsReadOnly()
{ {
$view = $this->factory->createNamedBuilder('parent', 'form') $view = $this->factory->createNamedBuilder('parent', static::TESTED_TYPE)
->add('child', 'form', array('read_only' => true)) ->add('child', static::TESTED_TYPE, array('read_only' => true))
->getForm() ->getForm()
->createView(); ->createView();
@ -121,8 +123,8 @@ class FormTypeTest extends BaseTypeTest
public function testNonReadOnlyFormWithNonReadOnlyParentIsNotReadOnly() public function testNonReadOnlyFormWithNonReadOnlyParentIsNotReadOnly()
{ {
$view = $this->factory->createNamedBuilder('parent', 'form') $view = $this->factory->createNamedBuilder('parent', static::TESTED_TYPE)
->add('child', 'form') ->add('child', static::TESTED_TYPE)
->getForm() ->getForm()
->createView(); ->createView();
@ -131,37 +133,37 @@ class FormTypeTest extends BaseTypeTest
public function testPassMaxLengthToView() public function testPassMaxLengthToView()
{ {
$form = $this->factory->create('form', null, array('attr' => array('maxlength' => 10))); $view = $this->factory->create(static::TESTED_TYPE, null, array('attr' => array('maxlength' => 10)))
$view = $form->createView(); ->createView();
$this->assertSame(10, $view->vars['attr']['maxlength']); $this->assertSame(10, $view->vars['attr']['maxlength']);
} }
public function testPassMaxLengthBCToView() public function testPassMaxLengthBCToView()
{ {
$form = $this->factory->create('form', null, array('max_length' => 10)); $view = $this->factory->create(static::TESTED_TYPE, null, array('max_length' => 10))
$view = $form->createView(); ->createView();
$this->assertSame(10, $view->vars['attr']['maxlength']); $this->assertSame(10, $view->vars['attr']['maxlength']);
} }
public function testDataClassMayBeNull() public function testDataClassMayBeNull()
{ {
$this->factory->createBuilder('form', null, array( $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => null, 'data_class' => null,
)); ));
} }
public function testDataClassMayBeAbstractClass() public function testDataClassMayBeAbstractClass()
{ {
$this->factory->createBuilder('form', null, array( $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AbstractAuthor', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AbstractAuthor',
)); ));
} }
public function testDataClassMayBeInterface() public function testDataClassMayBeInterface()
{ {
$this->factory->createBuilder('form', null, array( $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AuthorInterface', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AuthorInterface',
)); ));
} }
@ -171,22 +173,23 @@ class FormTypeTest extends BaseTypeTest
*/ */
public function testDataClassMustBeValidClassOrInterface() public function testDataClassMustBeValidClassOrInterface()
{ {
$this->factory->createBuilder('form', null, array( $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'foobar', 'data_class' => 'foobar',
)); ));
} }
public function testSubmitWithEmptyDataCreatesObjectIfClassAvailable() public function testSubmitWithEmptyDataCreatesObjectIfClassAvailable()
{ {
$builder = $this->factory->createBuilder('form', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'required' => false, 'required' => false,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$builder->add('lastName', 'text'); ->add('lastName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$this->assertNull($form->getData());
$form->setData(null);
// partially empty, still an object is created // partially empty, still an object is created
$form->submit(array('firstName' => 'Bernhard', 'lastName' => '')); $form->submit(array('firstName' => 'Bernhard', 'lastName' => ''));
@ -197,19 +200,19 @@ class FormTypeTest extends BaseTypeTest
$this->assertEquals($author, $form->getData()); $this->assertEquals($author, $form->getData());
} }
public function testSubmitWithEmptyDataCreatesObjectIfInitiallySubmittedWithObject() public function testSubmitWithDefaultDataDontCreateObject()
{ {
$builder = $this->factory->createBuilder('form', null, array( $defaultAuthor = new Author();
$form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
// data class is inferred from the passed object // data class is inferred from the passed object
'data' => new Author(), 'data' => $defaultAuthor,
'required' => false, 'required' => false,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$builder->add('lastName', 'text'); ->add('lastName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$form->setData(null); // partially empty
// partially empty, still an object is created
$form->submit(array('firstName' => 'Bernhard', 'lastName' => '')); $form->submit(array('firstName' => 'Bernhard', 'lastName' => ''));
$author = new Author(); $author = new Author();
@ -217,34 +220,37 @@ class FormTypeTest extends BaseTypeTest
$author->setLastName(''); $author->setLastName('');
$this->assertEquals($author, $form->getData()); $this->assertEquals($author, $form->getData());
$this->assertSame($defaultAuthor, $form->getData());
} }
public function testSubmitWithEmptyDataCreatesArrayIfDataClassIsNull() public function testSubmitWithEmptyDataCreatesArrayIfDataClassIsNull()
{ {
$builder = $this->factory->createBuilder('form', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => null, 'data_class' => null,
'required' => false, 'required' => false,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$this->assertNull($form->getData());
$form->setData(null);
$form->submit(array('firstName' => 'Bernhard')); $form->submit(array('firstName' => 'Bernhard'));
$this->assertSame(array('firstName' => 'Bernhard'), $form->getData()); $this->assertSame(array('firstName' => 'Bernhard'), $form->getData());
} }
public function testSubmitEmptyWithEmptyDataCreatesNoObjectIfNotRequired() public function testSubmitEmptyWithEmptyDataDontCreateObjectIfNotRequired()
{ {
$builder = $this->factory->createBuilder('form', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'required' => false, 'required' => false,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$builder->add('lastName', 'text'); ->add('lastName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$this->assertNull($form->getData());
$form->setData(null);
$form->submit(array('firstName' => '', 'lastName' => '')); $form->submit(array('firstName' => '', 'lastName' => ''));
$this->assertNull($form->getData()); $this->assertNull($form->getData());
@ -252,15 +258,16 @@ class FormTypeTest extends BaseTypeTest
public function testSubmitEmptyWithEmptyDataCreatesObjectIfRequired() public function testSubmitEmptyWithEmptyDataCreatesObjectIfRequired()
{ {
$builder = $this->factory->createBuilder('form', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'required' => true, 'required' => true,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$builder->add('lastName', 'text'); ->add('lastName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$this->assertNull($form->getData());
$form->setData(null);
$form->submit(array('firstName' => '', 'lastName' => '')); $form->submit(array('firstName' => '', 'lastName' => ''));
$this->assertEquals(new Author(), $form->getData()); $this->assertEquals(new Author(), $form->getData());
@ -271,11 +278,12 @@ class FormTypeTest extends BaseTypeTest
*/ */
public function testSubmitWithEmptyDataStoresArrayIfNoClassAvailable() public function testSubmitWithEmptyDataStoresArrayIfNoClassAvailable()
{ {
$form = $this->factory->createBuilder('form') $form = $this->factory->createBuilder(static::TESTED_TYPE)
->add('firstName', 'text') ->add('firstName', TextTypeTest::TESTED_TYPE)
->getForm(); ->getForm();
$form->setData(null); $this->assertNull($form->getData());
$form->submit(array('firstName' => 'Bernhard')); $form->submit(array('firstName' => 'Bernhard'));
$this->assertSame(array('firstName' => 'Bernhard'), $form->getData()); $this->assertSame(array('firstName' => 'Bernhard'), $form->getData());
@ -283,31 +291,40 @@ class FormTypeTest extends BaseTypeTest
public function testSubmitWithEmptyDataPassesEmptyStringToTransformerIfNotCompound() public function testSubmitWithEmptyDataPassesEmptyStringToTransformerIfNotCompound()
{ {
$form = $this->factory->createBuilder('form') $form = $this->factory->createBuilder(static::TESTED_TYPE)
->addViewTransformer(new FixedDataTransformer(array( ->addViewTransformer(new FixedDataTransformer(array(
// required for the initial, internal setData(null) // required for the initial, internal setData(null)
null => 'null', '' => 'null',
// required to test that submit(null) is converted to '' // required to test that submit(null) is converted to ''
'empty' => '', 'empty' => '',
))) )))
->setCompound(false) ->setCompound(false)
->getForm(); ->getForm();
$this->assertNull($form->getData());
$this->assertNull($form->getNormData());
$this->assertSame('null', $form->getViewData());
$form->submit(null); $form->submit(null);
$this->assertSame('empty', $form->getData()); $this->assertSame('empty', $form->getData());
$this->assertSame('empty', $form->getNormData());
$this->assertSame('', $form->getViewData());
} }
public function testSubmitWithEmptyDataUsesEmptyDataOption() public function testSubmitWithEmptyDataUsesEmptyDataOption()
{ {
$author = new Author(); $author = new Author();
$builder = $this->factory->createBuilder('form', null, array( $form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'empty_data' => $author, 'empty_data' => $author,
)); ))
$builder->add('firstName', 'text'); ->add('firstName', TextTypeTest::TESTED_TYPE)
$form = $builder->getForm(); ->getForm();
$this->assertNull($form->getData());
$this->assertNull($form->getViewData());
$form->submit(array('firstName' => 'Bernhard')); $form->submit(array('firstName' => 'Bernhard'));
@ -315,62 +332,34 @@ class FormTypeTest extends BaseTypeTest
$this->assertEquals('Bernhard', $author->firstName); $this->assertEquals('Bernhard', $author->firstName);
} }
public function provideZeros()
{
return array(
array(0, '0'),
array('0', '0'),
array('00000', '00000'),
);
}
/**
* @dataProvider provideZeros
*
* @see https://github.com/symfony/symfony/issues/1986
*/
public function testSetDataThroughParamsWithZero($data, $dataAsString)
{
$form = $this->factory->create('form', null, array(
'data' => $data,
'compound' => false,
));
$view = $form->createView();
$this->assertFalse($form->isEmpty());
$this->assertSame($dataAsString, $view->vars['value']);
$this->assertSame($dataAsString, $form->getData());
}
/** /**
* @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
*/ */
public function testAttributesException() public function testAttributesException()
{ {
$this->factory->create('form', null, array('attr' => '')); $this->factory->create(static::TESTED_TYPE, null, array('attr' => ''));
} }
public function testNameCanBeEmptyString() public function testNameCanBeEmptyString()
{ {
$form = $this->factory->createNamed('', 'form'); $form = $this->factory->createNamed('', static::TESTED_TYPE);
$this->assertEquals('', $form->getName()); $this->assertEquals('', $form->getName());
} }
public function testSubformDoesntCallSetters() public function testSubformDoesntCallSettersForReferences()
{ {
$author = new FormTest_AuthorWithoutRefSetter(new Author()); $author = new FormTest_AuthorWithoutRefSetter(new Author());
$builder = $this->factory->createBuilder('form', $author); $builder = $this->factory->createBuilder(static::TESTED_TYPE, $author);
$builder->add('reference', 'form', array( $builder->add('reference', static::TESTED_TYPE, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
)); ));
$builder->get('reference')->add('firstName', 'text'); $builder->get('reference')->add('firstName', TextTypeTest::TESTED_TYPE);
$form = $builder->getForm(); $form = $builder->getForm();
$form->submit(array( $form->submit(array(
// reference has a getter, but not setter // reference has a getter, but no setter
'reference' => array( 'reference' => array(
'firstName' => 'Foo', 'firstName' => 'Foo',
), ),
@ -385,17 +374,17 @@ class FormTypeTest extends BaseTypeTest
$author = new FormTest_AuthorWithoutRefSetter(null); $author = new FormTest_AuthorWithoutRefSetter(null);
$newReference = new Author(); $newReference = new Author();
$builder = $this->factory->createBuilder('form', $author); $builder = $this->factory->createBuilder(static::TESTED_TYPE, $author);
$builder->add('referenceCopy', 'form', array( $builder->add('referenceCopy', static::TESTED_TYPE, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
)); ));
$builder->get('referenceCopy')->add('firstName', 'text'); $builder->get('referenceCopy')->add('firstName', TextTypeTest::TESTED_TYPE);
$form = $builder->getForm(); $form = $builder->getForm();
$form['referenceCopy']->setData($newReference); // new author object $form['referenceCopy']->setData($newReference); // new author object
$form->submit(array( $form->submit(array(
// referenceCopy has a getter that returns a copy // referenceCopy has a getter that returns a copy
'referenceCopy' => array( 'referenceCopy' => array(
'firstName' => 'Foo', 'firstName' => 'Foo',
), ),
@ -408,12 +397,12 @@ class FormTypeTest extends BaseTypeTest
{ {
$author = new FormTest_AuthorWithoutRefSetter(new Author()); $author = new FormTest_AuthorWithoutRefSetter(new Author());
$builder = $this->factory->createBuilder('form', $author); $builder = $this->factory->createBuilder(static::TESTED_TYPE, $author);
$builder->add('referenceCopy', 'form', array( $builder->add('referenceCopy', static::TESTED_TYPE, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'by_reference' => false, 'by_reference' => false,
)); ));
$builder->get('referenceCopy')->add('firstName', 'text'); $builder->get('referenceCopy')->add('firstName', TextTypeTest::TESTED_TYPE);
$form = $builder->getForm(); $form = $builder->getForm();
$form->submit(array( $form->submit(array(
@ -431,8 +420,8 @@ class FormTypeTest extends BaseTypeTest
{ {
$author = new FormTest_AuthorWithoutRefSetter('scalar'); $author = new FormTest_AuthorWithoutRefSetter('scalar');
$builder = $this->factory->createBuilder('form', $author); $builder = $this->factory->createBuilder(static::TESTED_TYPE, $author);
$builder->add('referenceCopy', 'form'); $builder->add('referenceCopy', static::TESTED_TYPE);
$builder->get('referenceCopy')->addViewTransformer(new CallbackTransformer( $builder->get('referenceCopy')->addViewTransformer(new CallbackTransformer(
function () {}, function () {},
function ($value) { // reverseTransform function ($value) { // reverseTransform
@ -455,9 +444,9 @@ class FormTypeTest extends BaseTypeTest
$ref2 = new Author(); $ref2 = new Author();
$author = array('referenceCopy' => $ref1); $author = array('referenceCopy' => $ref1);
$builder = $this->factory->createBuilder('form'); $builder = $this->factory->createBuilder(static::TESTED_TYPE);
$builder->setData($author); $builder->setData($author);
$builder->add('referenceCopy', 'form'); $builder->add('referenceCopy', static::TESTED_TYPE);
$builder->get('referenceCopy')->addViewTransformer(new CallbackTransformer( $builder->get('referenceCopy')->addViewTransformer(new CallbackTransformer(
function () {}, function () {},
function ($value) use ($ref2) { // reverseTransform function ($value) use ($ref2) { // reverseTransform
@ -467,7 +456,7 @@ class FormTypeTest extends BaseTypeTest
$form = $builder->getForm(); $form = $builder->getForm();
$form->submit(array( $form->submit(array(
'referenceCopy' => array('a' => 'b'), // doesn't matter actually 'referenceCopy' => array(), // doesn't matter actually
)); ));
// the new reference was inserted into the array // the new reference was inserted into the array
@ -477,9 +466,9 @@ class FormTypeTest extends BaseTypeTest
public function testPassMultipartTrueIfAnyChildIsMultipartToView() public function testPassMultipartTrueIfAnyChildIsMultipartToView()
{ {
$view = $this->factory->createBuilder('form') $view = $this->factory->createBuilder(static::TESTED_TYPE)
->add('foo', 'text') ->add('foo', TextTypeTest::TESTED_TYPE)
->add('bar', 'file') ->add('bar', FileTypeTest::TESTED_TYPE)
->getForm() ->getForm()
->createView(); ->createView();
@ -488,8 +477,8 @@ class FormTypeTest extends BaseTypeTest
public function testViewIsNotRenderedByDefault() public function testViewIsNotRenderedByDefault()
{ {
$view = $this->factory->createBuilder('form') $view = $this->factory->createBuilder(static::TESTED_TYPE)
->add('foo', 'form') ->add('foo', static::TESTED_TYPE)
->getForm() ->getForm()
->createView(); ->createView();
@ -498,16 +487,14 @@ class FormTypeTest extends BaseTypeTest
public function testErrorBubblingIfCompound() public function testErrorBubblingIfCompound()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE);
'compound' => true,
));
$this->assertTrue($form->getConfig()->getErrorBubbling()); $this->assertTrue($form->getConfig()->getErrorBubbling());
} }
public function testNoErrorBubblingIfNotCompound() public function testNoErrorBubblingIfNotCompound()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'compound' => false, 'compound' => false,
)); ));
@ -516,7 +503,7 @@ class FormTypeTest extends BaseTypeTest
public function testOverrideErrorBubbling() public function testOverrideErrorBubbling()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'compound' => false, 'compound' => false,
'error_bubbling' => true, 'error_bubbling' => true,
)); ));
@ -526,7 +513,7 @@ class FormTypeTest extends BaseTypeTest
public function testPropertyPath() public function testPropertyPath()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'property_path' => 'foo', 'property_path' => 'foo',
)); ));
@ -536,7 +523,7 @@ class FormTypeTest extends BaseTypeTest
public function testPropertyPathNullImpliesDefault() public function testPropertyPathNullImpliesDefault()
{ {
$form = $this->factory->createNamed('name', 'form', null, array( $form = $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'property_path' => null, 'property_path' => null,
)); ));
@ -546,7 +533,7 @@ class FormTypeTest extends BaseTypeTest
public function testNotMapped() public function testNotMapped()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'property_path' => 'foo', 'property_path' => 'foo',
'mapped' => false, 'mapped' => false,
)); ));
@ -557,38 +544,40 @@ class FormTypeTest extends BaseTypeTest
public function testViewValidNotSubmitted() public function testViewValidNotSubmitted()
{ {
$form = $this->factory->create('form'); $view = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView();
$this->assertTrue($view->vars['valid']); $this->assertTrue($view->vars['valid']);
} }
public function testViewNotValidSubmitted() public function testViewNotValidSubmitted()
{ {
$form = $this->factory->create('form'); $form = $this->factory->create(static::TESTED_TYPE);
$form->submit(array()); $form->submit(array());
$form->addError(new FormError('An error')); $form->addError(new FormError('An error'));
$view = $form->createView();
$this->assertFalse($view->vars['valid']); $this->assertFalse($form->createView()->vars['valid']);
} }
public function testViewSubmittedNotSubmitted() public function testViewSubmittedNotSubmitted()
{ {
$form = $this->factory->create('form'); $view = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView();
$this->assertFalse($view->vars['submitted']); $this->assertFalse($view->vars['submitted']);
} }
public function testViewSubmittedSubmitted() public function testViewSubmittedSubmitted()
{ {
$form = $this->factory->create('form'); $form = $this->factory->create(static::TESTED_TYPE);
$form->submit(array()); $form->submit(array());
$view = $form->createView();
$this->assertTrue($view->vars['submitted']); $this->assertTrue($form->createView()->vars['submitted']);
} }
public function testDataOptionSupersedesSetDataCalls() public function testDataOptionSupersedesSetDataCalls()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'data' => 'default', 'data' => 'default',
'compound' => false, 'compound' => false,
)); ));
@ -598,9 +587,20 @@ class FormTypeTest extends BaseTypeTest
$this->assertSame('default', $form->getData()); $this->assertSame('default', $form->getData());
} }
public function testPassedDataSupersedesSetDataCalls()
{
$form = $this->factory->create(static::TESTED_TYPE, 'default', array(
'compound' => false,
));
$form->setData('foobar');
$this->assertSame('default', $form->getData());
}
public function testDataOptionSupersedesSetDataCallsIfNull() public function testDataOptionSupersedesSetDataCallsIfNull()
{ {
$form = $this->factory->create('form', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'data' => null, 'data' => null,
'compound' => false, 'compound' => false,
)); ));
@ -612,22 +612,25 @@ class FormTypeTest extends BaseTypeTest
public function testNormDataIsPassedToView() public function testNormDataIsPassedToView()
{ {
$view = $this->factory->createBuilder('form') $view = $this->factory->createBuilder(static::TESTED_TYPE)
->addViewTransformer(new FixedDataTransformer(array( ->addModelTransformer(new FixedDataTransformer(array(
'foo' => 'bar', 'foo' => 'bar',
))) )))
->addViewTransformer(new FixedDataTransformer(array(
'bar' => 'baz',
)))
->setData('foo') ->setData('foo')
->getForm() ->getForm()
->createView(); ->createView();
$this->assertSame('foo', $view->vars['data']); $this->assertSame('bar', $view->vars['data']);
$this->assertSame('bar', $view->vars['value']); $this->assertSame('baz', $view->vars['value']);
} }
// https://github.com/symfony/symfony/issues/6862 // https://github.com/symfony/symfony/issues/6862
public function testPassZeroLabelToView() public function testPassZeroLabelToView()
{ {
$view = $this->factory->create('form', null, array( $view = $this->factory->create(static::TESTED_TYPE, null, array(
'label' => '0', 'label' => '0',
)) ))
->createView(); ->createView();
@ -640,7 +643,7 @@ class FormTypeTest extends BaseTypeTest
*/ */
public function testCanGetErrorsWhenButtonInForm() public function testCanGetErrorsWhenButtonInForm()
{ {
$builder = $this->factory->createBuilder('form', null, array( $builder = $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
'required' => false, 'required' => false,
)); ));
@ -652,8 +655,8 @@ class FormTypeTest extends BaseTypeTest
$form->getErrorsAsString(); $form->getErrorsAsString();
} }
protected function getTestedType() public function testSubmitNull($expected = null, $norm = null, $view = null)
{ {
return 'form'; parent::testSubmitNull(array(), array(), array());
} }
} }

View File

@ -11,11 +11,12 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class IntegerTypeTest extends TestCase class IntegerTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'integer';
protected function setUp() protected function setUp()
{ {
IntlTestHelper::requireIntl($this, false); IntlTestHelper::requireIntl($this, false);
@ -25,11 +26,16 @@ class IntegerTypeTest extends TestCase
public function testSubmitCastsToInteger() public function testSubmitCastsToInteger()
{ {
$form = $this->factory->create('integer'); $form = $this->factory->create(static::TESTED_TYPE);
$form->submit('1.678'); $form->submit('1.678');
$this->assertSame(1, $form->getData()); $this->assertSame(1, $form->getData());
$this->assertSame('1', $form->getViewData()); $this->assertSame('1', $form->getViewData());
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,12 +11,13 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class LanguageTypeTest extends TestCase class LanguageTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'language';
protected function setUp() protected function setUp()
{ {
IntlTestHelper::requireIntl($this, false); IntlTestHelper::requireIntl($this, false);
@ -26,9 +27,8 @@ class LanguageTypeTest extends TestCase
public function testCountriesAreSelectable() public function testCountriesAreSelectable()
{ {
$form = $this->factory->create('language'); $choices = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
$this->assertContains(new ChoiceView('en', 'en', 'English'), $choices, '', false, false); $this->assertContains(new ChoiceView('en', 'en', 'English'), $choices, '', false, false);
$this->assertContains(new ChoiceView('en_GB', 'en_GB', 'British English'), $choices, '', false, false); $this->assertContains(new ChoiceView('en_GB', 'en_GB', 'British English'), $choices, '', false, false);
@ -39,10 +39,14 @@ class LanguageTypeTest extends TestCase
public function testMultipleLanguagesIsNotIncluded() public function testMultipleLanguagesIsNotIncluded()
{ {
$form = $this->factory->create('language', 'language'); $choices = $this->factory->create(static::TESTED_TYPE, 'language')
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
$this->assertNotContains(new ChoiceView('mul', 'mul', 'Mehrsprachig'), $choices, '', false, false); $this->assertNotContains(new ChoiceView('mul', 'mul', 'Mehrsprachig'), $choices, '', false, false);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,12 +11,13 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class LocaleTypeTest extends TestCase class LocaleTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'locale';
protected function setUp() protected function setUp()
{ {
IntlTestHelper::requireIntl($this, false); IntlTestHelper::requireIntl($this, false);
@ -26,12 +27,16 @@ class LocaleTypeTest extends TestCase
public function testLocalesAreSelectable() public function testLocalesAreSelectable()
{ {
$form = $this->factory->create('locale'); $choices = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
$this->assertContains(new ChoiceView('en', 'en', 'English'), $choices, '', false, false); $this->assertContains(new ChoiceView('en', 'en', 'English'), $choices, '', false, false);
$this->assertContains(new ChoiceView('en_GB', 'en_GB', 'English (United Kingdom)'), $choices, '', false, false); $this->assertContains(new ChoiceView('en_GB', 'en_GB', 'English (United Kingdom)'), $choices, '', false, false);
$this->assertContains(new ChoiceView('zh_Hant_MO', 'zh_Hant_MO', 'Chinese (Traditional, Macau SAR China)'), $choices, '', false, false); $this->assertContains(new ChoiceView('zh_Hant_MO', 'zh_Hant_MO', 'Chinese (Traditional, Macau SAR China)'), $choices, '', false, false);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,11 +11,12 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class MoneyTypeTest extends TestCase class MoneyTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'money';
protected function setUp() protected function setUp()
{ {
// we test against different locales, so we need the full // we test against different locales, so we need the full
@ -29,8 +30,8 @@ class MoneyTypeTest extends TestCase
{ {
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form = $this->factory->create('money'); $view = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView();
$this->assertSame('{{ widget }} €', $view->vars['money_pattern']); $this->assertSame('{{ widget }} €', $view->vars['money_pattern']);
} }
@ -39,8 +40,9 @@ class MoneyTypeTest extends TestCase
{ {
\Locale::setDefault('en_US'); \Locale::setDefault('en_US');
$form = $this->factory->create('money', null, array('currency' => 'JPY')); $view = $this->factory->create(static::TESTED_TYPE, null, array('currency' => 'JPY'))
$view = $form->createView(); ->createView();
$this->assertTrue((bool) strstr($view->vars['money_pattern'], '¥')); $this->assertTrue((bool) strstr($view->vars['money_pattern'], '¥'));
} }
@ -49,12 +51,15 @@ class MoneyTypeTest extends TestCase
{ {
\Locale::setDefault('de_DE'); \Locale::setDefault('de_DE');
$form1 = $this->factory->create('money', null, array('currency' => 'GBP')); $view1 = $this->factory->create(static::TESTED_TYPE, null, array('currency' => 'GBP'))->createView();
$form2 = $this->factory->create('money', null, array('currency' => 'EUR')); $view2 = $this->factory->create(static::TESTED_TYPE, null, array('currency' => 'EUR'))->createView();
$view1 = $form1->createView();
$view2 = $form2->createView();
$this->assertSame('{{ widget }} £', $view1->vars['money_pattern']); $this->assertSame('{{ widget }} £', $view1->vars['money_pattern']);
$this->assertSame('{{ widget }} €', $view2->vars['money_pattern']); $this->assertSame('{{ widget }} €', $view2->vars['money_pattern']);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,11 +11,12 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\Intl\Util\IntlTestHelper;
class NumberTypeTest extends TestCase class NumberTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'number';
protected function setUp() protected function setUp()
{ {
parent::setUp(); parent::setUp();
@ -28,37 +29,38 @@ class NumberTypeTest extends TestCase
public function testDefaultFormatting() public function testDefaultFormatting()
{ {
$form = $this->factory->create('number'); $form = $this->factory->create(static::TESTED_TYPE);
$form->setData('12345.67890'); $form->setData('12345.67890');
$view = $form->createView();
$this->assertSame('12345,679', $view->vars['value']); $this->assertSame('12345,679', $form->createView()->vars['value']);
} }
public function testDefaultFormattingWithGrouping() public function testDefaultFormattingWithGrouping()
{ {
$form = $this->factory->create('number', null, array('grouping' => true)); $form = $this->factory->create(static::TESTED_TYPE, null, array('grouping' => true));
$form->setData('12345.67890'); $form->setData('12345.67890');
$view = $form->createView();
$this->assertSame('12.345,679', $view->vars['value']); $this->assertSame('12.345,679', $form->createView()->vars['value']);
} }
public function testDefaultFormattingWithScale() public function testDefaultFormattingWithScale()
{ {
$form = $this->factory->create('number', null, array('scale' => 2)); $form = $this->factory->create(static::TESTED_TYPE, null, array('scale' => 2));
$form->setData('12345.67890'); $form->setData('12345.67890');
$view = $form->createView();
$this->assertSame('12345,68', $view->vars['value']); $this->assertSame('12345,68', $form->createView()->vars['value']);
} }
public function testDefaultFormattingWithRounding() public function testDefaultFormattingWithRounding()
{ {
$form = $this->factory->create('number', null, array('scale' => 0, 'rounding_mode' => \NumberFormatter::ROUND_UP)); $form = $this->factory->create(static::TESTED_TYPE, null, array('scale' => 0, 'rounding_mode' => \NumberFormatter::ROUND_UP));
$form->setData('12345.54321'); $form->setData('12345.54321');
$view = $form->createView();
$this->assertSame('12346', $view->vars['value']); $this->assertSame('12346', $form->createView()->vars['value']);
}
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
} }
} }

View File

@ -11,43 +11,44 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase; class PasswordTypeTest extends BaseTypeTest
class PasswordTypeTest extends TypeTestCase
{ {
const TESTED_TYPE = 'password';
public function testEmptyIfNotSubmitted() public function testEmptyIfNotSubmitted()
{ {
$form = $this->factory->create('password'); $form = $this->factory->create(static::TESTED_TYPE);
$form->setData('pAs5w0rd'); $form->setData('pAs5w0rd');
$view = $form->createView();
$this->assertSame('', $view->vars['value']); $this->assertSame('', $form->createView()->vars['value']);
} }
public function testEmptyIfSubmitted() public function testEmptyIfSubmitted()
{ {
$form = $this->factory->create('password'); $form = $this->factory->create(static::TESTED_TYPE);
$form->submit('pAs5w0rd'); $form->submit('pAs5w0rd');
$view = $form->createView();
$this->assertSame('', $view->vars['value']); $this->assertSame('', $form->createView()->vars['value']);
} }
public function testNotEmptyIfSubmittedAndNotAlwaysEmpty() public function testNotEmptyIfSubmittedAndNotAlwaysEmpty()
{ {
$form = $this->factory->create('password', null, array('always_empty' => false)); $form = $this->factory->create(static::TESTED_TYPE, null, array('always_empty' => false));
$form->submit('pAs5w0rd'); $form->submit('pAs5w0rd');
$view = $form->createView();
$this->assertSame('pAs5w0rd', $view->vars['value']); $this->assertSame('pAs5w0rd', $form->createView()->vars['value']);
} }
public function testNotTrimmed() public function testNotTrimmed()
{ {
$form = $this->factory->create('password', null); $form = $this->factory->create(static::TESTED_TYPE, null);
$form->submit(' pAs5w0rd '); $form->submit(' pAs5w0rd ');
$data = $form->getData();
$this->assertSame(' pAs5w0rd ', $data); $this->assertSame(' pAs5w0rd ', $form->getData());
}
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
} }
} }

View File

@ -11,63 +11,67 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase; use Symfony\Component\Form\Form;
class RepeatedTypeTest extends TypeTestCase class RepeatedTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'repeated';
/**
* @var Form
*/
protected $form; protected $form;
protected function setUp() protected function setUp()
{ {
parent::setUp(); parent::setUp();
$this->form = $this->factory->create('repeated', null, array( $this->form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$this->form->setData(null);
} }
public function testSetData() public function testSetData()
{ {
$this->form->setData('foobar'); $this->form->setData('foobar');
$this->assertEquals('foobar', $this->form['first']->getData()); $this->assertSame('foobar', $this->form['first']->getData());
$this->assertEquals('foobar', $this->form['second']->getData()); $this->assertSame('foobar', $this->form['second']->getData());
} }
public function testSetOptions() public function testSetOptions()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'options' => array('label' => 'Global'), 'options' => array('label' => 'Global'),
)); ));
$this->assertEquals('Global', $form['first']->getConfig()->getOption('label')); $this->assertSame('Global', $form['first']->getConfig()->getOption('label'));
$this->assertEquals('Global', $form['second']->getConfig()->getOption('label')); $this->assertSame('Global', $form['second']->getConfig()->getOption('label'));
$this->assertTrue($form['first']->isRequired()); $this->assertTrue($form['first']->isRequired());
$this->assertTrue($form['second']->isRequired()); $this->assertTrue($form['second']->isRequired());
} }
public function testSetOptionsPerChild() public function testSetOptionsPerChild()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
// the global required value cannot be overridden // the global required value cannot be overridden
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'first_options' => array('label' => 'Test', 'required' => false), 'first_options' => array('label' => 'Test', 'required' => false),
'second_options' => array('label' => 'Test2'), 'second_options' => array('label' => 'Test2'),
)); ));
$this->assertEquals('Test', $form['first']->getConfig()->getOption('label')); $this->assertSame('Test', $form['first']->getConfig()->getOption('label'));
$this->assertEquals('Test2', $form['second']->getConfig()->getOption('label')); $this->assertSame('Test2', $form['second']->getConfig()->getOption('label'));
$this->assertTrue($form['first']->isRequired()); $this->assertTrue($form['first']->isRequired());
$this->assertTrue($form['second']->isRequired()); $this->assertTrue($form['second']->isRequired());
} }
public function testSetRequired() public function testSetRequired()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
)); ));
$this->assertFalse($form['first']->isRequired()); $this->assertFalse($form['first']->isRequired());
@ -79,8 +83,8 @@ class RepeatedTypeTest extends TypeTestCase
*/ */
public function testSetInvalidOptions() public function testSetInvalidOptions()
{ {
$this->factory->create('repeated', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'options' => 'bad value', 'options' => 'bad value',
)); ));
} }
@ -90,8 +94,8 @@ class RepeatedTypeTest extends TypeTestCase
*/ */
public function testSetInvalidFirstOptions() public function testSetInvalidFirstOptions()
{ {
$this->factory->create('repeated', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'first_options' => 'bad value', 'first_options' => 'bad value',
)); ));
} }
@ -101,15 +105,15 @@ class RepeatedTypeTest extends TypeTestCase
*/ */
public function testSetInvalidSecondOptions() public function testSetInvalidSecondOptions()
{ {
$this->factory->create('repeated', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'second_options' => 'bad value', 'second_options' => 'bad value',
)); ));
} }
public function testSetErrorBubblingToTrue() public function testSetErrorBubblingToTrue()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'error_bubbling' => true, 'error_bubbling' => true,
)); ));
@ -120,7 +124,7 @@ class RepeatedTypeTest extends TypeTestCase
public function testSetErrorBubblingToFalse() public function testSetErrorBubblingToFalse()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'error_bubbling' => false, 'error_bubbling' => false,
)); ));
@ -131,7 +135,7 @@ class RepeatedTypeTest extends TypeTestCase
public function testSetErrorBubblingIndividually() public function testSetErrorBubblingIndividually()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'error_bubbling' => true, 'error_bubbling' => true,
'options' => array('error_bubbling' => false), 'options' => array('error_bubbling' => false),
'second_options' => array('error_bubbling' => true), 'second_options' => array('error_bubbling' => true),
@ -144,14 +148,14 @@ class RepeatedTypeTest extends TypeTestCase
public function testSetOptionsPerChildAndOverwrite() public function testSetOptionsPerChildAndOverwrite()
{ {
$form = $this->factory->create('repeated', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'type' => 'text', 'type' => TextTypeTest::TESTED_TYPE,
'options' => array('label' => 'Label'), 'options' => array('label' => 'Label'),
'second_options' => array('label' => 'Second label'), 'second_options' => array('label' => 'Second label'),
)); ));
$this->assertEquals('Label', $form['first']->getConfig()->getOption('label')); $this->assertSame('Label', $form['first']->getConfig()->getOption('label'));
$this->assertEquals('Second label', $form['second']->getConfig()->getOption('label')); $this->assertSame('Second label', $form['second']->getConfig()->getOption('label'));
$this->assertTrue($form['first']->isRequired()); $this->assertTrue($form['first']->isRequired());
$this->assertTrue($form['second']->isRequired()); $this->assertTrue($form['second']->isRequired());
} }
@ -162,10 +166,10 @@ class RepeatedTypeTest extends TypeTestCase
$this->form->submit($input); $this->form->submit($input);
$this->assertEquals('foo', $this->form['first']->getViewData()); $this->assertSame('foo', $this->form['first']->getViewData());
$this->assertEquals('bar', $this->form['second']->getViewData()); $this->assertSame('bar', $this->form['second']->getViewData());
$this->assertFalse($this->form->isSynchronized()); $this->assertFalse($this->form->isSynchronized());
$this->assertEquals($input, $this->form->getViewData()); $this->assertSame($input, $this->form->getViewData());
$this->assertNull($this->form->getData()); $this->assertNull($this->form->getData());
} }
@ -175,10 +179,15 @@ class RepeatedTypeTest extends TypeTestCase
$this->form->submit($input); $this->form->submit($input);
$this->assertEquals('foo', $this->form['first']->getViewData()); $this->assertSame('foo', $this->form['first']->getViewData());
$this->assertEquals('foo', $this->form['second']->getViewData()); $this->assertSame('foo', $this->form['second']->getViewData());
$this->assertTrue($this->form->isSynchronized()); $this->assertTrue($this->form->isSynchronized());
$this->assertEquals($input, $this->form->getViewData()); $this->assertSame($input, $this->form->getViewData());
$this->assertEquals('foo', $this->form->getData()); $this->assertSame('foo', $this->form->getData());
}
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, array('first' => null, 'second' => null));
} }
} }

View File

@ -11,28 +11,28 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
/** /**
* @author Bernhard Schussek <bschussek@gmail.com> * @author Bernhard Schussek <bschussek@gmail.com>
*/ */
class SubmitTypeTest extends TestCase class SubmitTypeTest extends ButtonTypeTest
{ {
const TESTED_TYPE = 'submit';
public function testCreateSubmitButtonInstances() public function testCreateSubmitButtonInstances()
{ {
$this->assertInstanceOf('Symfony\Component\Form\SubmitButton', $this->factory->create('submit')); $this->assertInstanceOf('Symfony\Component\Form\SubmitButton', $this->factory->create(static::TESTED_TYPE));
} }
public function testNotClickedByDefault() public function testNotClickedByDefault()
{ {
$button = $this->factory->create('submit'); $button = $this->factory->create(static::TESTED_TYPE);
$this->assertFalse($button->isClicked()); $this->assertFalse($button->isClicked());
} }
public function testNotClickedIfSubmittedWithNull() public function testNotClickedIfSubmittedWithNull()
{ {
$button = $this->factory->create('submit'); $button = $this->factory->create(static::TESTED_TYPE);
$button->submit(null); $button->submit(null);
$this->assertFalse($button->isClicked()); $this->assertFalse($button->isClicked());
@ -40,7 +40,7 @@ class SubmitTypeTest extends TestCase
public function testClickedIfSubmittedWithEmptyString() public function testClickedIfSubmittedWithEmptyString()
{ {
$button = $this->factory->create('submit'); $button = $this->factory->create(static::TESTED_TYPE);
$button->submit(''); $button->submit('');
$this->assertTrue($button->isClicked()); $this->assertTrue($button->isClicked());
@ -48,7 +48,7 @@ class SubmitTypeTest extends TestCase
public function testClickedIfSubmittedWithUnemptyString() public function testClickedIfSubmittedWithUnemptyString()
{ {
$button = $this->factory->create('submit'); $button = $this->factory->create(static::TESTED_TYPE);
$button->submit('foo'); $button->submit('foo');
$this->assertTrue($button->isClicked()); $this->assertTrue($button->isClicked());
@ -57,9 +57,9 @@ class SubmitTypeTest extends TestCase
public function testSubmitCanBeAddedToForm() public function testSubmitCanBeAddedToForm()
{ {
$form = $this->factory $form = $this->factory
->createBuilder('form') ->createBuilder(FormTypeTest::TESTED_TYPE)
->getForm(); ->getForm();
$this->assertSame($form, $form->add('send', 'submit')); $this->assertSame($form, $form->add('send', static::TESTED_TYPE));
} }
} }

View File

@ -0,0 +1,60 @@
<?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\Type;
class TextTypeTest extends BaseTypeTest
{
const TESTED_TYPE = 'text';
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
public function testSubmitNullReturnsNullWithEmptyDataAsString()
{
$form = $this->factory->create(static::TESTED_TYPE, 'name', array(
'empty_data' => '',
));
$form->submit(null);
$this->assertNull($form->getData());
}
public function provideZeros()
{
return array(
array(0, '0'),
array('0', '0'),
array('00000', '00000'),
);
}
/**
* @dataProvider provideZeros
*
* @see https://github.com/symfony/symfony/issues/1986
*/
public function testSetDataThroughParamsWithZero($data, $dataAsString)
{
$form = $this->factory->create(static::TESTED_TYPE, null, array(
'data' => $data,
));
$view = $form->createView();
$this->assertFalse($form->isEmpty());
$this->assertSame($dataAsString, $view->vars['value']);
$this->assertSame($dataAsString, $form->getData());
}
}

View File

@ -13,13 +13,14 @@ namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\Form\Test\TypeTestCase as TestCase;
class TimeTypeTest extends TestCase class TimeTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'time';
public function testSubmitDateTime() public function testSubmitDateTime()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'datetime', 'input' => 'datetime',
@ -40,7 +41,7 @@ class TimeTypeTest extends TestCase
public function testSubmitString() public function testSubmitString()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -59,7 +60,7 @@ class TimeTypeTest extends TestCase
public function testSubmitTimestamp() public function testSubmitTimestamp()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'timestamp', 'input' => 'timestamp',
@ -80,7 +81,7 @@ class TimeTypeTest extends TestCase
public function testSubmitArray() public function testSubmitArray()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'array', 'input' => 'array',
@ -99,7 +100,7 @@ class TimeTypeTest extends TestCase
public function testSubmitDatetimeSingleText() public function testSubmitDatetimeSingleText()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'datetime', 'input' => 'datetime',
@ -114,7 +115,7 @@ class TimeTypeTest extends TestCase
public function testSubmitDatetimeSingleTextWithoutMinutes() public function testSubmitDatetimeSingleTextWithoutMinutes()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'datetime', 'input' => 'datetime',
@ -130,7 +131,7 @@ class TimeTypeTest extends TestCase
public function testSubmitArraySingleText() public function testSubmitArraySingleText()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'array', 'input' => 'array',
@ -150,7 +151,7 @@ class TimeTypeTest extends TestCase
public function testSubmitArraySingleTextWithoutMinutes() public function testSubmitArraySingleTextWithoutMinutes()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'array', 'input' => 'array',
@ -170,7 +171,7 @@ class TimeTypeTest extends TestCase
public function testSubmitArraySingleTextWithSeconds() public function testSubmitArraySingleTextWithSeconds()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'array', 'input' => 'array',
@ -192,7 +193,7 @@ class TimeTypeTest extends TestCase
public function testSubmitStringSingleText() public function testSubmitStringSingleText()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -207,7 +208,7 @@ class TimeTypeTest extends TestCase
public function testSubmitStringSingleTextWithoutMinutes() public function testSubmitStringSingleTextWithoutMinutes()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -223,7 +224,7 @@ class TimeTypeTest extends TestCase
public function testSubmitWithSecondsAndBrowserOmissionSeconds() public function testSubmitWithSecondsAndBrowserOmissionSeconds()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'string', 'input' => 'string',
@ -239,7 +240,7 @@ class TimeTypeTest extends TestCase
public function testSetDataWithoutMinutes() public function testSetDataWithoutMinutes()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'datetime', 'input' => 'datetime',
@ -253,7 +254,7 @@ class TimeTypeTest extends TestCase
public function testSetDataWithSeconds() public function testSetDataWithSeconds()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'UTC', 'model_timezone' => 'UTC',
'view_timezone' => 'UTC', 'view_timezone' => 'UTC',
'input' => 'datetime', 'input' => 'datetime',
@ -267,7 +268,7 @@ class TimeTypeTest extends TestCase
public function testSetDataDifferentTimezones() public function testSetDataDifferentTimezones()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'America/New_York', 'model_timezone' => 'America/New_York',
'view_timezone' => 'Asia/Hong_Kong', 'view_timezone' => 'Asia/Hong_Kong',
'input' => 'string', 'input' => 'string',
@ -293,7 +294,7 @@ class TimeTypeTest extends TestCase
public function testSetDataDifferentTimezonesDateTime() public function testSetDataDifferentTimezonesDateTime()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'model_timezone' => 'America/New_York', 'model_timezone' => 'America/New_York',
'view_timezone' => 'Asia/Hong_Kong', 'view_timezone' => 'Asia/Hong_Kong',
'input' => 'datetime', 'input' => 'datetime',
@ -320,7 +321,7 @@ class TimeTypeTest extends TestCase
public function testHoursOption() public function testHoursOption()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'hours' => array(6, 7), 'hours' => array(6, 7),
)); ));
@ -334,7 +335,7 @@ class TimeTypeTest extends TestCase
public function testIsMinuteWithinRangeReturnsTrueIfWithin() public function testIsMinuteWithinRangeReturnsTrueIfWithin()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'minutes' => array(6, 7), 'minutes' => array(6, 7),
)); ));
@ -348,7 +349,7 @@ class TimeTypeTest extends TestCase
public function testIsSecondWithinRangeReturnsTrueIfWithin() public function testIsSecondWithinRangeReturnsTrueIfWithin()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'seconds' => array(6, 7), 'seconds' => array(6, 7),
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -365,7 +366,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
)); ));
@ -381,7 +382,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -399,7 +400,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
)); ));
@ -415,7 +416,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -433,7 +434,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -451,7 +452,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -469,7 +470,7 @@ class TimeTypeTest extends TestCase
{ {
$this->markTestIncomplete('Needs to be reimplemented using validators'); $this->markTestIncomplete('Needs to be reimplemented using validators');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'choice', 'widget' => 'choice',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -487,12 +488,12 @@ class TimeTypeTest extends TestCase
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create('time', new \DateTime()); $this->factory->create(static::TESTED_TYPE, new \DateTime());
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
)); ));
@ -502,7 +503,7 @@ class TimeTypeTest extends TestCase
public function testSingleTextWidgetWithSecondsShouldHaveRightStepAttribute() public function testSingleTextWidgetWithSecondsShouldHaveRightStepAttribute()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -514,7 +515,7 @@ class TimeTypeTest extends TestCase
public function testSingleTextWidgetWithSecondsShouldNotOverrideStepAttribute() public function testSingleTextWidgetWithSecondsShouldNotOverrideStepAttribute()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'with_seconds' => true, 'with_seconds' => true,
'attr' => array( 'attr' => array(
@ -529,7 +530,7 @@ class TimeTypeTest extends TestCase
public function testDontPassHtml5TypeIfHtml5NotAllowed() public function testDontPassHtml5TypeIfHtml5NotAllowed()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => 'single_text', 'widget' => 'single_text',
'html5' => false, 'html5' => false,
)); ));
@ -540,7 +541,7 @@ class TimeTypeTest extends TestCase
public function testPassDefaultPlaceholderToViewIfNotRequired() public function testPassDefaultPlaceholderToViewIfNotRequired()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -553,7 +554,7 @@ class TimeTypeTest extends TestCase
public function testPassNoPlaceholderToViewIfRequired() public function testPassNoPlaceholderToViewIfRequired()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -566,7 +567,7 @@ class TimeTypeTest extends TestCase
public function testPassPlaceholderAsString() public function testPassPlaceholderAsString()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => 'Empty', 'placeholder' => 'Empty',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -582,7 +583,7 @@ class TimeTypeTest extends TestCase
*/ */
public function testPassEmptyValueBC() public function testPassEmptyValueBC()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'empty_value' => 'Empty', 'empty_value' => 'Empty',
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -598,7 +599,7 @@ class TimeTypeTest extends TestCase
public function testPassPlaceholderAsArray() public function testPassPlaceholderAsArray()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'placeholder' => array( 'placeholder' => array(
'hour' => 'Empty hour', 'hour' => 'Empty hour',
'minute' => 'Empty minute', 'minute' => 'Empty minute',
@ -615,7 +616,7 @@ class TimeTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired() public function testPassPlaceholderAsPartialArrayAddEmptyIfNotRequired()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => false, 'required' => false,
'placeholder' => array( 'placeholder' => array(
'hour' => 'Empty hour', 'hour' => 'Empty hour',
@ -632,7 +633,7 @@ class TimeTypeTest extends TestCase
public function testPassPlaceholderAsPartialArrayAddNullIfRequired() public function testPassPlaceholderAsPartialArrayAddNullIfRequired()
{ {
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'required' => true, 'required' => true,
'placeholder' => array( 'placeholder' => array(
'hour' => 'Empty hour', 'hour' => 'Empty hour',
@ -661,7 +662,7 @@ class TimeTypeTest extends TestCase
public function testHourErrorsBubbleUp($widget) public function testHourErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
)); ));
$form['hour']->addError($error); $form['hour']->addError($error);
@ -676,7 +677,7 @@ class TimeTypeTest extends TestCase
public function testMinuteErrorsBubbleUp($widget) public function testMinuteErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
)); ));
$form['minute']->addError($error); $form['minute']->addError($error);
@ -691,7 +692,7 @@ class TimeTypeTest extends TestCase
public function testSecondErrorsBubbleUp($widget) public function testSecondErrorsBubbleUp($widget)
{ {
$error = new FormError('Invalid!'); $error = new FormError('Invalid!');
$form = $this->factory->create('time', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'widget' => $widget, 'widget' => $widget,
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -706,7 +707,7 @@ class TimeTypeTest extends TestCase
*/ */
public function testInitializeWithSecondsAndWithoutMinutes() public function testInitializeWithSecondsAndWithoutMinutes()
{ {
$this->factory->create('time', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'with_minutes' => false, 'with_minutes' => false,
'with_seconds' => true, 'with_seconds' => true,
)); ));
@ -717,7 +718,7 @@ class TimeTypeTest extends TestCase
*/ */
public function testThrowExceptionIfHoursIsInvalid() public function testThrowExceptionIfHoursIsInvalid()
{ {
$this->factory->create('time', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'hours' => 'bad value', 'hours' => 'bad value',
)); ));
} }
@ -727,7 +728,7 @@ class TimeTypeTest extends TestCase
*/ */
public function testThrowExceptionIfMinutesIsInvalid() public function testThrowExceptionIfMinutesIsInvalid()
{ {
$this->factory->create('time', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'minutes' => 'bad value', 'minutes' => 'bad value',
)); ));
} }
@ -737,8 +738,15 @@ class TimeTypeTest extends TestCase
*/ */
public function testThrowExceptionIfSecondsIsInvalid() public function testThrowExceptionIfSecondsIsInvalid()
{ {
$this->factory->create('time', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'seconds' => 'bad value', 'seconds' => 'bad value',
)); ));
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
$view = array('hour' => '', 'minute' => '');
parent::testSubmitNull($expected, $norm, $view);
}
} }

View File

@ -12,15 +12,15 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\ChoiceList\View\ChoiceView;
use Symfony\Component\Form\Test\TypeTestCase;
class TimezoneTypeTest extends TypeTestCase class TimezoneTypeTest extends BaseTypeTest
{ {
const TESTED_TYPE = 'timezone';
public function testTimezonesAreSelectable() public function testTimezonesAreSelectable()
{ {
$form = $this->factory->create('timezone'); $choices = $this->factory->create(static::TESTED_TYPE)
$view = $form->createView(); ->createView()->vars['choices'];
$choices = $view->vars['choices'];
$this->assertArrayHasKey('Africa', $choices); $this->assertArrayHasKey('Africa', $choices);
$this->assertContains(new ChoiceView('Africa/Kinshasa', 'Africa/Kinshasa', 'Kinshasa'), $choices['Africa'], '', false, false); $this->assertContains(new ChoiceView('Africa/Kinshasa', 'Africa/Kinshasa', 'Kinshasa'), $choices['Africa'], '', false, false);
@ -28,4 +28,9 @@ class TimezoneTypeTest extends TypeTestCase
$this->assertArrayHasKey('America', $choices); $this->assertArrayHasKey('America', $choices);
$this->assertContains(new ChoiceView('America/New_York', 'America/New_York', 'New York'), $choices['America'], '', false, false); $this->assertContains(new ChoiceView('America/New_York', 'America/New_York', 'New York'), $choices['America'], '', false, false);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null)
{
parent::testSubmitNull($expected, $norm, '');
}
} }

View File

@ -11,13 +11,13 @@
namespace Symfony\Component\Form\Tests\Extension\Core\Type; namespace Symfony\Component\Form\Tests\Extension\Core\Type;
use Symfony\Component\Form\Test\TypeTestCase as TestCase; class UrlTypeTest extends TextTypeTest
class UrlTypeTest extends TestCase
{ {
const TESTED_TYPE = 'url';
public function testSubmitAddsDefaultProtocolIfNoneIsIncluded() public function testSubmitAddsDefaultProtocolIfNoneIsIncluded()
{ {
$form = $this->factory->create('url', 'name'); $form = $this->factory->create(static::TESTED_TYPE, 'name');
$form->submit('www.domain.com'); $form->submit('www.domain.com');
@ -27,7 +27,7 @@ class UrlTypeTest extends TestCase
public function testSubmitAddsNoDefaultProtocolIfAlreadyIncluded() public function testSubmitAddsNoDefaultProtocolIfAlreadyIncluded()
{ {
$form = $this->factory->create('url', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'default_protocol' => 'http', 'default_protocol' => 'http',
)); ));
@ -39,7 +39,7 @@ class UrlTypeTest extends TestCase
public function testSubmitAddsNoDefaultProtocolIfEmpty() public function testSubmitAddsNoDefaultProtocolIfEmpty()
{ {
$form = $this->factory->create('url', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'default_protocol' => 'http', 'default_protocol' => 'http',
)); ));
@ -51,7 +51,7 @@ class UrlTypeTest extends TestCase
public function testSubmitAddsNoDefaultProtocolIfNull() public function testSubmitAddsNoDefaultProtocolIfNull()
{ {
$form = $this->factory->create('url', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'default_protocol' => 'http', 'default_protocol' => 'http',
)); ));
@ -63,7 +63,7 @@ class UrlTypeTest extends TestCase
public function testSubmitAddsNoDefaultProtocolIfSetToNull() public function testSubmitAddsNoDefaultProtocolIfSetToNull()
{ {
$form = $this->factory->create('url', null, array( $form = $this->factory->create(static::TESTED_TYPE, null, array(
'default_protocol' => null, 'default_protocol' => null,
)); ));
@ -78,7 +78,7 @@ class UrlTypeTest extends TestCase
*/ */
public function testThrowExceptionIfDefaultProtocolIsInvalid() public function testThrowExceptionIfDefaultProtocolIsInvalid()
{ {
$this->factory->create('url', null, array( $this->factory->create(static::TESTED_TYPE, null, array(
'default_protocol' => array(), 'default_protocol' => array(),
)); ));
} }

View File

@ -513,6 +513,24 @@ class SimpleFormTest extends AbstractFormTest
$this->assertSame('default', $form->getData()); $this->assertSame('default', $form->getData());
} }
public function testPresSetDataChangesDataIfDataIsLocked()
{
$config = new FormConfigBuilder('name', null, $this->dispatcher);
$config
->setData('default')
->setDataLocked(true)
->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$event->setData('foobar');
});
$form = new Form($config);
$form->submit(false);
$this->assertTrue($form->isValid());
$this->assertSame('foobar', $form->getData());
}
public function testSubmitConvertsEmptyToNullIfNoTransformer() public function testSubmitConvertsEmptyToNullIfNoTransformer()
{ {
$form = $this->getBuilder()->getForm(); $form = $this->getBuilder()->getForm();