Skip to content

Commit e0dbf87

Browse files
Merge branch '2.8' into 3.4
* 2.8: [Form] Hardened test suite for empty data Bump phpunit XSD version to 5.2 Add required key attribute
2 parents 22d0e78 + b914cd7 commit e0dbf87

20 files changed

+216
-5
lines changed

Tests/Extension/Core/Type/BaseTypeTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,28 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
145145
$this->assertSame($view, $form->getViewData());
146146
}
147147

148+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
149+
{
150+
$builder = $this->factory->createBuilder($this->getTestedType());
151+
152+
if ($builder->getCompound()) {
153+
$emptyData = array();
154+
foreach ($builder as $field) {
155+
// empty children should map null (model data) in the compound view data
156+
$emptyData[$field->getName()] = null;
157+
}
158+
} else {
159+
// simple fields share the view and the model format, unless they use a transformer
160+
$expectedData = $emptyData;
161+
}
162+
163+
$form = $builder->setEmptyData($emptyData)->getForm()->submit(null);
164+
165+
$this->assertSame($emptyData, $form->getViewData());
166+
$this->assertSame($expectedData, $form->getNormData());
167+
$this->assertSame($expectedData, $form->getData());
168+
}
169+
148170
protected function getTestedType()
149171
{
150172
return static::TESTED_TYPE;

Tests/Extension/Core/Type/ButtonTypeTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,16 @@ public function testCreateButtonInstances()
2222
{
2323
$this->assertInstanceOf('Symfony\Component\Form\Button', $this->factory->create(static::TESTED_TYPE));
2424
}
25+
26+
/**
27+
* @expectedException \Symfony\Component\Form\Exception\BadMethodCallException
28+
* @expectedExceptionMessage Buttons do not support empty data.
29+
*
30+
* @param string $emptyData
31+
* @param null $expectedData
32+
*/
33+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
34+
{
35+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
36+
}
2537
}

Tests/Extension/Core/Type/CheckboxTypeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
177177
{
178178
parent::testSubmitNull(false, false, null);
179179
}
180+
181+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = true)
182+
{
183+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
184+
'empty_data' => $emptyData,
185+
));
186+
$form->submit(null);
187+
188+
// view data is transformed to the string true value
189+
$this->assertSame('1', $form->getViewData());
190+
$this->assertSame($expectedData, $form->getNormData());
191+
$this->assertSame($expectedData, $form->getData());
192+
}
180193
}

Tests/Extension/Core/Type/ChoiceTypeTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -584,18 +584,19 @@ public function testSubmitSingleNonExpandedObjectChoices()
584584
$this->assertTrue($form->isSynchronized());
585585
}
586586

587-
public function testSubmitSingleChoiceWithEmptyData()
587+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
588588
{
589589
$form = $this->factory->create(static::TESTED_TYPE, null, array(
590590
'multiple' => false,
591591
'expanded' => false,
592-
'choices' => array('test'),
593-
'empty_data' => 'test',
592+
// empty data must match string choice value
593+
'choices' => array($emptyData),
594+
'empty_data' => $emptyData,
594595
));
595596

596597
$form->submit(null);
597598

598-
$this->assertSame('test', $form->getData());
599+
$this->assertSame($emptyData, $form->getData());
599600
}
600601

601602
public function testSubmitSingleChoiceWithEmptyDataAndInitialData()

Tests/Extension/Core/Type/CollectionTypeTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,4 +408,10 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
408408
{
409409
parent::testSubmitNull(array(), array(), array());
410410
}
411+
412+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = array())
413+
{
414+
// resize form listener always set an empty array
415+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
416+
}
411417
}

Tests/Extension/Core/Type/CountryTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
5656
{
5757
parent::testSubmitNull($expected, $norm, '');
5858
}
59+
60+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'FR', $expectedData = 'FR')
61+
{
62+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
63+
}
5964
}

Tests/Extension/Core/Type/CurrencyTypeTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
3939
{
4040
parent::testSubmitNull($expected, $norm, '');
4141
}
42+
43+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'EUR', $expectedData = 'EUR')
44+
{
45+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
46+
}
4247
}

Tests/Extension/Core/Type/DateIntervalTypeTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
410410
'days' => '',
411411
));
412412
}
413+
414+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
415+
{
416+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
417+
'empty_data' => $emptyData,
418+
));
419+
$form->submit(null);
420+
421+
// view transformer writes back empty strings in the view data
422+
$this->assertSame(array('years' => '', 'months' => '', 'days' => ''), $form->getViewData());
423+
$this->assertSame($expectedData, $form->getNormData());
424+
$this->assertSame($expectedData, $form->getData());
425+
}
413426
}

Tests/Extension/Core/Type/DateTimeTypeTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,20 @@ public function testSubmitNullWithSingleText()
580580
$this->assertNull($form->getNormData());
581581
$this->assertSame('', $form->getViewData());
582582
}
583+
584+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
585+
{
586+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
587+
'empty_data' => $emptyData,
588+
));
589+
$form->submit(null);
590+
591+
// view transformer writes back empty strings in the view data
592+
$this->assertSame(
593+
array('date' => array('year' => '', 'month' => '', 'day' => ''), 'time' => array('hour' => '', 'minute' => '')),
594+
$form->getViewData()
595+
);
596+
$this->assertSame($expectedData, $form->getNormData());
597+
$this->assertSame($expectedData, $form->getData());
598+
}
583599
}

Tests/Extension/Core/Type/DateTypeTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,4 +975,33 @@ public function testSubmitNullWithSingleText()
975975
$this->assertNull($form->getNormData());
976976
$this->assertSame('', $form->getViewData());
977977
}
978+
979+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
980+
{
981+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
982+
'empty_data' => $emptyData,
983+
));
984+
$form->submit(null);
985+
986+
// view transformer write back empty strings in the view data
987+
$this->assertSame(array('year' => '', 'month' => '', 'day' => ''), $form->getViewData());
988+
$this->assertSame($expectedData, $form->getNormData());
989+
$this->assertSame($expectedData, $form->getData());
990+
}
991+
992+
public function testSingleTextSubmitNullUsesDefaultEmptyData()
993+
{
994+
$emptyData = '2018-11-11';
995+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
996+
'widget' => 'single_text',
997+
'empty_data' => $emptyData,
998+
));
999+
$form->submit(null);
1000+
1001+
$date = new \DateTime($emptyData);
1002+
1003+
$this->assertSame($emptyData, $form->getViewData());
1004+
$this->assertEquals($date, $form->getNormData());
1005+
$this->assertEquals($date, $form->getData());
1006+
}
9781007
}

0 commit comments

Comments
 (0)