| 
									
										
										
										
											2016-10-04 20:39:20 -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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 09:51:40 -07:00
										 |  |  | // Tun on full stack traces in errors to help debugging
 | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  | Error.stackTraceLimit = Infinity; | 
					
						
							| 
									
										
										
										
											2015-05-23 09:51:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-15 05:14:03 +00:00
										 |  |  | jasmine.DEFAULT_TIMEOUT_INTERVAL = 100; | 
					
						
							| 
									
										
										
										
											2014-10-06 17:35:00 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Cancel Karma's synchronous start,
 | 
					
						
							|  |  |  | // we will call `__karma__.start()` later, once all the specs are loaded.
 | 
					
						
							|  |  |  | __karma__.loaded = function() {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 15:05:56 -07:00
										 |  |  | System.config({ | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |   baseURL: '/base', | 
					
						
							| 
									
										
										
										
											2015-08-14 15:05:56 -07:00
										 |  |  |   defaultJSExtensions: true, | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |   map: { | 
					
						
							| 
									
										
										
										
											2015-08-14 15:05:56 -07:00
										 |  |  |     'benchpress/*': 'dist/js/dev/es5/benchpress/*.js', | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |     '@angular': 'dist/all/@angular', | 
					
						
							|  |  |  |     'rxjs': 'node_modules/rxjs', | 
					
						
							| 
									
										
										
										
											2017-08-08 02:17:40 -07:00
										 |  |  |     'domino': 'dist/all/@angular/empty.js', | 
					
						
							| 
									
										
										
										
											2017-03-15 13:40:24 -07:00
										 |  |  |     'url': 'dist/all/@angular/empty.js', | 
					
						
							|  |  |  |     'xhr2': 'dist/all/@angular/empty.js', | 
					
						
							| 
									
										
										
										
											2017-08-08 02:17:40 -07:00
										 |  |  |     '@angular/platform-server/src/domino_adapter': 'dist/all/empty.js', | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |     'angular2/*': 'dist/all/angular2/*.js', | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     'angular2/src/alt_router/router_testing_providers': | 
					
						
							|  |  |  |         'dist/all/angular2/src/alt_router/router_testing_providers.js' | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |   }, | 
					
						
							|  |  |  |   packages: { | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/core/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/core': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-02-28 17:49:37 -08:00
										 |  |  |     '@angular/animations/browser/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/animations/browser': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-02-22 15:14:49 -08:00
										 |  |  |     '@angular/animations/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/animations': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/compiler/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/compiler': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/common/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |     '@angular/common/http/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/common/http': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/common': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/forms': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |     // remove after all tests imports are fixed
 | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/facade': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/router/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/router': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/http/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/http': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-03-07 11:04:30 -08:00
										 |  |  |     '@angular/upgrade/static': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/upgrade': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-02-22 15:14:49 -08:00
										 |  |  |     '@angular/platform-browser/animations/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-browser/animations': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     '@angular/platform-browser/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-browser-dynamic/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-server/testing': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-server': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-webworker': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							|  |  |  |     '@angular/platform-webworker-dynamic': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2017-09-26 11:53:48 +03:00
										 |  |  |     '@angular/elements': {main: 'index.js', defaultExtension: 'js'}, | 
					
						
							| 
									
										
										
										
											2015-08-14 15:05:56 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2014-10-06 17:35:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 12:36:34 +03:00
										 |  |  | // Load browser-specific CustomElement polyfills, set up the test injector, import all the specs,
 | 
					
						
							|  |  |  | // execute their `main()` method and kick off Karma (Jasmine).
 | 
					
						
							|  |  |  | Promise | 
					
						
							|  |  |  |     .resolve() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Load browser-specific polyfills for custom elements.
 | 
					
						
							|  |  |  |     .then(function() { return loadCustomElementsPolyfills(); }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Load necessary testing packages.
 | 
					
						
							|  |  |  |     .then(function() { | 
					
						
							|  |  |  |       return Promise.all([ | 
					
						
							|  |  |  |         System.import('@angular/core/testing'), | 
					
						
							|  |  |  |         System.import('@angular/platform-browser-dynamic/testing'), | 
					
						
							|  |  |  |         System.import('@angular/platform-browser/animations') | 
					
						
							|  |  |  |       ]); | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-10-12 12:36:34 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Set up the test injector.
 | 
					
						
							|  |  |  |     .then(function(mods) { | 
					
						
							|  |  |  |       var coreTesting = mods[0]; | 
					
						
							|  |  |  |       var pbdTesting = mods[1]; | 
					
						
							|  |  |  |       var pbAnimations = mods[2]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       coreTesting.TestBed.initTestEnvironment( | 
					
						
							|  |  |  |           [pbdTesting.BrowserDynamicTestingModule, pbAnimations.NoopAnimationsModule], | 
					
						
							|  |  |  |           pbdTesting.platformBrowserDynamicTesting()); | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Import all the specs and execute their `main()` method.
 | 
					
						
							| 
									
										
										
										
											2016-10-04 20:39:20 -07:00
										 |  |  |     .then(function() { | 
					
						
							|  |  |  |       return Promise.all(Object | 
					
						
							|  |  |  |                              .keys(window.__karma__.files)  // All files served by Karma.
 | 
					
						
							|  |  |  |                              .filter(onlySpecFiles) | 
					
						
							|  |  |  |                              .map(window.file2moduleName)  // Normalize paths to module names.
 | 
					
						
							|  |  |  |                              .map(function(path) { | 
					
						
							|  |  |  |                                return System.import(path).then(function(module) { | 
					
						
							|  |  |  |                                  if (module.hasOwnProperty('main')) { | 
					
						
							|  |  |  |                                    module.main(); | 
					
						
							|  |  |  |                                  } else { | 
					
						
							|  |  |  |                                    throw new Error( | 
					
						
							|  |  |  |                                        'Module ' + path + ' does not implement main() method.'); | 
					
						
							|  |  |  |                                  } | 
					
						
							|  |  |  |                                }); | 
					
						
							|  |  |  |                              })); | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-10-12 12:36:34 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Kick off karma (Jasmine).
 | 
					
						
							| 
									
										
										
										
											2016-12-13 14:57:40 -08:00
										 |  |  |     .then(function() { __karma__.start(); }, function(error) { console.error(error); }); | 
					
						
							| 
									
										
										
										
											2014-10-06 17:35:00 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 12:36:34 +03:00
										 |  |  | function loadCustomElementsPolyfills() { | 
					
						
							|  |  |  |   var loadedPromise = Promise.resolve(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // The custom elements polyfill relies on `MutationObserver`.
 | 
					
						
							|  |  |  |   if (!window.MutationObserver) { | 
					
						
							|  |  |  |     loadedPromise = | 
					
						
							|  |  |  |         loadedPromise | 
					
						
							|  |  |  |             .then(function() { return System.import('node_modules/mutation-observer/index.js'); }) | 
					
						
							|  |  |  |             .then(function(MutationObserver) { window.MutationObserver = MutationObserver; }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // The custom elements polyfill relies on `Object.setPrototypeOf()`.
 | 
					
						
							|  |  |  |   if (!Object.setPrototypeOf) { | 
					
						
							|  |  |  |     var getDescriptor = function getDescriptor(obj, prop) { | 
					
						
							|  |  |  |       var descriptor; | 
					
						
							|  |  |  |       while (obj && !descriptor) { | 
					
						
							|  |  |  |         descriptor = Object.getOwnPropertyDescriptor(obj, prop); | 
					
						
							|  |  |  |         obj = Object.getPrototypeOf(obj); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return descriptor || {}; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     var setPrototypeOf = function setPrototypeOf(obj, proto) { | 
					
						
							|  |  |  |       for (var prop in proto) { | 
					
						
							|  |  |  |         if (!obj.hasOwnProperty(prop)) { | 
					
						
							|  |  |  |           Object.defineProperty(obj, prop, getDescriptor(proto, prop)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return obj; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 12:37:22 +03:00
										 |  |  |     Object.defineProperty(setPrototypeOf, '$$shimmed', {value: true}); | 
					
						
							| 
									
										
										
										
											2017-10-12 12:36:34 +03:00
										 |  |  |     Object.setPrototypeOf = setPrototypeOf; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // The custom elements polyfill will patch `(HTML)Element` properties, including `innerHTML`:
 | 
					
						
							|  |  |  |   // https://github.com/webcomponents/custom-elements/blob/32f043c3a5e5fc3e035342c0ef10c6786fa416d7/src/Patch/Element.js#L28-L78
 | 
					
						
							|  |  |  |   // The patched `innerHTML` setter will try to traverse the DOM (via `nextSibling`), which leads to
 | 
					
						
							|  |  |  |   // infinite loops when testing `HtmlSanitizer` with cloberred elements on browsers that do not
 | 
					
						
							|  |  |  |   // support the `<template>` element:
 | 
					
						
							|  |  |  |   // https://github.com/angular/angular/blob/213baa37b0b71e72d00ad7b606ebfc2ade06b934/packages/platform-browser/src/security/html_sanitizer.ts#L29-L38
 | 
					
						
							|  |  |  |   // To avoid that, we "unpatch" `(HTML)Element#innerHTML` and apply the patch only for the relevant
 | 
					
						
							|  |  |  |   // `@angular/elements` tests.
 | 
					
						
							|  |  |  |   var patchTarget; | 
					
						
							|  |  |  |   var originalDescriptor; | 
					
						
							|  |  |  |   if (!window.customElements) { | 
					
						
							|  |  |  |     var candidatePatchTarget = window.Element.prototype; | 
					
						
							|  |  |  |     var candidateOriginalDescriptor = | 
					
						
							|  |  |  |         Object.getOwnPropertyDescriptor(candidatePatchTarget, 'innerHTML'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!originalDescriptor) { | 
					
						
							|  |  |  |       candidatePatchTarget = window.HTMLElement.prototype; | 
					
						
							|  |  |  |       candidateOriginalDescriptor = | 
					
						
							|  |  |  |           Object.getOwnPropertyDescriptor(candidatePatchTarget, 'innerHTML'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (candidateOriginalDescriptor) { | 
					
						
							|  |  |  |       patchTarget = candidatePatchTarget; | 
					
						
							|  |  |  |       originalDescriptor = candidateOriginalDescriptor; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   var polyfillPath = !window.customElements ? | 
					
						
							|  |  |  |       // Load custom elements polyfill.
 | 
					
						
							|  |  |  |       'node_modules/@webcomponents/custom-elements/custom-elements.min.js' : | 
					
						
							|  |  |  |       // Allow ES5 functions as custom element constructors.
 | 
					
						
							|  |  |  |       'node_modules/@webcomponents/custom-elements/src/native-shim.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   loadedPromise = | 
					
						
							|  |  |  |       loadedPromise.then(function() { return System.import(polyfillPath); }).then(function() { | 
					
						
							|  |  |  |         // `packages/compiler/test/schema/schema_extractor.ts` relies on `HTMLElement.name`,
 | 
					
						
							|  |  |  |         // but custom element polyfills will replace `HTMLElement` with an anonymous function.
 | 
					
						
							|  |  |  |         Object.defineProperty(HTMLElement, 'name', {value: 'HTMLElement'}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Create helper functions on `window` for patching/restoring `(HTML)Element#innerHTML`.
 | 
					
						
							|  |  |  |         if (!patchTarget) { | 
					
						
							|  |  |  |           window.$$patchInnerHtmlProp = window.$$restoreInnerHtmlProp = function() {}; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |           var patchedDescriptor = Object.getOwnPropertyDescriptor(patchTarget, 'innerHTML'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           window.$$patchInnerHtmlProp = function() { | 
					
						
							|  |  |  |             Object.defineProperty(patchTarget, 'innerHTML', patchedDescriptor); | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |           window.$$restoreInnerHtmlProp = function() { | 
					
						
							|  |  |  |             Object.defineProperty(patchTarget, 'innerHTML', originalDescriptor); | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           // Restore `innerHTML`. The patch will be manually applied only during the
 | 
					
						
							|  |  |  |           // `@angular/elements` tests that need it.
 | 
					
						
							|  |  |  |           window.$$restoreInnerHtmlProp(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return loadedPromise; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-06 17:35:00 -07:00
										 |  |  | function onlySpecFiles(path) { | 
					
						
							|  |  |  |   return /_spec\.js$/.test(path); | 
					
						
							|  |  |  | } |