@@ -165,6 +165,14 @@ final class LocaleTests : XCTestCase {
165
165
return Locale . Components ( identifier: " " )
166
166
}
167
167
168
+ verify ( cldr: " root " , bcp47: " und " , icu: " " ) {
169
+ return Locale . Components ( languageCode: " " , script: " " , languageRegion: " " )
170
+ }
171
+
172
+ verify ( cldr: " root " , bcp47: " und " , icu: " " ) {
173
+ return Locale . Components ( languageCode: nil , script: nil , languageRegion: nil )
174
+ }
175
+
168
176
verify ( cldr: " und_US " , bcp47: " und-US " , icu: " _US " ) {
169
177
return Locale . Components ( languageRegion: . unitedStates)
170
178
}
@@ -370,6 +378,110 @@ final class LocaleTests : XCTestCase {
370
378
let result = Locale . identifier ( fromWindowsLocaleCode: - 1 )
371
379
XCTAssertNil ( result)
372
380
}
381
+
382
+ func test_emptyComponents( ) throws {
383
+
384
+ let emptyLocale = Locale ( identifier: " " )
385
+ XCTAssertEqual ( emptyLocale. language. languageCode, nil )
386
+ XCTAssertEqual ( emptyLocale. language. script, nil )
387
+ XCTAssertEqual ( emptyLocale. language. region, nil )
388
+ XCTAssertEqual ( emptyLocale. language. maximalIdentifier, " " )
389
+ XCTAssertEqual ( emptyLocale. language. minimalIdentifier, " " )
390
+ XCTAssertEqual ( emptyLocale. identifier, " " )
391
+
392
+ let localeFromEmptyComp = Locale ( components: Locale . Components ( identifier: " " ) )
393
+ XCTAssertEqual ( localeFromEmptyComp. language. languageCode, nil )
394
+ XCTAssertEqual ( localeFromEmptyComp. language. script, nil )
395
+ XCTAssertEqual ( localeFromEmptyComp. language. region, nil )
396
+ XCTAssertEqual ( localeFromEmptyComp. language. maximalIdentifier, " " )
397
+ XCTAssertEqual ( localeFromEmptyComp. language. minimalIdentifier, " " )
398
+ XCTAssertEqual ( localeFromEmptyComp. identifier, " " )
399
+
400
+ let localeFromEmptyLanguageComponent = Locale ( languageComponents: . init( identifier: " " ) )
401
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. language. languageCode, nil )
402
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. language. script, nil )
403
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. language. region, nil )
404
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. language. maximalIdentifier, " " )
405
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. language. minimalIdentifier, " " )
406
+ XCTAssertEqual ( localeFromEmptyLanguageComponent. identifier, " " )
407
+
408
+ let localeFromEmptyLanguageComponentIndividual = Locale ( languageComponents: . init( languageCode: " " , script: " " , region: " " ) )
409
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. language. languageCode, nil )
410
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. language. script, nil )
411
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. language. region, nil )
412
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. language. maximalIdentifier, " " )
413
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. language. minimalIdentifier, " " )
414
+ XCTAssertEqual ( localeFromEmptyLanguageComponentIndividual. identifier, " " )
415
+
416
+ let localeFromEmptyIndividualLanguageComponent = Locale ( languageCode: " " , script: " " , languageRegion: " " )
417
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. language. languageCode, nil )
418
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. language. script, nil )
419
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. language. region, nil )
420
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. language. maximalIdentifier, " " )
421
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. language. minimalIdentifier, " " )
422
+ XCTAssertEqual ( localeFromEmptyIndividualLanguageComponent. identifier, " " )
423
+
424
+ // Locale.Component
425
+ let compFromEmptyLocale = Locale . Components ( locale: emptyLocale)
426
+ XCTAssertEqual ( compFromEmptyLocale. languageComponents. languageCode, nil )
427
+ XCTAssertEqual ( compFromEmptyLocale. languageComponents. script, nil )
428
+ XCTAssertEqual ( compFromEmptyLocale. languageComponents. region, nil )
429
+
430
+ let emptyComp = Locale . Components ( identifier: " " )
431
+ XCTAssertEqual ( emptyComp. languageComponents. languageCode, nil )
432
+ XCTAssertEqual ( emptyComp. languageComponents. script, nil )
433
+ XCTAssertEqual ( emptyComp. languageComponents. region, nil )
434
+
435
+ // Language
436
+ let emptyLanguage = Locale . Language ( identifier: " " )
437
+ XCTAssertEqual ( emptyLanguage. languageCode, nil )
438
+ XCTAssertEqual ( emptyLanguage. script, nil )
439
+ XCTAssertEqual ( emptyLanguage. region, nil )
440
+ XCTAssertEqual ( emptyLanguage. maximalIdentifier, " " )
441
+ XCTAssertEqual ( emptyLanguage. minimalIdentifier, " " )
442
+
443
+ let languageFromEmptyComponents = Locale . Language ( components: . init( identifier: " " ) )
444
+ XCTAssertEqual ( languageFromEmptyComponents. languageCode, nil )
445
+ XCTAssertEqual ( languageFromEmptyComponents. script, nil )
446
+ XCTAssertEqual ( languageFromEmptyComponents. region, nil )
447
+ XCTAssertEqual ( languageFromEmptyComponents. maximalIdentifier, " " )
448
+ XCTAssertEqual ( languageFromEmptyComponents. minimalIdentifier, " " )
449
+
450
+ let languageFromEmptyComponents2 = Locale . Language ( components: . init( languageCode: " " , script: " " , region: " " ) )
451
+ XCTAssertEqual ( languageFromEmptyComponents2. languageCode, " " )
452
+ XCTAssertEqual ( languageFromEmptyComponents2. script, " " )
453
+ XCTAssertEqual ( languageFromEmptyComponents2. region, " " )
454
+ XCTAssertEqual ( languageFromEmptyComponents2. maximalIdentifier, " " )
455
+ XCTAssertEqual ( languageFromEmptyComponents2. minimalIdentifier, " " )
456
+
457
+ // Language.Component
458
+ let languageCompFromEmptyLanguage = Locale . Language. Components ( language: Locale . Language ( identifier: " " ) )
459
+ XCTAssertEqual ( languageCompFromEmptyLanguage. languageCode, nil )
460
+ XCTAssertEqual ( languageCompFromEmptyLanguage. script, nil )
461
+ XCTAssertEqual ( languageCompFromEmptyLanguage. region, nil )
462
+
463
+ let emptyLanguageComponents = Locale . Language. Components ( identifier: " " )
464
+ XCTAssertEqual ( emptyLanguageComponents. languageCode, nil )
465
+ XCTAssertEqual ( emptyLanguageComponents. script, nil )
466
+ XCTAssertEqual ( emptyLanguageComponents. region, nil )
467
+
468
+ let emptyLanguageComponents2 = Locale . Language. Components ( languageCode: " " , script: " " , region: " " )
469
+ XCTAssertEqual ( emptyLanguageComponents2. languageCode, " " )
470
+ XCTAssertEqual ( emptyLanguageComponents2. script, " " )
471
+ XCTAssertEqual ( emptyLanguageComponents2. region, " " )
472
+ }
473
+
474
+ func test_nilComponents( ) {
475
+ let nilLanguageComponents = Locale . Language. Components ( languageCode: nil , script: nil , region: nil )
476
+ XCTAssertEqual ( nilLanguageComponents. languageCode, nil )
477
+ XCTAssertEqual ( nilLanguageComponents. script, nil )
478
+ XCTAssertEqual ( nilLanguageComponents. region, nil )
479
+
480
+ let nilLanguage = Locale . Language ( languageCode: nil , script: nil , region: nil )
481
+ XCTAssertEqual ( nilLanguage. languageCode, nil )
482
+ XCTAssertEqual ( nilLanguage. script, nil )
483
+ XCTAssertEqual ( nilLanguage. region, nil )
484
+ }
373
485
}
374
486
375
487
final class LocalePropertiesTests : XCTestCase {
@@ -417,6 +529,8 @@ final class LocalePropertiesTests : XCTestCase {
417
529
verify ( components: Locale . Components ( languageCode: " zh " , script: " Hant " , languageRegion: " TW " ) , identifier: " zh_TW " )
418
530
verify ( components: Locale . Components ( languageCode: " zh " , script: " Hans " , languageRegion: " TW " ) , identifier: " zh-Hans_TW " )
419
531
532
+ verify ( components: . init( languageCode: " " , script: " " , languageRegion: " " ) , identifier: " " )
533
+
420
534
var custom = Locale . Components ( languageCode: " en " , languageRegion: " US " )
421
535
custom. measurementSystem = . metric
422
536
custom. currency = " GBP "
0 commit comments