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