@@ -100,6 +100,14 @@ public function testChoiceLoaderOptionExpectsChoiceLoaderInterface()
100
100
]);
101
101
}
102
102
103
+ public function testPlaceholderAttrOptionExpectsArray ()
104
+ {
105
+ $ this ->expectException (InvalidOptionsException::class);
106
+ $ this ->factory ->create (static ::TESTED_TYPE , null , [
107
+ 'placeholder_attr ' => new \stdClass (),
108
+ ]);
109
+ }
110
+
103
111
public function testChoiceListAndChoicesCanBeEmpty ()
104
112
{
105
113
$ this ->assertInstanceOf (FormInterface::class, $ this ->factory ->create (static ::TESTED_TYPE , null , []));
@@ -189,15 +197,19 @@ public function testExpandedChoiceListWithBooleanAndNullValuesAndFalseAsPreSetDa
189
197
190
198
public function testPlaceholderPresentOnNonRequiredExpandedSingleChoice ()
191
199
{
200
+ $ placeholderAttr = ['attr ' => 'value ' ];
201
+
192
202
$ form = $ this ->factory ->create (static ::TESTED_TYPE , null , [
193
203
'multiple ' => false ,
194
204
'expanded ' => true ,
195
205
'required ' => false ,
196
206
'choices ' => $ this ->choices ,
207
+ 'placeholder_attr ' => $ placeholderAttr ,
197
208
]);
198
209
199
210
$ this ->assertArrayHasKey ('placeholder ' , $ form );
200
211
$ this ->assertCount (\count ($ this ->choices ) + 1 , $ form , 'Each choice should become a new field ' );
212
+ $ this ->assertSame ($ placeholderAttr , $ form ->createView ()->children ['placeholder ' ]->vars ['attr ' ]);
201
213
}
202
214
203
215
public function testPlaceholderNotPresentIfRequired ()
@@ -1667,80 +1679,84 @@ public function testPlaceholderIsEmptyStringByDefaultIfNotRequired()
1667
1679
/**
1668
1680
* @dataProvider getOptionsWithPlaceholder
1669
1681
*/
1670
- public function testPassPlaceholderToView ($ multiple , $ expanded , $ required , $ placeholder , $ viewValue )
1682
+ public function testPassPlaceholderToView ($ multiple , $ expanded , $ required , $ placeholder , $ placeholderViewValue , $ placeholderAttr , $ placeholderAttrViewValue )
1671
1683
{
1672
1684
$ view = $ this ->factory ->create (static ::TESTED_TYPE , null , [
1673
1685
'multiple ' => $ multiple ,
1674
1686
'expanded ' => $ expanded ,
1675
1687
'required ' => $ required ,
1676
1688
'placeholder ' => $ placeholder ,
1689
+ 'placeholder_attr ' => $ placeholderAttr ,
1677
1690
'choices ' => $ this ->choices ,
1678
1691
])
1679
1692
->createView ();
1680
1693
1681
- $ this ->assertSame ($ viewValue , $ view ->vars ['placeholder ' ]);
1694
+ $ this ->assertSame ($ placeholderViewValue , $ view ->vars ['placeholder ' ]);
1695
+ $ this ->assertSame ($ placeholderAttrViewValue , $ view ->vars ['placeholder_attr ' ]);
1682
1696
$ this ->assertFalse ($ view ->vars ['placeholder_in_choices ' ]);
1683
1697
}
1684
1698
1685
1699
/**
1686
1700
* @dataProvider getOptionsWithPlaceholder
1687
1701
*/
1688
- public function testDontPassPlaceholderIfContainedInChoices ($ multiple , $ expanded , $ required , $ placeholder , $ viewValue )
1702
+ public function testDontPassPlaceholderIfContainedInChoices ($ multiple , $ expanded , $ required , $ placeholder , $ placeholderViewValue , $ placeholderAttr , $ placeholderAttrViewValue )
1689
1703
{
1690
1704
$ view = $ this ->factory ->create (static ::TESTED_TYPE , null , [
1691
1705
'multiple ' => $ multiple ,
1692
1706
<
1241
/td> 'expanded ' => $ expanded ,
1693
1707
'required ' => $ required ,
1694
1708
'placeholder ' => $ placeholder ,
1709
+ 'placeholder_attr ' => $ placeholderAttr ,
1695
1710
'choices ' => ['Empty ' => '' , 'A ' => 'a ' ],
1696
1711
])
1697
1712
->createView ();
1698
1713
1699
1714
$ this ->assertNull ($ view ->vars ['placeholder ' ]);
1715
+ $ this ->assertSame ([], $ view ->vars ['placeholder_attr ' ]);
1700
1716
$ this ->assertTrue ($ view ->vars ['placeholder_in_choices ' ]);
1701
1717
}
1702
1718
1703
1719
public static function getOptionsWithPlaceholder ()
1704
1720
{
1705
1721
return [
1706
1722
// single non-expanded
1707
- [false , false , false , 'foobar ' , 'foobar ' ],
1708
- [false , false , false , '' , '' ],
1709
- [false , false , false , null , null ],
1710
- [false , false , false , false , null ],
1711
- [false , false , true , 'foobar ' , 'foobar ' ],
1712
- [false , false , true , '' , '' ],
1713
- [false , false , true , null , null ],
1714
- [false , false , true , false , null ],
1723
+ [false , false , false , 'foobar ' , 'foobar ' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1724
+ [false , false , false , '' , '' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1725
+ [false , false , false , null , null , [ ' attr ' => ' value ' ], [] ],
1726
+ [false , false , false , false , null , [ ' attr ' => ' value ' ], [] ],
1727
+ [false , false , true , 'foobar ' , 'foobar ' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1728
+ [false , false , true , '' , '' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1729
+ [false , false , true , null , null , [ ' attr ' => ' value ' ], [] ],
1730
+ [false , false , true , false , null , [ ' attr ' => ' value ' ], [] ],
1715
1731
// single expanded
1716
- [false , true , false , 'foobar ' , 'foobar ' ],
1732
+ [false , true , false , 'foobar ' , 'foobar ' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1717
1733
// radios should never have an empty label
1718
- [false , true , false , '' , 'None ' ],
1719
- [false , true , false , null , null ],
1720
- [false , true , false , false , null ],
1734
+ [false , true , false , '' , 'None ' , [ ' attr ' => ' value ' ], [ ' attr ' => ' value ' ] ],
1735
+ [false , true , false , null , null , [ ' attr ' => ' value ' ], [] ],
1736
+ [false , true , false , false , null , [ ' attr ' => ' value ' ], [] ],
1721
1737
// required radios should never have a placeholder
1722
- [false , true , true , 'foobar ' , null ],
1723
- [false , true , true , '' , null ],
1724
- [false , true , true , null , null ],
1725
- [false , true , true , false , null ],
1738
+ [false , true , true , 'foobar ' , null , [ ' attr ' => ' value ' ], [] ],
1739
+ [false , true , true , '' , null , [ ' attr ' => ' value ' ], [] ],
1740
+ [false , true , true , null , null , [ ' attr ' => ' value ' ], [] ],
1741
+ [false , true , true , false , null , [ ' attr ' => ' value ' ], [] ],
1726
1742
// multiple non-expanded
1727
- [true , false , false , 'foobar ' , null ],
1728
- [true , false , false , '' , null ],
1729
- [true , false , false , null , null ],
1730
- [true , false , false , false , null ],
1731
- [true , false , true , 'foobar ' , null ],
1732
- [true , false , true , '' , null ],
1733
- [true , false , true , null , null ],
1734
- [true , false , true , false , null ],
1743
+ [true , false , false , 'foobar ' , null , [ ' attr ' => ' value ' ], [] ],
1744
+ [true , false , false , '' , null , [ ' attr ' => ' value ' ], [] ],
1745
+ [true , false , false , null , null , [ ' attr ' => ' value ' ], [] ],
1746
+ [true , false , false , false , null , [ ' attr ' => ' value ' ], [] ],
1747
+ [true , false , true , 'foobar ' , null , [ ' attr ' => ' value ' ], [] ],
1748
+ [true , false , true , '' , null , [ ' attr ' => ' value ' ], [] ],
1749
+ [true , false , true , null , null , [ ' attr ' => <
10000
span class="x">' value ' ], [] ],
1750
+ [true , false , true , false , null , [ ' attr ' => ' value ' ], [] ],
1735
1751
// multiple expanded
1736
- [true , true , false , 'foobar ' , null ],
1737
- [true , true , false , '' , null ],
1738
- [true , true , false , null , null ],
1739
- [true , true , false , false , null ],
1740
- [true , true , true , 'foobar ' , null ],
1741
- [true , true , true , '' , null ],
1742
- [true , true , true , null , null ],
1743
- [true , true , true , false , null ],
1752
+ [true , true , false , 'foobar ' , null , [ ' attr ' => ' value ' ], [] ],
1753
+ [true , true , false , '' , null , [ ' attr ' => ' value ' ], [] ],
1754
+ [true , true , false , null , null , [ ' attr ' => ' value ' ], [] ],
1755
+ [true , true , false , false , null , [ ' attr ' => ' value ' ], [] ],
1756
+ [true , true , true , 'foobar ' , null , [ ' attr ' => ' value ' ], [] ],
1757
+ [true , true , true , '' , null , [ ' attr ' => ' value ' ], [] ],
1758
+ [true , true , true , null , null , [ ' attr ' => ' value ' ], [] ],
1759
+ [true , true , true , false , null , [ ' attr ' => ' value ' ], [] ],
1744
1760
];
1745
1761
}
1746
1762
0 commit comments