diff --git a/modules/@angular/compiler/test/runtime_compiler_spec.ts b/modules/@angular/compiler/test/runtime_compiler_spec.ts
index abcba7567a..ead188388b 100644
--- a/modules/@angular/compiler/test/runtime_compiler_spec.ts
+++ b/modules/@angular/compiler/test/runtime_compiler_spec.ts
@@ -9,8 +9,8 @@
import {DirectiveResolver, ResourceLoader} from '@angular/compiler';
import {MockDirectiveResolver} from '@angular/compiler/testing';
import {Compiler, Component, ComponentFactory, Injectable, Injector, Input, NgModule, NgModuleFactory, Type} from '@angular/core';
-import {ComponentFixture, TestBed, fakeAsync, tick} from '@angular/core/testing';
-import {TestComponentBuilder, beforeEach, beforeEachProviders, ddescribe, describe, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
+import {ComponentFixture, TestBed, async, fakeAsync, getTestBed, tick} from '@angular/core/testing';
+import {beforeEach, beforeEachProviders, ddescribe, describe, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
import {expect} from '@angular/platform-browser/testing/matchers';
import {ViewMetadata} from '../core_private';
@@ -18,7 +18,7 @@ import {stringify} from '../src/facade/lang';
import {SpyResourceLoader} from './spies';
-@Component({selector: 'child-cmp', template: 'childComp'})
+@Component({selector: 'child-cmp'})
class ChildComp {
}
@@ -31,10 +31,65 @@ class SomeCompWithUrlTemplate {
}
export function main() {
+ describe('RuntimeCompiler', () => {
+
+ describe('compilerComponentSync', () => {
+ describe('never resolving loader', () => {
+ class StubResourceLoader {
+ get(url: string) { return new Promise(() => {}); }
+ }
+
+ beforeEach(() => {
+ TestBed.configureCompiler(
+ {providers: [{provide: ResourceLoader, useClass: StubResourceLoader}]});
+ });
+
+ it('should throw when using a templateUrl that has not been compiled before', async(() => {
+ TestBed.configureTestingModule({declarations: [SomeCompWithUrlTemplate]});
+ TestBed.compileComponents().then(() => {
+ expect(() => TestBed.createComponent(SomeCompWithUrlTemplate))
+ .toThrowError(
+ `Can't compile synchronously as ${stringify(SomeCompWithUrlTemplate)} is still being loaded!`);
+ });
+ }));
+
+ it('should throw when using a templateUrl in a nested component that has not been compiled before',
+ () => {
+ TestBed.configureTestingModule({declarations: [SomeComp, ChildComp]});
+ TestBed.overrideComponent(ChildComp, {set: {templateUrl: '/someTpl.html'}});
+ TestBed.overrideComponent(SomeComp, {set: {template: ''}});
+ TestBed.compileComponents().then(() => {
+ expect(() => TestBed.createComponent(SomeComp))
+ .toThrowError(
+ `Can't compile synchronously as ${stringify(ChildComp)} is still being loaded!`);
+ });
+ });
+ });
+
+ describe('resolving loader', () => {
+ class StubResourceLoader {
+ get(url: string) { return Promise.resolve('hello'); }
+ }
+
+ beforeEach(() => {
+ TestBed.configureCompiler(
+ {providers: [{provide: ResourceLoader, useClass: StubResourceLoader}]});
+ });
+
+ it('should allow to use templateUrl components that have been loaded before', async(() => {
+ TestBed.configureTestingModule({declarations: [SomeCompWithUrlTemplate]});
+ TestBed.compileComponents().then(() => {
+ const fixture = TestBed.createComponent(SomeCompWithUrlTemplate);
+ expect(fixture.nativeElement).toHaveText('hello');
+ });
+ }));
+ });
+ });
+ });
+
describe('RuntimeCompiler', () => {
let compiler: Compiler;
let resourceLoader: SpyResourceLoader;
- let tcb: TestComponentBuilder;
let dirResolver: MockDirectiveResolver;
let injector: Injector;
@@ -44,81 +99,15 @@ export function main() {
});
beforeEach(fakeAsync(inject(
- [Compiler, TestComponentBuilder, ResourceLoader, DirectiveResolver, Injector],
- (_compiler: Compiler, _tcb: TestComponentBuilder, _resourceLoader: SpyResourceLoader,
+ [Compiler, ResourceLoader, DirectiveResolver, Injector],
+ (_compiler: Compiler, _resourceLoader: SpyResourceLoader,
_dirResolver: MockDirectiveResolver, _injector: Injector) => {
compiler = _compiler;
- tcb = _tcb;
resourceLoader = _resourceLoader;
dirResolver = _dirResolver;
injector = _injector;
})));
- describe('clearCacheFor', () => {
- it('should support changing the content of a template referenced via templateUrl',
- fakeAsync(() => {
- resourceLoader.spy('get').andCallFake(() => Promise.resolve('init'));
- let compFixture =
- tcb.overrideView(SomeComp, new ViewMetadata({templateUrl: '/myComp.html'}))
- .createFakeAsync(SomeComp);
- expect(compFixture.nativeElement).toHaveText('init');
-
- resourceLoader.spy('get').andCallFake(() => Promise.resolve('new content'));
- // Note: overrideView is calling .clearCacheFor...
- compFixture = tcb.overrideView(SomeComp, new ViewMetadata({templateUrl: '/myComp.html'}))
- .createFakeAsync(SomeComp);
- expect(compFixture.nativeElement).toHaveText('new content');
- }));
-
- it('should support overwriting inline templates', () => {
- let componentFixture = tcb.createSync(SomeComp);
- expect(componentFixture.nativeElement).toHaveText('someComp');
-
- componentFixture = tcb.overrideTemplate(SomeComp, 'test').createSync(SomeComp);
- expect(componentFixture.nativeElement).toHaveText('test');
- });
-
- it('should not update existing compilation results', () => {
- dirResolver.setView(
- SomeComp,
- new ViewMetadata({template: '', directives: [ChildComp]}));
- dirResolver.setInlineTemplate(ChildComp, 'oldChild');
- let compFactory = compiler.compileComponentSync(SomeComp);
- dirResolver.setInlineTemplate(ChildComp, 'newChild');
- compiler.compileComponentSync(SomeComp);
- let compRef = compFactory.create(injector);
- expect(compRef.location.nativeElement).toHaveText('oldChild');
- });
- });
-
- describe('compileComponentSync', () => {
- it('should throw when using a templateUrl that has not been compiled before', () => {
- resourceLoader.spy('get').andCallFake(() => Promise.resolve(''));
- expect(() => tcb.createSync(SomeCompWithUrlTemplate))
- .toThrowError(
- `Can't compile synchronously as ${stringify(SomeCompWithUrlTemplate)} is still being loaded!`);
- });
-
- it('should throw when using a templateUrl in a nested component that has not been compiled before',
- () => {
- resourceLoader.spy('get').andCallFake(() => Promise.resolve(''));
- let localTcb =
- tcb.overrideView(SomeComp, new ViewMetadata({template: '', directives: [ChildComp]}))
- .overrideView(ChildComp, new ViewMetadata({templateUrl: '/someTpl.html'}));
- expect(() => localTcb.createSync(SomeComp))
- .toThrowError(
- `Can't compile synchronously as ${stringify(ChildComp)} is still being loaded!`);
- });
-
- it('should allow to use templateUrl components that have been loaded before',
- fakeAsync(() => {
- resourceLoader.spy('get').andCallFake(() => Promise.resolve('hello'));
- tcb.createFakeAsync(SomeCompWithUrlTemplate);
- let compFixture = tcb.createSync(SomeCompWithUrlTemplate);
- expect(compFixture.nativeElement).toHaveText('hello');
- }));
- });
-
describe('compileModuleAsync', () => {
it('should allow to use templateUrl components', fakeAsync(() => {
@NgModule({