Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit fa1cd6b

Browse filesBrowse files
minor #29179 [Form] Hardened test suite for empty data (HeahDude)
This PR was merged into the 2.8 branch. Discussion ---------- [Form] Hardened test suite for empty data | Q | A | ------------- | --- | Branch? | 2.8 | Bug fix? | no | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | # | License | MIT | Doc PR | ~ Finally the continuation of #21877, giving some more love to 2.8 before it is not maintained anymore <3. Commits ------- b0dab62 [Form] Hardened test suite for empty data
2 parents 46e3745 + b0dab62 commit fa1cd6b
Copy full SHA for fa1cd6b

19 files changed

+241
-4
lines changed

‎src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php
+39Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,4 +1543,43 @@ public function testSetDataNonEmptyArraySubmitNullMultiple()
15431543
$this->assertEquals(array(), $form->getNormData());
15441544
$this->assertSame(array(), $form->getViewData(), 'View data is always an array');
15451545
}
1546+
1547+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
1548+
{
1549+
$emptyData = '1';
1550+
$entity1 = new SingleIntIdEntity(1, 'Foo');
1551+
$this->persist(array($entity1));
1552+
1553+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1554+
'em' => 'default',
1555+
'class' => self::SINGLE_IDENT_CLASS,
1556+
'empty_data' => $emptyData,
1557+
));
1558+
$form->submit(null);
1559+
1560+
$this->assertSame($emptyData, $form->getViewData());
1561+
$this->assertSame($entity1, $form->getNormData());
1562+
$this->assertSame($entity1, $form->getData());
1563+
}
1564+
1565+
public function testSubmitNullMultipleUsesDefaultEmptyData()
1566+
{
1567+
$emptyData = array('1');
1568+
$entity1 = new SingleIntIdEntity(1, 'Foo');
1569+
$this->persist(array($entity1));
1570+
1571+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1572+
'em' => 'default',
1573+
'class' => self::SINGLE_IDENT_CLASS,
1574+
'multiple' => true,
1575+
'empty_data' => $emptyData,
1576+
));
1577+
$form->submit(null);
1578+
1579+
$collection = new ArrayCollection(array($entity1));
1580+
1581+
$this->assertSame($emptyData, $form->getViewData());
1582+
$this->assertEquals($collection, $form->getNormData());
1583+
$this->assertEquals($collection, $form->getData());
1584+
}
15461585
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/BaseTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/BaseTypeTest.php
+22Lines 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;

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/ButtonTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/ButtonTypeTest.php
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,16 @@ public function testCreateButtonInstances()
3232
{
3333
$this->assertInstanceOf('Symfony\Component\Form\Button', $this->factory->create(static::TESTED_TYPE));
3434
}
35+
36+
/**
37+
* @expectedException \Symfony\Component\Form\Exception\BadMethodCallException
38+
* @expectedExceptionMessage Buttons do not support empty data.
39+
*
40+
* @param string $emptyData
41+
* @param null $expectedData
42+
*/
43+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
44+
{
45+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
46+
}
3547
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/CheckboxTypeTest.php
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
187187
{
188188
parent::testSubmitNull(false, false, null);
189189
}
190+
191+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = true)
192+
{
193+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
194+
'empty_data' => $emptyData,
195+
));
196+
$form->submit(null);
197+
198+
// view data is transformed to the string true value
199+
$this->assertSame('1', $form->getViewData());
200+
$this->assertSame($expectedData, $form->getNormData());
201+
$this->assertSame($expectedData, $form->getData());
202+
}
190203
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/ChoiceTypeTest.php
+5-4Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -684,19 +684,20 @@ public function testSubmitSingleNonExpandedObjectChoices()
684684
$this->assertTrue($form->isSynchronized());
685685
}
686686

