refactor(common): move the low level locale registering to core (#33523)
To limit the exposure of the private `LOCALE_DATA` from outside `@angular/core` this commit exposes private functions in the core to hide the internal structures better. * The `registerLocaleData()` implementation has moved from `@angular/common` to `@angular/core`. A stub that delegates to core has been left in common for backward compatibility. * A new `ɵunregisterLocaleData()` function has been provided, which is particularly useful in tests to clear out registered locales to prevent subsequent tests from being affected. * A private export of `ɵregisterLocaleData()` has been removed from `@angular/common`. This was not being used and is accessible via `@angular/core` anyway. PR Close #33523
This commit is contained in:

committed by
atscott

parent
5b21b71c9a
commit
7e8eec57f0
60
packages/core/test/i18n/locale_data_api_spec.ts
Normal file
60
packages/core/test/i18n/locale_data_api_spec.ts
Normal file
@ -0,0 +1,60 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
import {findLocaleData, registerLocaleData, unregisterLocaleData} from '../../src/i18n/locale_data_api';
|
||||
|
||||
{
|
||||
describe('locale data api', () => {
|
||||
const localeCaESVALENCIA: any[] = ['ca-ES-VALENCIA'];
|
||||
const localeEn: any[] = ['en'];
|
||||
const localeFr: any[] = ['fr'];
|
||||
const localeFrCA: any[] = ['fr-CA'];
|
||||
const localeZh: any[] = ['zh'];
|
||||
const localeEnAU: any[] = ['en-AU'];
|
||||
|
||||
beforeAll(() => {
|
||||
registerLocaleData(localeCaESVALENCIA);
|
||||
registerLocaleData(localeEn);
|
||||
registerLocaleData(localeFr);
|
||||
registerLocaleData(localeFrCA);
|
||||
registerLocaleData(localeFr, 'fake-id');
|
||||
registerLocaleData(localeFrCA, 'fake_Id2');
|
||||
registerLocaleData(localeZh);
|
||||
registerLocaleData(localeEnAU);
|
||||
});
|
||||
|
||||
afterAll(() => unregisterLocaleData());
|
||||
|
||||
describe('findLocaleData', () => {
|
||||
it('should throw if the LOCALE_DATA for the chosen locale or its parent locale is not available',
|
||||
() => {
|
||||
expect(() => findLocaleData('pt-AO'))
|
||||
.toThrowError(/Missing locale data for the locale "pt-AO"/);
|
||||
});
|
||||
|
||||
it('should return english data if the locale is en-US',
|
||||
() => { expect(findLocaleData('en-US')).toEqual(localeEn); });
|
||||
|
||||
it('should return the exact LOCALE_DATA if it is available',
|
||||
() => { expect(findLocaleData('fr-CA')).toEqual(localeFrCA); });
|
||||
|
||||
it('should return the parent LOCALE_DATA if it exists and exact locale is not available',
|
||||
() => { expect(findLocaleData('fr-BE')).toEqual(localeFr); });
|
||||
|
||||
it(`should find the LOCALE_DATA even if the locale id is badly formatted`, () => {
|
||||
expect(findLocaleData('ca-ES-VALENCIA')).toEqual(localeCaESVALENCIA);
|
||||
expect(findLocaleData('CA_es_Valencia')).toEqual(localeCaESVALENCIA);
|
||||
});
|
||||
|
||||
it(`should find the LOCALE_DATA if the locale id was registered`, () => {
|
||||
expect(findLocaleData('fake-id')).toEqual(localeFr);
|
||||
expect(findLocaleData('fake_iD')).toEqual(localeFr);
|
||||
expect(findLocaleData('fake-id2')).toEqual(localeFrCA);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user