Skip to content

Commit

Permalink
fix(common): do not override locale provided on bootstrap (angular#13654
Browse files Browse the repository at this point in the history
)

Closes angular#13607
  • Loading branch information
Dzmitry Shylovich authored and IgorMinar committed Jan 6, 2017
1 parent d9728d6 commit dc75f5c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 6 deletions.
11 changes: 10 additions & 1 deletion modules/@angular/core/src/application_module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {ApplicationInitStatus} from './application_init';
import {ApplicationRef, ApplicationRef_} from './application_ref';
import {APP_ID_RANDOM_PROVIDER} from './application_tokens';
import {IterableDiffers, KeyValueDiffers, defaultIterableDiffers, defaultKeyValueDiffers} from './change_detection/change_detection';
import {Inject, Optional, SkipSelf} from './di/metadata';
import {LOCALE_ID} from './i18n/tokens';
import {Compiler} from './linker/compiler';
import {ViewUtils} from './linker/view_utils';
Expand All @@ -24,6 +25,10 @@ export function _keyValueDiffersFactory() {
return defaultKeyValueDiffers;
}

export function _localeFactory(locale?: string): string {
return locale || 'en-US';
}

/**
* This module includes the providers of @angular/core that are needed
* to bootstrap components via `ApplicationRef`.
Expand All @@ -41,7 +46,11 @@ export function _keyValueDiffersFactory() {
AnimationQueue,
{provide: IterableDiffers, useFactory: _iterableDiffersFactory},
{provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory},
{provide: LOCALE_ID, useValue: 'en-US'},
{
provide: LOCALE_ID,
useFactory: _localeFactory,
deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
},
]
})
export class ApplicationModule {
Expand Down
2 changes: 1 addition & 1 deletion modules/@angular/core/test/application_module_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ export function main() {
it('should set the default locale to "en-US"',
inject([LOCALE_ID], (defaultLocale: string) => { expect(defaultLocale).toEqual('en-US'); }));
});
}
}
20 changes: 16 additions & 4 deletions modules/@angular/platform-browser/test/browser/bootstrap_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
* found in the LICENSE file at https://angular.io/license
*/

import {APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, Compiler, Component, Directive, ErrorHandler, Inject, Input, NgModule, OnDestroy, PLATFORM_INITIALIZER, Pipe, Provider, VERSION, createPlatformFactory} from '@angular/core';
import {APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, Compiler, Component, Directive, ErrorHandler, Inject, Input, LOCALE_ID, NgModule, OnDestroy, PLATFORM_INITIALIZER, Pipe, Provider, VERSION, createPlatformFactory} from '@angular/core';
import {ApplicationRef, destroyPlatform} from '@angular/core/src/application_ref';
import {Console} from '@angular/core/src/console';
import {ComponentRef} from '@angular/core/src/linker/component_factory';
import {Testability, TestabilityRegistry} from '@angular/core/src/testability/testability';
import {AsyncTestCompleter, Log, afterEach, beforeEach, beforeEachProviders, describe, iit, inject, it} from '@angular/core/testing/testing_internal';
import {AsyncTestCompleter, Log, afterEach, beforeEach, beforeEachProviders, describe, inject, it} from '@angular/core/testing/testing_internal';
import {BrowserModule} from '@angular/platform-browser';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
Expand Down Expand Up @@ -109,7 +109,8 @@ class DummyConsole implements Console {


class TestModule {}
function bootstrap(cmpType: any, providers: Provider[] = []): Promise<any> {
function bootstrap(
cmpType: any, providers: Provider[] = [], platformProviders: Provider[] = []): Promise<any> {
@NgModule({
imports: [BrowserModule],
declarations: [cmpType],
Expand All @@ -119,7 +120,7 @@ function bootstrap(cmpType: any, providers: Provider[] = []): Promise<any> {
})
class TestModule {
}
return platformBrowserDynamic().bootstrapModule(TestModule);
return platformBrowserDynamic(platformProviders).bootstrapModule(TestModule);
}

export function main() {
Expand Down Expand Up @@ -281,6 +282,17 @@ export function main() {
});
}));

it('should not override locale provided during bootstrap',
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
const refPromise =
bootstrap(HelloRootCmp, [testProviders], [{provide: LOCALE_ID, useValue: 'fr-FR'}]);

refPromise.then(ref => {
expect(ref.injector.get(LOCALE_ID)).toEqual('fr-FR');
async.done();
});
}));

it('should avoid cyclic dependencies when root component requires Lifecycle through DI',
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
const refPromise = bootstrap(HelloRootCmp4, testProviders);
Expand Down

0 comments on commit dc75f5c

Please sign in to comment.