687-
public function testSubmitSingleChoiceWithEmptyData()
687+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = null)
688688
{
689689
$form = $this->factory->create(static::TESTED_TYPE, null, array(
690690
'multiple' => false,
691691
'expanded' => false,
692-
'choices' => array('test'),
692+
// empty data must match string choice value
693+
'choices' => array($emptyData),
693694
'choices_as_values' => true,
694-
'empty_data' => 'test',
695+
'empty_data' => $emptyData,
695696
));
696697

697698
$form->submit(null);
698699

699-
$this->assertSame('test', $form->getData());
700+
$this->assertSame($emptyData, $form->getData());
700701
}
701702

702703
public function testSubmitSingleChoiceWithEmptyDataAndInitialData()

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/CollectionTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/CollectionTypeTest.php
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,10 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
410410
{
411411
parent::testSubmitNull(array(), array(), array());
412412
}
413+
414+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = array())
415+
{
416+
// resize form listener always set an empty array
417+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
418+
}
413419
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/CountryTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/CountryTypeTest.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
6666
{
6767
parent::testSubmitNull($expected, $norm, '');
6868
}
69+
70+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'FR', $expectedData = 'FR')
71+
{
72+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
73+
}
6974
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/CurrencyTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/CurrencyTypeTest.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4949
{
5050
parent::testSubmitNull($expected, $norm, '');
5151
}
52+
53+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'EUR', $expectedData = 'EUR')
54+
{
55+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
56+
}
5257
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php
+16Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,4 +615,20 @@ public function testSubmitNullWithSingleText()
615615
$this->assertNull($form->getNormData());
616616
$this->assertSame('', $form->getViewData());
617617
}
618+
619+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
620+
{
621+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
622+
'empty_data' => $emptyData,
623+
));
624+
$form->submit(null);
625+
626+
// view transformer writes back empty strings in the view data
627+
$this->assertSame(
628+
array('date' => array('year' => '', 'month' => '', 'day' => ''), 'time' => array('hour' => '', 'minute' => '')),
629+
$form->getViewData()
630+
);
631+
$this->assertSame($expectedData, $form->getNormData());
632+
$this->assertSame($expectedData, $form->getData());
633+
}
618634
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php
+29Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,4 +1003,33 @@ public function testSubmitNullWithSingleText()
10031003
$this->assertNull($form->getNormData());
10041004
$this->assertSame('', $form->getViewData());
10051005
}
1006+
1007+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
1008+
{
1009+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1010+
'empty_data' => $emptyData,
1011+
));
1012+
$form->submit(null);
1013+
1014+
// view transformer write back empty strings in the view data
1015+
$this->assertSame(array('year' => '', 'month' => '', 'day' => ''), $form->getViewData());
1016+
$this->assertSame($expectedData, $form->getNormData());
1017+
$this->assertSame($expectedData, $form->getData());
1018+
}
1019+
1020+
public function testSingleTextSubmitNullUsesDefaultEmptyData()
1021+
{
1022+
$emptyData = '2018-11-11';
1023+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
1024+
'widget' => 'single_text',
1025+
'empty_data' => $emptyData,
1026+
));
1027+
$form->submit(null);
1028+
1029+
$date = new \DateTime($emptyData);
1030+
1031+
$this->assertSame($emptyData, $form->getViewData());
1032+
$this->assertEquals($date, $form->getNormData());
1033+
$this->assertEquals($date, $form->getData());
1034+
}
10061035
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/FormTypeTest.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,11 @@ public function testDataClassMustBeValidClassOrInterface()
227227
));
228228
}
229229

