@@ -32,7 +32,15 @@ class TestNumberFormatter: XCTestCase {
32
32
( " test_plusSignSymbol " , test_plusSignSymbol) ,
33
33
( " test_currencySymbol " , test_currencySymbol) ,
34
34
( " test_exponentSymbol " , test_exponentSymbol) ,
35
- ( " test_minimumIntegerDigits " , test_minimumIntegerDigits) ,
35
+ ( " test_decimalMinimumIntegerDigits " , test_decimalMinimumIntegerDigits) ,
36
+ ( " test_currencyMinimumIntegerDigits " , test_currencyMinimumIntegerDigits) ,
37
+ ( " test_percentMinimumIntegerDigits " , test_percentMinimumIntegerDigits) ,
38
+ ( " test_scientificMinimumIntegerDigits " , test_scientificMinimumIntegerDigits) ,
39
+ ( " test_spellOutMinimumIntegerDigits " , test_spellOutMinimumIntegerDigits) ,
40
+ ( " test_ordinalMinimumIntegerDigits " , test_ordinalMinimumIntegerDigits) ,
41
+ ( " test_currencyPluralMinimumIntegerDigits " , test_currencyPluralMinimumIntegerDigits) ,
42
+ ( " test_currencyISOCodeMinimumIntegerDigits " , test_currencyISOCodeMinimumIntegerDigits) ,
43
+ ( " test_currencyAccountingMinimumIntegerDigits " , test_currencyAccountingMinimumIntegerDigits) ,
36
44
( " test_maximumIntegerDigits " , test_maximumIntegerDigits) ,
37
45
( " test_minimumFractionDigits " , test_minimumFractionDigits) ,
38
46
( " test_maximumFractionDigits " , test_maximumFractionDigits) ,
@@ -210,7 +218,7 @@ class TestNumberFormatter: XCTestCase {
210
218
XCTAssertEqual ( formattedString, " 4.2⬆️1 " )
211
219
}
212
220
213
- func test_minimumIntegerDigits ( ) {
221
+ func test_decimalMinimumIntegerDigits ( ) {
214
222
let numberFormatter1 = NumberFormatter ( )
215
223
XCTAssertEqual ( numberFormatter1. minimumIntegerDigits, 0 )
216
224
numberFormatter1. minimumIntegerDigits = 3
@@ -230,7 +238,191 @@ class TestNumberFormatter: XCTestCase {
230
238
formattedString = numberFormatter. string ( from: 0.1 )
231
239
XCTAssertEqual ( formattedString, " 000.1 " )
232
240
}
233
-
241
+
242
+ func test_currencyMinimumIntegerDigits( ) {
243
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
244
+ let formatter = NumberFormatter ( )
245
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
246
+ formatter. minimumIntegerDigits = 0
247
+ formatter. numberStyle = . currency
248
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
249
+ formatter. locale = Locale ( identifier: " en_US " )
250
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " $.00 " )
251
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " $1.23 " )
252
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " $123.40 " )
253
+
254
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
255
+ let formatter2 = NumberFormatter ( )
256
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
257
+ formatter2. numberStyle = . currency
258
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 1 )
259
+ formatter2. locale = Locale ( identifier: " en_US " )
260
+ XCTAssertEqual ( formatter2. string ( from: 0.001 ) , " $0.00 " )
261
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " $1.23 " )
262
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " $123,456.70 " )
263
+ }
264
+
265
+ func test_percentMinimumIntegerDigits( ) {
266
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
267
+ let formatter = NumberFormatter ( )
268
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
269
+ formatter. minimumIntegerDigits = 0
270
+ formatter. numberStyle = . percent
271
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
272
+ formatter. locale = Locale ( identifier: " en_US " )
273
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " 0% " )
274
+ XCTAssertEqual ( formatter. string ( from: 1.234 ) , " 123% " )
275
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " 12,340% " )
276
+
277
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
278
+ let formatter2 = NumberFormatter ( )
279
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
280
+ formatter2. numberStyle = . percent
281
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 1 )
282
+ formatter2. locale = Locale ( identifier: " en_US " )
283
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " 1% " )
284
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " 123% " )
285
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " 12,345,670% " )
286
+ }
287
+
288
+ func test_scientificMinimumIntegerDigits( ) {
289
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
290
+ let formatter = NumberFormatter ( )
291
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
292
+ formatter. minimumIntegerDigits = 0
293
+ formatter. numberStyle = . scientific
294
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
295
+ formatter. locale = Locale ( identifier: " en_US " )
296
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " 0E0 " )
297
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " 1.23E0 " )
298
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " 1.234E2 " )
299
+
300
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
301
+ let formatter2 = NumberFormatter ( )
302
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
303
+ formatter2. numberStyle = . scientific
304
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
305
+ formatter2. locale = Locale ( identifier: " en_US " )
306
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " 1E-2 " )
307
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " 1.234E0 " )
308
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " 1.234567E5 " )
309
+ }
310
+
311
+ func test_spellOutMinimumIntegerDigits( ) {
312
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
313
+ let formatter = NumberFormatter ( )
314
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
315
+ formatter. minimumIntegerDigits = 0
316
+ formatter. numberStyle = . spellOut
317
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
318
+ formatter. locale = Locale ( identifier: " en_US " )
319
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " zero " )
320
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " one point two three " )
321
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " one hundred twenty-three point four " )
322
+
323
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
324
+ let formatter2 = NumberFormatter ( )
325
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
326
+ formatter2. numberStyle = . spellOut
327
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
328
+ formatter2. locale = Locale ( identifier: " en_US " )
329
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " zero point zero one " )
330
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " one point two three four " )
331
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " one hundred twenty-three thousand four hundred fifty-six point seven " )
332
+ }
333
+
334
+ func test_ordinalMinimumIntegerDigits( ) {
335
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
336
+ let formatter = NumberFormatter ( )
337
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
338
+ formatter. minimumIntegerDigits = 0
339
+ formatter. numberStyle = . ordinal
340
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
341
+ formatter. locale = Locale ( identifier: " en_US " )
342
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " 0th " )
343
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " 1st " )
344
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " 123rd " )
345
+
346
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
347
+ let formatter2 = NumberFormatter ( )
348
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
349
+ formatter2. numberStyle = . ordinal
350
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
351
+ formatter2. locale = Locale ( identifier: " en_US " )
352
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " 0th " )
353
+ XCTAssertEqual ( formatter2. string ( from: 4.234 ) , " 4th " )
354
+ XCTAssertEqual ( formatter2. string ( from: 42 ) , " 42nd " )
355
+ }
356
+
357
+ func test_currencyPluralMinimumIntegerDigits( ) {
358
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
359
+ let formatter = NumberFormatter ( )
360
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
361
+ formatter. minimumIntegerDigits = 0
362
+ formatter. numberStyle = . currencyPlural
363
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
364
+ formatter. locale = Locale ( identifier: " en_US " )
365
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " 0.00 US dollars " )
366
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " 1.23 US dollars " )
367
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " 123.40 US dollars " )
368
+
369
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
370
+ let formatter2 = NumberFormatter ( )
371
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
372
+ formatter2. numberStyle = . currencyPlural
373
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
374
+ formatter2. locale = Locale ( identifier: " en_US " )
375
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " 0.01 US dollars " )
376
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " 1.23 US dollars " )
377
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " 123,456.70 US dollars " )
378
+ }
379
+
380
+ func test_currencyISOCodeMinimumIntegerDigits( ) {
381
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
382
+ let formatter = NumberFormatter ( )
383
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
384
+ formatter. minimumIntegerDigits = 0
385
+ formatter. numberStyle = . currencyISOCode
386
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
387
+ formatter. locale = Locale ( identifier: " en_US " )
388
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " USD.00 " )
389
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " USD1.23 " )
390
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " USD123.40 " )
391
+
392
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
393
+ let formatter2 = NumberFormatter ( )
394
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
395
+ formatter2. numberStyle = . currencyISOCode
396
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 1 )
397
+ formatter2. locale = Locale ( identifier: " en_US " )
398
+ XCTAssertEqual ( formatter2. string ( from: 0.01 ) , " USD0.01 " )
399
+ XCTAssertEqual ( formatter2. string ( from: 1.234 ) , " USD1.23 " )
400
+ XCTAssertEqual ( formatter2. string ( from: 123456.7 ) , " USD123,456.70 " )
401
+ }
402
+
403
+ func test_currencyAccountingMinimumIntegerDigits( ) {
404
+ // If .minimumIntegerDigits is set to 0 before .numberStyle change, preserve the value
405
+ let formatter = NumberFormatter ( )
406
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
407
+ formatter. minimumIntegerDigits = 0
408
+ formatter. numberStyle = . currencyAccounting
409
+ XCTAssertEqual ( formatter. minimumIntegerDigits, 0 )
410
+ formatter. locale = Locale ( identifier: " en_US " )
411
+ XCTAssertEqual ( formatter. string ( from: 0 ) , " $.00 " )
412
+ XCTAssertEqual ( formatter. string ( from: 1.23 ) , " $1.23 " )
413
+ XCTAssertEqual ( formatter. string ( from: 123.4 ) , " $123.40 " )
414
+
415
+ // If .minimumIntegerDigits is not set before .numberStyle change, update the value
416
+ let formatter2 = NumberFormatter ( )
417
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 0 )
418
+ formatter2. numberStyle = . currencyAccounting
419
+ XCTAssertEqual ( formatter2. minimumIntegerDigits, 1 )
420
+ formatter2. locale = Locale ( identifier: " en_US " )
421
+ XCTAssertEqual ( formatter2. string ( from: 0 ) , " $0.00 " )
422
+ XCTAssertEqual ( formatter2. string ( from: 1.23 ) , " $1.23 " )
423
+ XCTAssertEqual ( formatter2. string ( from: 123.4 ) , " $123.40 " )
424
+ }
425
+
234
426
func test_maximumIntegerDigits( ) {
235
427
let numberFormatter = NumberFormatter ( )
236
428
numberFormatter. maximumIntegerDigits = 3
0 commit comments