| 
									
										
										
										
											2016-06-23 09:47:54 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @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
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  | import {CompileAnimationEntryMetadata} from '@angular/compiler'; | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  | import {CompileDirectiveMetadata, CompileStylesheetMetadata, CompileTemplateMetadata, CompileTypeMetadata} from '@angular/compiler/src/compile_metadata'; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | import {CompilerConfig} from '@angular/compiler/src/config'; | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {DirectiveNormalizer} from '@angular/compiler/src/directive_normalizer'; | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  | import {ResourceLoader} from '@angular/compiler/src/resource_loader'; | 
					
						
							| 
									
										
										
										
											2017-03-02 12:12:46 -08:00
										 |  |  | import {MockResourceLoader} from '@angular/compiler/testing/src/resource_loader_mock'; | 
					
						
							|  |  |  | import {TEST_COMPILER_PROVIDERS} from '@angular/compiler/testing/src/test_bindings'; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | import {ViewEncapsulation} from '@angular/core/src/metadata/view'; | 
					
						
							| 
									
										
										
										
											2016-07-28 04:54:49 -07:00
										 |  |  | import {TestBed} from '@angular/core/testing'; | 
					
						
							| 
									
										
										
										
											2017-03-02 12:12:46 -08:00
										 |  |  | import {AsyncTestCompleter, beforeEach, describe, expect, inject, it} from '@angular/core/testing/src/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  | import {SyncAsyncResult, noUndefined} from '../src/util'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  | import {SpyResourceLoader} from './spies'; | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  | const SOME_MODULE_URL = 'package:some/module/a.js'; | 
					
						
							|  |  |  | const SOME_HTTP_MODULE_URL = 'http://some/module/a.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  | function normalizeTemplate(normalizer: DirectiveNormalizer, o: { | 
					
						
							|  |  |  |   ngModuleType?: any; componentType?: any; moduleUrl?: string; template?: string | null; | 
					
						
							|  |  |  |   templateUrl?: string | null; | 
					
						
							|  |  |  |   styles?: string[]; | 
					
						
							|  |  |  |   styleUrls?: string[]; | 
					
						
							|  |  |  |   interpolation?: [string, string] | null; | 
					
						
							|  |  |  |   encapsulation?: ViewEncapsulation | null; | 
					
						
							|  |  |  |   animations?: CompileAnimationEntryMetadata[]; | 
					
						
							|  |  |  | }) { | 
					
						
							|  |  |  |   return normalizer.normalizeTemplate({ | 
					
						
							|  |  |  |     ngModuleType: noUndefined(o.ngModuleType), | 
					
						
							|  |  |  |     componentType: noUndefined(o.componentType), | 
					
						
							|  |  |  |     moduleUrl: noUndefined(o.moduleUrl), | 
					
						
							|  |  |  |     template: noUndefined(o.template), | 
					
						
							|  |  |  |     templateUrl: noUndefined(o.templateUrl), | 
					
						
							|  |  |  |     styles: noUndefined(o.styles), | 
					
						
							|  |  |  |     styleUrls: noUndefined(o.styleUrls), | 
					
						
							|  |  |  |     interpolation: noUndefined(o.interpolation), | 
					
						
							|  |  |  |     encapsulation: noUndefined(o.encapsulation), | 
					
						
							|  |  |  |     animations: noUndefined(o.animations) | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function normalizeTemplateAsync(normalizer: DirectiveNormalizer, o: { | 
					
						
							|  |  |  |   ngModuleType?: any; componentType?: any; moduleUrl?: string; template?: string | null; | 
					
						
							|  |  |  |   templateUrl?: string | null; | 
					
						
							|  |  |  |   styles?: string[]; | 
					
						
							|  |  |  |   styleUrls?: string[]; | 
					
						
							|  |  |  |   interpolation?: [string, string] | null; | 
					
						
							|  |  |  |   encapsulation?: ViewEncapsulation | null; | 
					
						
							|  |  |  |   animations?: CompileAnimationEntryMetadata[]; | 
					
						
							|  |  |  | }) { | 
					
						
							|  |  |  |   return normalizer.normalizeTemplateAsync({ | 
					
						
							|  |  |  |     ngModuleType: noUndefined(o.ngModuleType), | 
					
						
							|  |  |  |     componentType: noUndefined(o.componentType), | 
					
						
							|  |  |  |     moduleUrl: noUndefined(o.moduleUrl), | 
					
						
							|  |  |  |     template: noUndefined(o.template), | 
					
						
							|  |  |  |     templateUrl: noUndefined(o.templateUrl), | 
					
						
							|  |  |  |     styles: noUndefined(o.styles), | 
					
						
							|  |  |  |     styleUrls: noUndefined(o.styleUrls), | 
					
						
							|  |  |  |     interpolation: noUndefined(o.interpolation), | 
					
						
							|  |  |  |     encapsulation: noUndefined(o.encapsulation), | 
					
						
							|  |  |  |     animations: noUndefined(o.animations) | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function normalizeTemplateSync(normalizer: DirectiveNormalizer, o: { | 
					
						
							|  |  |  |   ngModuleType?: any; componentType?: any; moduleUrl?: string; template?: string | null; | 
					
						
							|  |  |  |   templateUrl?: string | null; | 
					
						
							|  |  |  |   styles?: string[]; | 
					
						
							|  |  |  |   styleUrls?: string[]; | 
					
						
							|  |  |  |   interpolation?: [string, string] | null; | 
					
						
							|  |  |  |   encapsulation?: ViewEncapsulation | null; | 
					
						
							|  |  |  |   animations?: CompileAnimationEntryMetadata[]; | 
					
						
							|  |  |  | }): CompileTemplateMetadata { | 
					
						
							|  |  |  |   return normalizer.normalizeTemplateSync({ | 
					
						
							|  |  |  |     ngModuleType: noUndefined(o.ngModuleType), | 
					
						
							|  |  |  |     componentType: noUndefined(o.componentType), | 
					
						
							|  |  |  |     moduleUrl: noUndefined(o.moduleUrl), | 
					
						
							|  |  |  |     template: noUndefined(o.template), | 
					
						
							|  |  |  |     templateUrl: noUndefined(o.templateUrl), | 
					
						
							|  |  |  |     styles: noUndefined(o.styles), | 
					
						
							|  |  |  |     styleUrls: noUndefined(o.styleUrls), | 
					
						
							|  |  |  |     interpolation: noUndefined(o.interpolation), | 
					
						
							|  |  |  |     encapsulation: noUndefined(o.encapsulation), | 
					
						
							|  |  |  |     animations: noUndefined(o.animations) | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function compileTemplateMetadata({encapsulation, template, templateUrl, styles, styleUrls, | 
					
						
							|  |  |  |                                   externalStylesheets, animations, ngContentSelectors, | 
					
						
							|  |  |  |                                   interpolation, isInline}: { | 
					
						
							|  |  |  |   encapsulation?: ViewEncapsulation | null, | 
					
						
							|  |  |  |   template?: string | null, | 
					
						
							|  |  |  |   templateUrl?: string | null, | 
					
						
							|  |  |  |   styles?: string[], | 
					
						
							|  |  |  |   styleUrls?: string[], | 
					
						
							|  |  |  |   externalStylesheets?: CompileStylesheetMetadata[], | 
					
						
							|  |  |  |   ngContentSelectors?: string[], | 
					
						
							|  |  |  |   animations?: any[], | 
					
						
							|  |  |  |   interpolation?: [string, string] | null, | 
					
						
							|  |  |  |   isInline?: boolean | 
					
						
							|  |  |  | }): CompileTemplateMetadata { | 
					
						
							|  |  |  |   return new CompileTemplateMetadata({ | 
					
						
							|  |  |  |     encapsulation: encapsulation || null, | 
					
						
							|  |  |  |     template: template || null, | 
					
						
							|  |  |  |     templateUrl: templateUrl || null, | 
					
						
							|  |  |  |     styles: styles || [], | 
					
						
							|  |  |  |     styleUrls: styleUrls || [], | 
					
						
							|  |  |  |     externalStylesheets: externalStylesheets || [], | 
					
						
							|  |  |  |     ngContentSelectors: ngContentSelectors || [], | 
					
						
							|  |  |  |     animations: animations || [], | 
					
						
							|  |  |  |     interpolation: interpolation || null, | 
					
						
							|  |  |  |     isInline: !!isInline, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function normalizeLoadedTemplate( | 
					
						
							|  |  |  |     normalizer: DirectiveNormalizer, o: { | 
					
						
							|  |  |  |       ngModuleType?: any; componentType?: any; moduleUrl?: string; template?: string | null; | 
					
						
							|  |  |  |       templateUrl?: string | null; | 
					
						
							|  |  |  |       styles?: string[]; | 
					
						
							|  |  |  |       styleUrls?: string[]; | 
					
						
							|  |  |  |       interpolation?: [string, string] | null; | 
					
						
							|  |  |  |       encapsulation?: ViewEncapsulation | null; | 
					
						
							|  |  |  |       animations?: CompileAnimationEntryMetadata[]; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     template: string, templateAbsUrl: string) { | 
					
						
							|  |  |  |   return normalizer.normalizeLoadedTemplate( | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         ngModuleType: o.ngModuleType || null, | 
					
						
							|  |  |  |         componentType: o.componentType || null, | 
					
						
							|  |  |  |         moduleUrl: o.moduleUrl || '', | 
					
						
							|  |  |  |         template: o.template || null, | 
					
						
							|  |  |  |         templateUrl: o.templateUrl || null, | 
					
						
							|  |  |  |         styles: o.styles || [], | 
					
						
							|  |  |  |         styleUrls: o.styleUrls || [], | 
					
						
							|  |  |  |         interpolation: o.interpolation || null, | 
					
						
							|  |  |  |         encapsulation: o.encapsulation || null, | 
					
						
							| 
									
										
										
										
											2017-04-14 14:40:56 -07:00
										 |  |  |         animations: o.animations || [], | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |       }, | 
					
						
							|  |  |  |       template, templateAbsUrl); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |   describe('DirectiveNormalizer', () => { | 
					
						
							| 
									
										
										
										
											2016-07-28 04:54:49 -07:00
										 |  |  |     beforeEach(() => { TestBed.configureCompiler({providers: TEST_COMPILER_PROVIDERS}); }); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |     describe('normalizeDirective', () => { | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should throw if no template was specified', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            expect(() => normalizeTemplate(normalizer, { | 
					
						
							|  |  |  |                     ngModuleType: null, | 
					
						
							|  |  |  |                     componentType: SomeComp, | 
					
						
							|  |  |  |                     moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                   })) | 
					
						
							|  |  |  |                .toThrowError('No template specified for component SomeComp'); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |          })); | 
					
						
							| 
									
										
										
										
											2016-12-11 13:49:03 +03:00
										 |  |  |       it('should throw if template is not a string', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            expect(() => normalizeTemplate(normalizer, { | 
					
						
							|  |  |  |                     ngModuleType: null, | 
					
						
							|  |  |  |                     componentType: SomeComp, | 
					
						
							|  |  |  |                     moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                     template: <any>{} | 
					
						
							|  |  |  |                   })) | 
					
						
							|  |  |  |                .toThrowError('The template specified for component SomeComp is not a string'); | 
					
						
							| 
									
										
										
										
											2016-12-11 13:49:03 +03:00
										 |  |  |          })); | 
					
						
							|  |  |  |       it('should throw if templateUrl is not a string', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            expect(() => normalizeTemplate(normalizer, { | 
					
						
							|  |  |  |                     ngModuleType: null, | 
					
						
							|  |  |  |                     componentType: SomeComp, | 
					
						
							|  |  |  |                     moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                     templateUrl: <any>{} | 
					
						
							|  |  |  |                   })) | 
					
						
							|  |  |  |                .toThrowError('The templateUrl specified for component SomeComp is not a string'); | 
					
						
							| 
									
										
										
										
											2016-12-11 13:49:03 +03:00
										 |  |  |          })); | 
					
						
							| 
									
										
										
										
											2017-03-29 20:26:48 +03:00
										 |  |  |       it('should throw if both template and templateUrl are defined', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            expect(() => normalizeTemplate(normalizer, { | 
					
						
							|  |  |  |                     ngModuleType: null, | 
					
						
							|  |  |  |                     componentType: SomeComp, | 
					
						
							|  |  |  |                     moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                     template: '', | 
					
						
							|  |  |  |                     templateUrl: '', | 
					
						
							|  |  |  |                   })) | 
					
						
							|  |  |  |                .toThrowError(`'SomeComp' component cannot define both template and templateUrl`); | 
					
						
							| 
									
										
										
										
											2017-03-29 20:26:48 +03:00
										 |  |  |          })); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('normalizeTemplateSync', () => { | 
					
						
							|  |  |  |       it('should store the template', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeTemplateSync(normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |              ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |              componentType: SomeComp, | 
					
						
							|  |  |  |              moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |              encapsulation: null, | 
					
						
							|  |  |  |              template: 'a', | 
					
						
							|  |  |  |              templateUrl: null, | 
					
						
							|  |  |  |              styles: [], | 
					
						
							|  |  |  |              styleUrls: [] | 
					
						
							|  |  |  |            }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |            expect(template.template).toEqual('a'); | 
					
						
							|  |  |  |            expect(template.templateUrl).toEqual('package:some/module/a.js'); | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |            expect(template.isInline).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should resolve styles on the annotation against the moduleUrl', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeTemplateSync(normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |              ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |              componentType: SomeComp, | 
					
						
							|  |  |  |              moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |              encapsulation: null, | 
					
						
							|  |  |  |              template: '', | 
					
						
							|  |  |  |              templateUrl: null, | 
					
						
							|  |  |  |              styles: [], | 
					
						
							|  |  |  |              styleUrls: ['test.css'] | 
					
						
							|  |  |  |            }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |            expect(template.styleUrls).toEqual(['package:some/module/test.css']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should resolve styles in the template against the moduleUrl', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeTemplateSync(normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |              ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |              componentType: SomeComp, | 
					
						
							|  |  |  |              moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |              encapsulation: null, | 
					
						
							|  |  |  |              template: '<style>@import test.css</style>', | 
					
						
							|  |  |  |              templateUrl: null, | 
					
						
							|  |  |  |              styles: [], | 
					
						
							|  |  |  |              styleUrls: [] | 
					
						
							|  |  |  |            }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |            expect(template.styleUrls).toEqual(['package:some/module/test.css']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should use ViewEncapsulation.Emulated by default', | 
					
						
							|  |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeTemplateSync(normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |              ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |              componentType: SomeComp, | 
					
						
							|  |  |  |              moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |              encapsulation: null, | 
					
						
							|  |  |  |              template: '', | 
					
						
							|  |  |  |              templateUrl: null, | 
					
						
							|  |  |  |              styles: [], | 
					
						
							|  |  |  |              styleUrls: ['test.css'] | 
					
						
							|  |  |  |            }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |            expect(template.encapsulation).toEqual(ViewEncapsulation.Emulated); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |       it('should use default encapsulation provided by CompilerConfig', | 
					
						
							|  |  |  |          inject( | 
					
						
							|  |  |  |              [CompilerConfig, DirectiveNormalizer], | 
					
						
							|  |  |  |              (config: CompilerConfig, normalizer: DirectiveNormalizer) => { | 
					
						
							|  |  |  |                config.defaultEncapsulation = ViewEncapsulation.None; | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                const template = normalizeTemplateSync(normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                  encapsulation: undefined, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  template: '', | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                  templateUrl: undefined, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: ['test.css'] | 
					
						
							|  |  |  |                }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                expect(template.encapsulation).toEqual(ViewEncapsulation.None); | 
					
						
							|  |  |  |              })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('templateUrl', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should load a template from a url that is resolved against moduleUrl', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: MockResourceLoader) => { | 
					
						
							|  |  |  |                resourceLoader.expect('package:some/module/sometplurl.html', 'a'); | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                normalizeTemplateAsync(normalizer, { | 
					
						
							|  |  |  |                  ngModuleType: null, | 
					
						
							|  |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  template: null, | 
					
						
							|  |  |  |                  templateUrl: 'sometplurl.html', | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: ['test.css'] | 
					
						
							|  |  |  |                }).then((template: CompileTemplateMetadata) => { | 
					
						
							|  |  |  |                  expect(template.template).toEqual('a'); | 
					
						
							|  |  |  |                  expect(template.templateUrl).toEqual('package:some/module/sometplurl.html'); | 
					
						
							|  |  |  |                  expect(template.isInline).toBe(false); | 
					
						
							|  |  |  |                  async.done(); | 
					
						
							|  |  |  |                }); | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |                resourceLoader.flush(); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |              })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should resolve styles on the annotation against the moduleUrl', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: MockResourceLoader) => { | 
					
						
							|  |  |  |                resourceLoader.expect('package:some/module/tpl/sometplurl.html', ''); | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                normalizeTemplateAsync(normalizer, { | 
					
						
							|  |  |  |                  ngModuleType: null, | 
					
						
							|  |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  template: null, | 
					
						
							|  |  |  |                  templateUrl: 'tpl/sometplurl.html', | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: ['test.css'] | 
					
						
							|  |  |  |                }).then((template: CompileTemplateMetadata) => { | 
					
						
							|  |  |  |                  expect(template.styleUrls).toEqual(['package:some/module/test.css']); | 
					
						
							|  |  |  |                  async.done(); | 
					
						
							|  |  |  |                }); | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |                resourceLoader.flush(); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |              })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should resolve styles in the template against the templateUrl', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: MockResourceLoader) => { | 
					
						
							|  |  |  |                resourceLoader.expect( | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                    'package:some/module/tpl/sometplurl.html', '<style>@import test.css</style>'); | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                normalizeTemplateAsync(normalizer, { | 
					
						
							|  |  |  |                  ngModuleType: null, | 
					
						
							|  |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  template: null, | 
					
						
							|  |  |  |                  templateUrl: 'tpl/sometplurl.html', | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }).then((template: CompileTemplateMetadata) => { | 
					
						
							|  |  |  |                  expect(template.styleUrls).toEqual(['package:some/module/tpl/test.css']); | 
					
						
							|  |  |  |                  async.done(); | 
					
						
							|  |  |  |                }); | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |                resourceLoader.flush(); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |              })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('normalizeExternalStylesheets', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |       beforeEach(() => { | 
					
						
							|  |  |  |         TestBed.configureCompiler( | 
					
						
							|  |  |  |             {providers: [{provide: ResourceLoader, useClass: SpyResourceLoader}]}); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       it('should load an external stylesheet', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: SpyResourceLoader) => { | 
					
						
							|  |  |  |                programResourceLoaderSpy(resourceLoader, {'package:some/module/test.css': 'a'}); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                normalizer | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                    .normalizeExternalStylesheets(compileTemplateMetadata({ | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                      template: '', | 
					
						
							|  |  |  |                      templateUrl: '', | 
					
						
							|  |  |  |                      styleUrls: ['package:some/module/test.css'] | 
					
						
							|  |  |  |                    })) | 
					
						
							|  |  |  |                    .then((template: CompileTemplateMetadata) => { | 
					
						
							|  |  |  |                      expect(template.externalStylesheets.length).toBe(1); | 
					
						
							|  |  |  |                      expect(template.externalStylesheets[0]).toEqual(new CompileStylesheetMetadata({ | 
					
						
							|  |  |  |                        moduleUrl: 'package:some/module/test.css', | 
					
						
							|  |  |  |                        styles: ['a'], | 
					
						
							|  |  |  |                        styleUrls: [] | 
					
						
							|  |  |  |                      })); | 
					
						
							|  |  |  |                      async.done(); | 
					
						
							|  |  |  |                    }); | 
					
						
							|  |  |  |              })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should load stylesheets referenced by external stylesheets', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: SpyResourceLoader) => { | 
					
						
							|  |  |  |                programResourceLoaderSpy(resourceLoader, { | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                  'package:some/module/test.css': 'a@import "test2.css"', | 
					
						
							|  |  |  |                  'package:some/module/test2.css': 'b' | 
					
						
							|  |  |  |                }); | 
					
						
							|  |  |  |                normalizer | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                    .normalizeExternalStylesheets(compileTemplateMetadata({ | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                      template: '', | 
					
						
							|  |  |  |                      templateUrl: '', | 
					
						
							|  |  |  |                      styleUrls: ['package:some/module/test.css'] | 
					
						
							|  |  |  |                    })) | 
					
						
							|  |  |  |                    .then((template: CompileTemplateMetadata) => { | 
					
						
							|  |  |  |                      expect(template.externalStylesheets.length).toBe(2); | 
					
						
							|  |  |  |                      expect(template.externalStylesheets[0]).toEqual(new CompileStylesheetMetadata({ | 
					
						
							|  |  |  |                        moduleUrl: 'package:some/module/test.css', | 
					
						
							|  |  |  |                        styles: ['a'], | 
					
						
							|  |  |  |                        styleUrls: ['package:some/module/test2.css'] | 
					
						
							|  |  |  |                      })); | 
					
						
							|  |  |  |                      expect(template.externalStylesheets[1]).toEqual(new CompileStylesheetMetadata({ | 
					
						
							|  |  |  |                        moduleUrl: 'package:some/module/test2.css', | 
					
						
							|  |  |  |                        styles: ['b'], | 
					
						
							|  |  |  |                        styleUrls: [] | 
					
						
							|  |  |  |                      })); | 
					
						
							|  |  |  |                      async.done(); | 
					
						
							|  |  |  |                    }); | 
					
						
							|  |  |  |              })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('caching', () => { | 
					
						
							|  |  |  |       it('should work for templateUrl', | 
					
						
							|  |  |  |          inject( | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |              [AsyncTestCompleter, DirectiveNormalizer, ResourceLoader], | 
					
						
							|  |  |  |              (async: AsyncTestCompleter, normalizer: DirectiveNormalizer, | 
					
						
							|  |  |  |               resourceLoader: MockResourceLoader) => { | 
					
						
							|  |  |  |                resourceLoader.expect('package:some/module/cmp.html', 'a'); | 
					
						
							| 
									
										
										
										
											2016-11-12 14:08:58 +01:00
										 |  |  |                const prenormMeta = { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null as any, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                  templateUrl: 'cmp.html', | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                }; | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                Promise | 
					
						
							|  |  |  |                    .all([ | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |                      normalizeTemplateAsync(normalizer, prenormMeta), | 
					
						
							|  |  |  |                      normalizeTemplateAsync(normalizer, prenormMeta) | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |                    ]) | 
					
						
							|  |  |  |                    .then((templates: CompileTemplateMetadata[]) => { | 
					
						
							|  |  |  |                      expect(templates[0].template).toEqual('a'); | 
					
						
							|  |  |  |                      expect(templates[1].template).toEqual('a'); | 
					
						
							|  |  |  |                      async.done(); | 
					
						
							|  |  |  |                    }); | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  |                resourceLoader.flush(); | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |              })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('normalizeLoadedTemplate', () => { | 
					
						
							| 
									
										
										
										
											2017-03-23 14:24:34 +11:00
										 |  |  |       it('should store the viewEncapsulation in the result', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-12 14:08:58 +01:00
										 |  |  |            const viewEncapsulation = ViewEncapsulation.Native; | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: viewEncapsulation, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.encapsulation).toBe(viewEncapsulation); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should keep the template as html', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							|  |  |  |                'a', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2016-07-21 17:12:00 -07:00
										 |  |  |            expect(template.template).toEqual('a'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should collect ngContent', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '<ng-content select="a"></ng-content>', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.ngContentSelectors).toEqual(['a']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should normalize ngContent wildcard selector', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |                '<ng-content></ng-content><ng-content select></ng-content><ng-content select="*"></ng-content>', | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |                'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.ngContentSelectors).toEqual(['*', '*', '*']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should collect top level styles in the template', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '<style>a</style>', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.styles).toEqual(['a']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should collect styles inside in elements', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '<div><style>a</style></div>', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.styles).toEqual(['a']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should collect styleUrls in the template', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '<link rel="stylesheet" href="aUrl">', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |            expect(template.styleUrls).toEqual(['package:some/module/aUrl']); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should collect styleUrls in elements', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |                '<div><link rel="stylesheet" href="aUrl"></div>', 'package:some/module/'); | 
					
						
							|  |  |  |            expect(template.styleUrls).toEqual(['package:some/module/aUrl']); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |       it('should ignore link elements with non stylesheet rel attribute', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '<link href="b" rel="a">', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |            expect(template.styleUrls).toEqual([]); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-14 09:39:40 -07:00
										 |  |  |       it('should ignore link elements with absolute urls but non package: scheme', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-12-03 15:53:44 -08:00
										 |  |  |                '<link href="http://some/external.css" rel="stylesheet">', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-10-14 09:39:40 -07:00
										 |  |  |            expect(template.styleUrls).toEqual([]); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |       it('should extract @import style urls into styleAbsUrl', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: ['@import "test.css";'], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '', 'package:some/module/id'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.styles).toEqual(['']); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |            expect(template.styleUrls).toEqual(['package:some/module/test.css']); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-14 09:39:40 -07:00
										 |  |  |       it('should not resolve relative urls in inline styles', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: ['.foo{background-image: url(\'double.jpg\');'], | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                  styleUrls: [] | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |                '', 'package:some/module/id'); | 
					
						
							| 
									
										
										
										
											2015-10-14 09:39:40 -07:00
										 |  |  |            expect(template.styles).toEqual(['.foo{background-image: url(\'double.jpg\');']); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should resolve relative style urls in styleUrls', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: ['test.css'] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '', 'package:some/module/id'); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |            expect(template.styles).toEqual([]); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |            expect(template.styleUrls).toEqual(['package:some/module/test.css']); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-27 14:00:15 -07:00
										 |  |  |       it('should resolve relative style urls in styleUrls with http directive url', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_HTTP_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: ['test.css'] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '', 'http://some/module/id'); | 
					
						
							| 
									
										
										
										
											2015-10-27 14:00:15 -07:00
										 |  |  |            expect(template.styles).toEqual([]); | 
					
						
							|  |  |  |            expect(template.styleUrls).toEqual(['http://some/module/test.css']); | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-16 15:47:48 +08:00
										 |  |  |       it('should normalize ViewEncapsulation.Emulated to ViewEncapsulation.None if there are no styles nor stylesheets', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: ViewEncapsulation.Emulated, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2016-05-02 09:38:46 -07:00
										 |  |  |                '', 'package:some/module/id'); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |            expect(template.encapsulation).toEqual(ViewEncapsulation.None); | 
					
						
							|  |  |  |          })); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 16:02:19 -08:00
										 |  |  |       it('should ignore ng-content in elements with ngNonBindable', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-11-23 16:02:19 -08:00
										 |  |  |                '<div ngNonBindable><ng-content select="a"></ng-content></div>', | 
					
						
							| 
									
										
										
										
											2015-10-01 10:07:49 -07:00
										 |  |  |                'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |            expect(template.ngContentSelectors).toEqual([]); | 
					
						
							|  |  |  |          })); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 16:02:19 -08:00
										 |  |  |       it('should still collect <style> in elements with ngNonBindable', | 
					
						
							| 
									
										
										
										
											2016-01-06 14:13:44 -08:00
										 |  |  |          inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => { | 
					
						
							| 
									
										
										
										
											2017-03-24 09:59:58 -07:00
										 |  |  |            const template = normalizeLoadedTemplate( | 
					
						
							|  |  |  |                normalizer, { | 
					
						
							| 
									
										
										
										
											2017-03-14 09:16:15 -07:00
										 |  |  |                  ngModuleType: null, | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  |                  componentType: SomeComp, | 
					
						
							|  |  |  |                  moduleUrl: SOME_MODULE_URL, | 
					
						
							|  |  |  |                  encapsulation: null, | 
					
						
							|  |  |  |                  styles: [], | 
					
						
							|  |  |  |                  styleUrls: [] | 
					
						
							|  |  |  |                }, | 
					
						
							| 
									
										
										
										
											2015-11-23 16:02:19 -08:00
										 |  |  |                '<div ngNonBindable><style>div {color:red}</style></div>', 'package:some/module/'); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |            expect(template.styles).toEqual(['div {color:red}']); | 
					
						
							|  |  |  |          })); | 
					
						
							| 
									
										
										
										
											2015-09-18 10:33:23 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-09-14 15:59:09 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 09:24:44 -07:00
										 |  |  | function programResourceLoaderSpy(spy: SpyResourceLoader, results: {[key: string]: string}) { | 
					
						
							| 
									
										
										
										
											2016-10-11 15:44:48 -07:00
										 |  |  |   spy.spy('get').and.callFake((url: string): Promise<any> => { | 
					
						
							| 
									
										
										
										
											2016-11-12 14:08:58 +01:00
										 |  |  |     const result = results[url]; | 
					
						
							| 
									
										
										
										
											2016-06-24 08:46:43 -07:00
										 |  |  |     if (result) { | 
					
						
							|  |  |  |       return Promise.resolve(result); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       return Promise.reject(`Unknown mock url ${url}`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-08-17 16:37:31 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-11-10 14:07:30 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-11 13:49:03 +03:00
										 |  |  | class SomeComp {} |