230+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = array())
231+
{
232+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
233+
}
234+
230235
public function testSubmitWithEmptyDataCreatesObjectIfClassAvailable()
231236
{
232237
$form = $this->factory->createBuilder(static::TESTED_TYPE, null, array(

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/IntegerTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/IntegerTypeTest.php
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4848
{
4949
parent::testSubmitNull($expected, $norm, '');
5050
}
51+
52+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10', $expectedData = 10)
53+
{
54+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
55+
'empty_data' => $emptyData,
56+
));
57+
$form->submit(null);
58+
59+
$this->assertSame($emptyData, $form->getViewData());
60+
$this->assertSame($expectedData, $form->getNormData());
61+
$this->assertSame($expectedData, $form->getData());
62+
}
5163
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/LanguageTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/LanguageTypeTest.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
5959
{
6060
parent::testSubmitNull($expected, $norm, '');
6161
}
62+
63+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'en', $expectedData = 'en')
64+
{
65+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
66+
}
6267
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/LocaleTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/LocaleTypeTest.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,9 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4949
{
5050
parent::testSubmitNull($expected, $norm, '');
5151
}
52+
53+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'en', $expectedData = 'en')
54+
{
55+
parent::testSubmitNullUsesDefaultEmptyData($emptyData, $expectedData);
56+
}
5257
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/MoneyTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/MoneyTypeTest.php
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,16 @@ public function testMoneyPatternWithoutCurrency()
8080

8181
$this->assertSame('{{ widget }}', $view->vars['money_pattern']);
8282
}
83+
84+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10.00', $expectedData = 10.0)
85+
{
86+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
87+
'empty_data' => $emptyData,
88+
));
89+
$form->submit(null);
90+
91+
$this->assertSame($emptyData, $form->getViewData());
92+
$this->assertSame($expectedData, $form->getNormData());
93+
$this->assertSame($expectedData, $form->getData());
94+
}
8395
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/NumberTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/NumberTypeTest.php
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
7373
{
7474
parent::testSubmitNull($expected, $norm, '');
7575
}
76+
77+
public function testSubmitNullUsesDefaultEmptyData($emptyData = '10', $expectedData = 10.0)
78+
{
79+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
80+
'empty_data' => $emptyData,
81+
));
82+
$form->submit(null);
83+
84+
$this->assertSame($emptyData, $form->getViewData());
85+
$this->assertSame($expectedData, $form->getNormData());
86+
$this->assertSame($expectedData, $form->getData());
87+
}
7688
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,4 +797,17 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
797797

798798
parent::testSubmitNull($expected, $norm, $view);
799799
}
800+
801+
public function testSubmitNullUsesDefaultEmptyData($emptyData = array(), $expectedData = null)
802+
{
803+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
804+
'empty_data' => $emptyData,
805+
));
806+
$form->submit(null);
807+
808+
// view transformer write back empty strings in the view data
809+
$this->assertSame(array('hour' => '', 'minute' => ''), $form->getViewData());
810+
$this->assertSame($expectedData, $form->getNormData());
811+
$this->assertSame($expectedData, $form->getData());
812+
}
800813
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/TimezoneTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/TimezoneTypeTest.php
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,16 @@ public function testSubmitNull($expected = null, $norm = null, $view = null)
4343
{
4444
parent::testSubmitNull($expected, $norm, '');
4545
}
46+
47+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'Africa/Kinshasa', $expectedData = 'Africa/Kinshasa')
48+
{
49+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
50+
'empty_data' => $emptyData,
51+
));
52+
$form->submit(null);
53+
54+
$this->assertSame($emptyData, $form->getViewData());
55+
$this->assertSame($expectedData, $form->getNormData());
56+
$this->assertSame($expectedData, $form->getData());
57+
}
4658
}

‎src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Form/Tests/Extension/Core/Type/UrlTypeTest.php
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,17 @@ public function testSubmitWithNonStringDataDoesNotBreakTheFixUrlProtocolListener
100100

101101
$this->assertSame(array('domain.com', 'www.domain.com'), $form->getData());
102102
}
103+
104+
public function testSubmitNullUsesDefaultEmptyData($emptyData = 'empty', $expectedData = 'http://empty')
105+
{
106+
$form = $this->factory->create(static::TESTED_TYPE, null, array(
107+
'empty_data' => $emptyData,
108+
));
109+
$form->submit(null);
110+
111+
// listener normalizes data on submit
112+
$this->assertSame($expectedData, $form->getViewData());
113+
$this->assertSame($expectedData, $form->getNormData());
114+
$this->assertSame($expectedData, $form->getData());
115+
}
103116
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.