@@ -118,4 +118,115 @@ public function testReverseTransformExpectsString()
118
118
119
119
$ transformer ->reverseTransform (1 );
120
120
}
121
+
122
+ public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsNotDot ()
123
+ {
124
+ \Locale::setDefault ('fr ' );
125
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
126
+
127
+ // completely valid format
128
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1 234,5 ' ));
129
+ // accept dots
130
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1 234.5 ' ));
131
+ // omit group separator
132
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234,5 ' ));
133
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234.5 ' ));
134
+ }
135
+
136
+ /**
137
+ * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
138
+ */
139
+ public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDot ()
140
+ {
141
+ // Since we test against "de_DE", we need the full implementation
142
+ IntlTestHelper::requireFullIntl ($ this , false );
143
+
144
+ \Locale::setDefault ('de_DE ' );
145
+
146
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
147
+
148
+ $ transformer ->reverseTransform ('1.234.5 ' );
149
+ }
150
+
151
+ /**
152
+ * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
153
+ */
154
+ public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDotWithNoGroupSep ()
155
+ {
156
+ // Since we test against "de_DE", we need the full implementation
157
+ IntlTestHelper::requireFullIntl ($ this , false );
158
+
159
+ \Locale::setDefault ('de_DE ' );
160
+
161
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
162
+
163
+ $ transformer ->reverseTransform ('1234.5 ' );
164
+ }
165
+
166
+ public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsDotButNoGroupingUsed ()
167
+ {
168
+ // Since we test against other locales, we need the full implementation
169
+ IntlTestHelper::requireFullIntl ($ this , false );
170
+
171
+ \Locale::setDefault ('fr ' );
172
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
173
+
174
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234,5 ' ));
175
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234.5 ' ));
176
+ }
177
+
178
+ public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsNotComma ()
179
+ {
180
+ // Since we test against other locales, we need the full implementation
181
+ IntlTestHelper::requireFullIntl ($ this , false );
182
+
183
+ \Locale::setDefault ('bg ' );
184
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
185
+
186
+ // completely valid format
187
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1 234.5 ' ));
188
+ // accept commas
189
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1 234,5 ' ));
190
+ // omit group separator
191
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234.5 ' ));
192
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234,5 ' ));
193
+ }
194
+
195
+ /**
196
+ * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
197
+ */
198
+ public function testDecimalSeparatorMayNotBeCommaIfGroupingSeparatorIsComma ()
199
+ {
200
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
201
+
202
+ $ transformer ->reverseTransform ('1,234,5 ' );
203
+ }
204
+
205
+ /**
206
+ * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
207
+ */
208
+ public function testDecimalSeparatorMayNotBeCommaIfGroupingSeparatorIsCommaWithNoGroupSep ()
209
+ {
210
+ $ transformer = new PercentToLocalizedStringTransformer (1 , 'integer ' );
211
+
212
+ $ transformer ->reverseTransform ('1234,5 ' );
213
+ }
214
+
215
+ public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsCommaButNoGroupingUsed ()
216
+ {
217
+ $ formatter = new \NumberFormatter (\Locale::getDefault (), \NumberFormatter::DECIMAL );
218
+ $ formatter ->setAttribute (\NumberFormatter::FRACTION_DIGITS , 1 );
219
+ $ formatter ->setAttribute (\NumberFormatter::GROUPING_USED , false );
220
+
221
+ $ transformer = $ this ->getMockBuilder ('Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer ' )
222
+ ->setMethods (['getNumberFormatter ' ])
223
+ ->setConstructorArgs ([1 , 'integer ' ])
224
+ ->getMock ();
225
+ $ transformer ->expects ($ this ->any ())
226
+ ->method ('getNumberFormatter ' )
227
+ ->willReturn ($ formatter );
228
+
229
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234,5 ' ));
230
+ $ this ->assertEquals (1234.5 , $ transformer ->reverseTransform ('1234.5 ' ));
231
+ }
121
232
}
0 commit comments