| 
									
										
										
										
											2016-08-12 16:52:55 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-08-12 16:52:55 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-14 10:39:41 +00:00
										 |  |  | import {DEFAULT_CURRENCY_CODE, LOCALE_ID} from '@angular/core'; | 
					
						
							| 
									
										
										
										
											2019-10-23 22:49:02 +01:00
										 |  |  | import {ivyEnabled} from '@angular/private/testing'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {getLocaleId} from '../src/render3'; | 
					
						
							|  |  |  | import {global} from '../src/util/global'; | 
					
						
							|  |  |  | import {TestBed} from '../testing'; | 
					
						
							| 
									
										
										
										
											2017-03-02 12:12:46 -08:00
										 |  |  | import {describe, expect, inject, it} from '../testing/src/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-08-12 16:52:55 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:28:41 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-12 16:52:55 -07:00
										 |  |  |   describe('Application module', () => { | 
					
						
							| 
									
										
										
										
											2020-04-13 16:40:21 -07:00
										 |  |  |     it('should set the default locale to "en-US"', inject([LOCALE_ID], (defaultLocale: string) => { | 
					
						
							|  |  |  |          expect(defaultLocale).toEqual('en-US'); | 
					
						
							|  |  |  |        })); | 
					
						
							| 
									
										
										
										
											2019-10-23 22:49:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-14 10:39:41 +00:00
										 |  |  |     it('should set the default currency code to "USD"', | 
					
						
							|  |  |  |        inject([DEFAULT_CURRENCY_CODE], (defaultCurrencyCode: string) => { | 
					
						
							|  |  |  |          expect(defaultCurrencyCode).toEqual('USD'); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 22:49:02 +01:00
										 |  |  |     if (ivyEnabled) { | 
					
						
							|  |  |  |       it('should set the ivy locale with the configured LOCALE_ID', () => { | 
					
						
							|  |  |  |         TestBed.configureTestingModule({providers: [{provide: LOCALE_ID, useValue: 'fr'}]}); | 
					
						
							|  |  |  |         const before = getLocaleId(); | 
					
						
							|  |  |  |         const locale = TestBed.inject(LOCALE_ID); | 
					
						
							|  |  |  |         const after = getLocaleId(); | 
					
						
							|  |  |  |         expect(before).toEqual('en-us'); | 
					
						
							|  |  |  |         expect(locale).toEqual('fr'); | 
					
						
							|  |  |  |         expect(after).toEqual('fr'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe('$localize.locale', () => { | 
					
						
							|  |  |  |         beforeEach(() => initLocale('de')); | 
					
						
							|  |  |  |         afterEach(() => restoreLocale()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it('should set the ivy locale to `$localize.locale` value if it is defined', () => { | 
					
						
							|  |  |  |           // Injecting `LOCALE_ID` should also initialize the ivy locale
 | 
					
						
							|  |  |  |           const locale = TestBed.inject(LOCALE_ID); | 
					
						
							|  |  |  |           expect(locale).toEqual('de'); | 
					
						
							|  |  |  |           expect(getLocaleId()).toEqual('de'); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it('should set the ivy locale to an application provided LOCALE_ID even if `$localize.locale` is defined', | 
					
						
							|  |  |  |            () => { | 
					
						
							|  |  |  |              TestBed.configureTestingModule({providers: [{provide: LOCALE_ID, useValue: 'fr'}]}); | 
					
						
							|  |  |  |              const locale = TestBed.inject(LOCALE_ID); | 
					
						
							|  |  |  |              expect(locale).toEqual('fr'); | 
					
						
							|  |  |  |              expect(getLocaleId()).toEqual('fr'); | 
					
						
							|  |  |  |            }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-08-12 16:52:55 -07:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2017-01-05 20:24:37 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-10-23 22:49:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | let hasGlobalLocalize: boolean; | 
					
						
							|  |  |  | let hasGlobalLocale: boolean; | 
					
						
							|  |  |  | let originalLocale: string; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function initLocale(locale: string) { | 
					
						
							|  |  |  |   hasGlobalLocalize = Object.getOwnPropertyNames(global).includes('$localize'); | 
					
						
							|  |  |  |   if (!hasGlobalLocalize) { | 
					
						
							|  |  |  |     global.$localize = {}; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   hasGlobalLocale = Object.getOwnPropertyNames(global.$localize).includes('locale'); | 
					
						
							|  |  |  |   originalLocale = global.$localize.locale; | 
					
						
							|  |  |  |   global.$localize.locale = locale; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function restoreLocale() { | 
					
						
							|  |  |  |   if (hasGlobalLocale) { | 
					
						
							|  |  |  |     global.$localize.locale = originalLocale; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     delete global.$localize.locale; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!hasGlobalLocalize) { | 
					
						
							|  |  |  |     delete global.$localize; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |