UNPKG

191 kBSource Map (JSON)View Raw
1{"version":3,"file":"testing.mjs","sources":["../../../../../../packages/core/testing/src/async.ts","../../../../../../packages/core/testing/src/component_fixture.ts","../../../../../../packages/core/testing/src/fake_async.ts","../../../../../../packages/core/src/metadata/resource_loading.ts","../../../../../../packages/core/testing/src/metadata_overrider.ts","../../../../../../packages/core/testing/src/resolvers.ts","../../../../../../packages/core/testing/src/r3_test_bed_compiler.ts","../../../../../../packages/core/testing/src/test_bed_common.ts","../../../../../../packages/core/testing/src/r3_test_bed.ts","../../../../../../packages/core/testing/src/test_compiler.ts","../../../../../../packages/core/testing/src/test_bed.ts","../../../../../../packages/core/testing/src/test_hooks.ts","../../../../../../packages/core/testing/src/metadata_override.ts","../../../../../../packages/core/testing/src/private_export_testing.ts","../../../../../../packages/core/testing/src/testing.ts","../../../../../../packages/core/testing/public_api.ts","../../../../../../packages/core/testing/index.ts","../../../../../../packages/core/testing/testing.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wraps a test function in an asynchronous test zone. The test will automatically\n * complete when all asynchronous calls within this zone are done. Can be used\n * to wrap an {@link inject} call.\n *\n * Example:\n *\n * ```\n * it('...', waitForAsync(inject([AClass], (object) => {\n * object.doSomething.then(() => {\n * expect(...);\n * })\n * });\n * ```\n *\n * @publicApi\n */\nexport function waitForAsync(fn: Function): (done: any) => any {\n const _Zone: any = typeof Zone !== 'undefined' ? Zone : null;\n if (!_Zone) {\n return function() {\n return Promise.reject(\n 'Zone is needed for the waitForAsync() test helper but could not be found. ' +\n 'Please make sure that your environment includes zone.js');\n };\n }\n const asyncTest = _Zone && _Zone[_Zone.__symbol__('asyncTest')];\n if (typeof asyncTest === 'function') {\n return asyncTest(fn);\n }\n return function() {\n return Promise.reject(\n 'zone-testing.js is needed for the async() test helper but could not be found. ' +\n 'Please make sure that your environment includes zone.js/testing');\n };\n}\n\n/**\n * @deprecated use `waitForAsync()`, (expected removal in v12)\n * @see {@link waitForAsync}\n * @publicApi\n * */\nexport function async(fn: Function): (done: any) => any {\n return waitForAsync(fn);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ChangeDetectorRef, ComponentRef, DebugElement, ElementRef, getDebugNode, NgZone, RendererFactory2} from '@angular/core';\n\n\n/**\n * Fixture for debugging and testing a component.\n *\n * @publicApi\n */\nexport class ComponentFixture<T> {\n /**\n * The DebugElement associated with the root element of this component.\n */\n debugElement: DebugElement;\n\n /**\n * The instance of the root component class.\n */\n componentInstance: T;\n\n /**\n * The native element at the root of the component.\n */\n nativeElement: any;\n\n /**\n * The ElementRef for the element at the root of the component.\n */\n elementRef: ElementRef;\n\n /**\n * The ChangeDetectorRef for the component\n */\n changeDetectorRef: ChangeDetectorRef;\n\n private _renderer: RendererFactory2|null|undefined;\n private _isStable: boolean = true;\n private _isDestroyed: boolean = false;\n private _resolve: ((result: any) => void)|null = null;\n private _promise: Promise<any>|null = null;\n private _onUnstableSubscription: any /** TODO #9100 */ = null;\n private _onStableSubscription: any /** TODO #9100 */ = null;\n private _onMicrotaskEmptySubscription: any /** TODO #9100 */ = null;\n private _onErrorSubscription: any /** TODO #9100 */ = null;\n\n constructor(\n public componentRef: ComponentRef<T>, public ngZone: NgZone|null,\n private _autoDetect: boolean) {\n this.changeDetectorRef = componentRef.changeDetectorRef;\n this.elementRef = componentRef.location;\n this.debugElement = <DebugElement>getDebugNode(this.elementRef.nativeElement);\n this.componentInstance = componentRef.instance;\n this.nativeElement = this.elementRef.nativeElement;\n this.componentRef = componentRef;\n this.ngZone = ngZone;\n\n if (ngZone) {\n // Create subscriptions outside the NgZone so that the callbacks run oustide\n // of NgZone.\n ngZone.runOutsideAngular(() => {\n this._onUnstableSubscription = ngZone.onUnstable.subscribe({\n next: () => {\n this._isStable = false;\n }\n });\n this._onMicrotaskEmptySubscription = ngZone.onMicrotaskEmpty.subscribe({\n next: () => {\n if (this._autoDetect) {\n // Do a change detection run with checkNoChanges set to true to check\n // there are no changes on the second run.\n this.detectChanges(true);\n }\n }\n });\n this._onStableSubscription = ngZone.onStable.subscribe({\n next: () => {\n this._isStable = true;\n // Check whether there is a pending whenStable() completer to resolve.\n if (this._promise !== null) {\n // If so check whether there are no pending macrotasks before resolving.\n // Do this check in the next tick so that ngZone gets a chance to update the state of\n // pending macrotasks.\n scheduleMicroTask(() => {\n if (!ngZone.hasPendingMacrotasks) {\n if (this._promise !== null) {\n this._resolve!(true);\n this._resolve = null;\n this._promise = null;\n }\n }\n });\n }\n }\n });\n\n this._onErrorSubscription = ngZone.onError.subscribe({\n next: (error: any) => {\n throw error;\n }\n });\n });\n }\n }\n\n private _tick(checkNoChanges: boolean) {\n this.changeDetectorRef.detectChanges();\n if (checkNoChanges) {\n this.checkNoChanges();\n }\n }\n\n /**\n * Trigger a change detection cycle for the component.\n */\n detectChanges(checkNoChanges: boolean = true): void {\n if (this.ngZone != null) {\n // Run the change detection inside the NgZone so that any async tasks as part of the change\n // detection are captured by the zone and can be waited for in isStable.\n this.ngZone.run(() => {\n this._tick(checkNoChanges);\n });\n } else {\n // Running without zone. Just do the change detection.\n this._tick(checkNoChanges);\n }\n }\n\n /**\n * Do a change detection run to make sure there were no changes.\n */\n checkNoChanges(): void {\n this.changeDetectorRef.checkNoChanges();\n }\n\n /**\n * Set whether the fixture should autodetect changes.\n *\n * Also runs detectChanges once so that any existing change is detected.\n */\n autoDetectChanges(autoDetect: boolean = true) {\n if (this.ngZone == null) {\n throw new Error('Cannot call autoDetectChanges when ComponentFixtureNoNgZone is set');\n }\n this._autoDetect = autoDetect;\n this.detectChanges();\n }\n\n /**\n * Return whether the fixture is currently stable or has async tasks that have not been completed\n * yet.\n */\n isStable(): boolean {\n return this._isStable && !this.ngZone!.hasPendingMacrotasks;\n }\n\n /**\n * Get a promise that resolves when the fixture is stable.\n *\n * This can be used to resume testing after events have triggered asynchronous activity or\n * asynchronous change detection.\n */\n whenStable(): Promise<any> {\n if (this.isStable()) {\n return Promise.resolve(false);\n } else if (this._promise !== null) {\n return this._promise;\n } else {\n this._promise = new Promise(res => {\n this._resolve = res;\n });\n return this._promise;\n }\n }\n\n\n private _getRenderer() {\n if (this._renderer === undefined) {\n this._renderer = this.componentRef.injector.get(RendererFactory2, null);\n }\n return this._renderer as RendererFactory2 | null;\n }\n\n /**\n * Get a promise that resolves when the ui state is stable following animations.\n */\n whenRenderingDone(): Promise<any> {\n const renderer = this._getRenderer();\n if (renderer && renderer.whenRenderingDone) {\n return renderer.whenRenderingDone();\n }\n return this.whenStable();\n }\n\n /**\n * Trigger component destruction.\n */\n destroy(): void {\n if (!this._isDestroyed) {\n this.componentRef.destroy();\n if (this._onUnstableSubscription != null) {\n this._onUnstableSubscription.unsubscribe();\n this._onUnstableSubscription = null;\n }\n if (this._onStableSubscription != null) {\n this._onStableSubscription.unsubscribe();\n this._onStableSubscription = null;\n }\n if (this._onMicrotaskEmptySubscription != null) {\n this._onMicrotaskEmptySubscription.unsubscribe();\n this._onMicrotaskEmptySubscription = null;\n }\n if (this._onErrorSubscription != null) {\n this._onErrorSubscription.unsubscribe();\n this._onErrorSubscription = null;\n }\n this._isDestroyed = true;\n }\n }\n}\n\nfunction scheduleMicroTask(fn: Function) {\n Zone.current.scheduleMicroTask('scheduleMicrotask', fn);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst _Zone: any = typeof Zone !== 'undefined' ? Zone : null;\nconst fakeAsyncTestModule = _Zone && _Zone[_Zone.__symbol__('fakeAsyncTest')];\n\nconst fakeAsyncTestModuleNotLoadedErrorMessage =\n `zone-testing.js is needed for the fakeAsync() test helper but could not be found.\n Please make sure that your environment includes zone.js/testing`;\n\n/**\n * Clears out the shared fake async zone for a test.\n * To be called in a global `beforeEach`.\n *\n * @publicApi\n */\nexport function resetFakeAsyncZone(): void {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.resetFakeAsyncZone();\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n\n/**\n * Wraps a function to be executed in the `fakeAsync` zone:\n * - Microtasks are manually executed by calling `flushMicrotasks()`.\n * - Timers are synchronous; `tick()` simulates the asynchronous passage of time.\n *\n * If there are any pending timers at the end of the function, an exception is thrown.\n *\n * Can be used to wrap `inject()` calls.\n *\n * @param fn The function that you want to wrap in the `fakeAysnc` zone.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/testing/ts/fake_async.ts region='basic'}\n *\n *\n * @returns The function wrapped to be executed in the `fakeAsync` zone.\n * Any arguments passed when calling this returned function will be passed through to the `fn`\n * function in the parameters when it is called.\n *\n * @publicApi\n */\nexport function fakeAsync(fn: Function): (...args: any[]) => any {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.fakeAsync(fn);\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n\n/**\n * Simulates the asynchronous passage of time for the timers in the `fakeAsync` zone.\n *\n * The microtasks queue is drained at the very start of this function and after any timer callback\n * has been executed.\n *\n * @param millis The number of milliseconds to advance the virtual timer.\n * @param tickOptions The options to pass to the `tick()` function.\n *\n * @usageNotes\n *\n * The `tick()` option is a flag called `processNewMacroTasksSynchronously`,\n * which determines whether or not to invoke new macroTasks.\n *\n * If you provide a `tickOptions` object, but do not specify a\n * `processNewMacroTasksSynchronously` property (`tick(100, {})`),\n * then `processNewMacroTasksSynchronously` defaults to true.\n *\n * If you omit the `tickOptions` parameter (`tick(100))`), then\n * `tickOptions` defaults to `{processNewMacroTasksSynchronously: true}`.\n *\n * ### Example\n *\n * {@example core/testing/ts/fake_async.ts region='basic'}\n *\n * The following example includes a nested timeout (new macroTask), and\n * the `tickOptions` parameter is allowed to default. In this case,\n * `processNewMacroTasksSynchronously` defaults to true, and the nested\n * function is executed on each tick.\n *\n * ```\n * it ('test with nested setTimeout', fakeAsync(() => {\n * let nestedTimeoutInvoked = false;\n * function funcWithNestedTimeout() {\n * setTimeout(() => {\n * nestedTimeoutInvoked = true;\n * });\n * };\n * setTimeout(funcWithNestedTimeout);\n * tick();\n * expect(nestedTimeoutInvoked).toBe(true);\n * }));\n * ```\n *\n * In the following case, `processNewMacroTasksSynchronously` is explicitly\n * set to false, so the nested timeout function is not invoked.\n *\n * ```\n * it ('test with nested setTimeout', fakeAsync(() => {\n * let nestedTimeoutInvoked = false;\n * function funcWithNestedTimeout() {\n * setTimeout(() => {\n * nestedTimeoutInvoked = true;\n * });\n * };\n * setTimeout(funcWithNestedTimeout);\n * tick(0, {processNewMacroTasksSynchronously: false});\n * expect(nestedTimeoutInvoked).toBe(false);\n * }));\n * ```\n *\n *\n * @publicApi\n */\nexport function tick(\n millis: number = 0, tickOptions: {processNewMacroTasksSynchronously: boolean} = {\n processNewMacroTasksSynchronously: true\n }): void {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.tick(millis, tickOptions);\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n\n/**\n * Simulates the asynchronous passage of time for the timers in the `fakeAsync` zone by\n * draining the macrotask queue until it is empty.\n *\n * @param maxTurns The maximum number of times the scheduler attempts to clear its queue before\n * throwing an error.\n * @returns The simulated time elapsed, in milliseconds.\n *\n * @publicApi\n */\nexport function flush(maxTurns?: number): number {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.flush(maxTurns);\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n\n/**\n * Discard all remaining periodic tasks.\n *\n * @publicApi\n */\nexport function discardPeriodicTasks(): void {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.discardPeriodicTasks();\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n\n/**\n * Flush any pending microtasks.\n *\n * @publicApi\n */\nexport function flushMicrotasks(): void {\n if (fakeAsyncTestModule) {\n return fakeAsyncTestModule.flushMicrotasks();\n }\n throw new Error(fakeAsyncTestModuleNotLoadedErrorMessage);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Type} from '../interface/type';\nimport {Component} from './directives';\n\n\n/**\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\n *\n * Example:\n * ```\n * @Component({\n * selector: 'my-comp',\n * templateUrl: 'my-comp.html', // This requires asynchronous resolution\n * })\n * class MyComponent{\n * }\n *\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\n *\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\n *\n * // Use browser's `fetch()` function as the default resource resolution strategy.\n * resolveComponentResources(fetch).then(() => {\n * // After resolution all URLs have been converted into `template` strings.\n * renderComponent(MyComponent);\n * });\n *\n * ```\n *\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\n * to call this method outside JIT mode.\n *\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\n */\nexport function resolveComponentResources(\n resourceResolver: (url: string) => (Promise<string|{text(): Promise<string>}>)): Promise<void> {\n // Store all promises which are fetching the resources.\n const componentResolved: Promise<void>[] = [];\n\n // Cache so that we don't fetch the same resource more than once.\n const urlMap = new Map<string, Promise<string>>();\n function cachedResourceResolve(url: string): Promise<string> {\n let promise = urlMap.get(url);\n if (!promise) {\n const resp = resourceResolver(url);\n urlMap.set(url, promise = resp.then(unwrapResponse));\n }\n return promise;\n }\n\n componentResourceResolutionQueue.forEach((component: Component, type: Type<any>) => {\n const promises: Promise<void>[] = [];\n if (component.templateUrl) {\n promises.push(cachedResourceResolve(component.templateUrl).then((template) => {\n component.template = template;\n }));\n }\n const styleUrls = component.styleUrls;\n const styles = component.styles || (component.styles = []);\n const styleOffset = component.styles.length;\n styleUrls && styleUrls.forEach((styleUrl, index) => {\n styles.push(''); // pre-allocate array.\n promises.push(cachedResourceResolve(styleUrl).then((style) => {\n styles[styleOffset + index] = style;\n styleUrls.splice(styleUrls.indexOf(styleUrl), 1);\n if (styleUrls.length == 0) {\n component.styleUrls = undefined;\n }\n }));\n });\n const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));\n componentResolved.push(fullyResolved);\n });\n clearResolutionOfComponentResourcesQueue();\n return Promise.all(componentResolved).then(() => undefined);\n}\n\nlet componentResourceResolutionQueue = new Map<Type<any>, Component>();\n\n// Track when existing ɵcmp for a Type is waiting on resources.\nconst componentDefPendingResolution = new Set<Type<any>>();\n\nexport function maybeQueueResolutionOfComponentResources(type: Type<any>, metadata: Component) {\n if (componentNeedsResolution(metadata)) {\n componentResourceResolutionQueue.set(type, metadata);\n componentDefPendingResolution.add(type);\n }\n}\n\nexport function isComponentDefPendingResolution(type: Type<any>): boolean {\n return componentDefPendingResolution.has(type);\n}\n\nexport function componentNeedsResolution(component: Component): boolean {\n return !!(\n (component.templateUrl && !component.hasOwnProperty('template')) ||\n component.styleUrls && component.styleUrls.length);\n}\nexport function clearResolutionOfComponentResourcesQueue(): Map<Type<any>, Component> {\n const old = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n return old;\n}\n\nexport function restoreComponentResolutionQueue(queue: Map<Type<any>, Component>): void {\n componentDefPendingResolution.clear();\n queue.forEach((_, type) => componentDefPendingResolution.add(type));\n componentResourceResolutionQueue = queue;\n}\n\nexport function isComponentResourceResolutionQueueEmpty() {\n return componentResourceResolutionQueue.size === 0;\n}\n\nfunction unwrapResponse(response: string|{text(): Promise<string>}): string|Promise<string> {\n return typeof response == 'string' ? response : response.text();\n}\n\nfunction componentDefResolved(type: Type<any>): void {\n componentDefPendingResolution.delete(type);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ɵstringify as stringify} from '@angular/core';\nimport {MetadataOverride} from './metadata_override';\n\ntype StringMap = {\n [key: string]: any\n};\n\nlet _nextReferenceId = 0;\n\nexport class MetadataOverrider {\n private _references = new Map<any, string>();\n /**\n * Creates a new instance for the given metadata class\n * based on an old instance and overrides.\n */\n overrideMetadata<C extends T, T>(\n metadataClass: {new(options: T): C;}, oldMetadata: C, override: MetadataOverride<T>): C {\n const props: StringMap = {};\n if (oldMetadata) {\n _valueProps(oldMetadata).forEach((prop) => props[prop] = (<any>oldMetadata)[prop]);\n }\n\n if (override.set) {\n if (override.remove || override.add) {\n throw new Error(`Cannot set and add/remove ${stringify(metadataClass)} at the same time!`);\n }\n setMetadata(props, override.set);\n }\n if (override.remove) {\n removeMetadata(props, override.remove, this._references);\n }\n if (override.add) {\n addMetadata(props, override.add);\n }\n return new metadataClass(<any>props);\n }\n}\n\nfunction removeMetadata(metadata: StringMap, remove: any, references: Map<any, string>) {\n const removeObjects = new Set<string>();\n for (const prop in remove) {\n const removeValue = remove[prop];\n if (Array.isArray(removeValue)) {\n removeValue.forEach((value: any) => {\n removeObjects.add(_propHashKey(prop, value, references));\n });\n } else {\n removeObjects.add(_propHashKey(prop, removeValue, references));\n }\n }\n\n for (const prop in metadata) {\n const propValue = metadata[prop];\n if (Array.isArray(propValue)) {\n metadata[prop] = propValue.filter(\n (value: any) => !removeObjects.has(_propHashKey(prop, value, references)));\n } else {\n if (removeObjects.has(_propHashKey(prop, propValue, references))) {\n metadata[prop] = undefined;\n }\n }\n }\n}\n\nfunction addMetadata(metadata: StringMap, add: any) {\n for (const prop in add) {\n const addValue = add[prop];\n const propValue = metadata[prop];\n if (propValue != null && Array.isArray(propValue)) {\n metadata[prop] = propValue.concat(addValue);\n } else {\n metadata[prop] = addValue;\n }\n }\n}\n\nfunction setMetadata(metadata: StringMap, set: any) {\n for (const prop in set) {\n metadata[prop] = set[prop];\n }\n}\n\nfunction _propHashKey(propName: any, propValue: any, references: Map<any, string>): string {\n const replacer = (key: any, value: any) => {\n if (typeof value === 'function') {\n value = _serializeReference(value, references);\n }\n return value;\n };\n\n return `${propName}:${JSON.stringify(propValue, replacer)}`;\n}\n\nfunction _serializeReference(ref: any, references: Map<any, string>): string {\n let id = references.get(ref);\n if (!id) {\n id = `${stringify(ref)}${_nextReferenceId++}`;\n references.set(ref, id);\n }\n return id;\n}\n\n\nfunction _valueProps(obj: any): string[] {\n const props: string[] = [];\n // regular public props\n Object.keys(obj).forEach((prop) => {\n if (!prop.startsWith('_')) {\n props.push(prop);\n }\n });\n\n // getters\n let proto = obj;\n while (proto = Object.getPrototypeOf(proto)) {\n Object.keys(proto).forEach((protoProp) => {\n const desc = Object.getOwnPropertyDescriptor(proto, protoProp);\n if (!protoProp.startsWith('_') && desc && 'get' in desc) {\n props.push(protoProp);\n }\n });\n }\n return props;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Component, Directive, NgModule, Pipe, Type, ɵReflectionCapabilities as ReflectionCapabilities} from '@angular/core';\n\nimport {MetadataOverride} from './metadata_override';\nimport {MetadataOverrider} from './metadata_overrider';\n\nconst reflection = new ReflectionCapabilities();\n\n/**\n * Base interface to resolve `@Component`, `@Directive`, `@Pipe` and `@NgModule`.\n */\nexport interface Resolver<T> {\n addOverride(type: Type<any>, override: MetadataOverride<T>): void;\n setOverrides(overrides: Array<[Type<any>, MetadataOverride<T>]>): void;\n resolve(type: Type<any>): T|null;\n}\n\n/**\n * Allows to override ivy metadata for tests (via the `TestBed`).\n */\nabstract class OverrideResolver<T> implements Resolver<T> {\n private overrides = new Map<Type<any>, MetadataOverride<T>[]>();\n private resolved = new Map<Type<any>, T|null>();\n\n abstract get type(): any;\n\n addOverride(type: Type<any>, override: MetadataOverride<T>) {\n const overrides = this.overrides.get(type) || [];\n overrides.push(override);\n this.overrides.set(type, overrides);\n this.resolved.delete(type);\n }\n\n setOverrides(overrides: Array<[Type<any>, MetadataOverride<T>]>) {\n this.overrides.clear();\n overrides.forEach(([type, override]) => {\n this.addOverride(type, override);\n });\n }\n\n getAnnotation(type: Type<any>): T|null {\n const annotations = reflection.annotations(type);\n // Try to find the nearest known Type annotation and make sure that this annotation is an\n // instance of the type we are looking for, so we can use it for resolution. Note: there might\n // be multiple known annotations found due to the fact that Components can extend Directives (so\n // both Directive and Component annotations would be present), so we always check if the known\n // annotation has the right type.\n for (let i = annotations.length - 1; i >= 0; i--) {\n const annotation = annotations[i];\n const isKnownType = annotation instanceof Directive || annotation instanceof Component ||\n annotation instanceof Pipe || annotation instanceof NgModule;\n if (isKnownType) {\n return annotation instanceof this.type ? annotation as T : null;\n }\n }\n return null;\n }\n\n resolve(type: Type<any>): T|null {\n let resolved = this.resolved.get(type) || null;\n\n if (!resolved) {\n resolved = this.getAnnotation(type);\n if (resolved) {\n const overrides = this.overrides.get(type);\n if (overrides) {\n const overrider = new MetadataOverrider();\n overrides.forEach(override => {\n resolved = overrider.overrideMetadata(this.type, resolved!, override);\n });\n }\n }\n this.resolved.set(type, resolved);\n }\n\n return resolved;\n }\n}\n\n\nexport class DirectiveResolver extends OverrideResolver<Directive> {\n override get type() {\n return Directive;\n }\n}\n\nexport class ComponentResolver extends OverrideResolver<Component> {\n override get type() {\n return Component;\n }\n}\n\nexport class PipeResolver extends OverrideResolver<Pipe> {\n override get type() {\n return Pipe;\n }\n}\n\nexport class NgModuleResolver extends OverrideResolver<NgModule> {\n override get type() {\n return NgModule;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ResourceLoader} from '@angular/compiler';\nimport {ApplicationInitStatus, Compiler, COMPILER_OPTIONS, Component, Directive, Injector, InjectorType, LOCALE_ID, ModuleWithComponentFactories, ModuleWithProviders, NgModule, NgModuleFactory, NgZone, Pipe, PlatformRef, Provider, resolveForwardRef, Type, ɵcompileComponent as compileComponent, ɵcompileDirective as compileDirective, ɵcompileNgModuleDefs as compileNgModuleDefs, ɵcompilePipe as compilePipe, ɵDEFAULT_LOCALE_ID as DEFAULT_LOCALE_ID, ɵDirectiveDef as DirectiveDef, ɵgetInjectableDef as getInjectableDef, ɵNG_COMP_DEF as NG_COMP_DEF, ɵNG_DIR_DEF as NG_DIR_DEF, ɵNG_INJ_DEF as NG_INJ_DEF, ɵNG_MOD_DEF as NG_MOD_DEF, ɵNG_PIPE_DEF as NG_PIPE_DEF, ɵNgModuleFactory as R3NgModuleFactory, ɵNgModuleTransitiveScopes as NgModuleTransitiveScopes, ɵNgModuleType as NgModuleType, ɵpatchComponentDefWithScope as patchComponentDefWithScope, ɵRender3ComponentFactory as ComponentFactory, ɵRender3NgModuleRef as NgModuleRef, ɵsetLocaleId as setLocaleId, ɵtransitiveScopesFor as transitiveScopesFor, ɵɵInjectableDeclaration as InjectableDeclaration} from '@angular/core';\n\nimport {clearResolutionOfComponentResourcesQueue, isComponentDefPendingResolution, resolveComponentResources, restoreComponentResolutionQueue} from '../../src/metadata/resource_loading';\n\nimport {MetadataOverride} from './metadata_override';\nimport {ComponentResolver, DirectiveResolver, NgModuleResolver, PipeResolver, Resolver} from './resolvers';\nimport {TestModuleMetadata} from './test_bed_common';\n\nenum TestingModuleOverride {\n DECLARATION,\n OVERRIDE_TEMPLATE,\n}\n\nfunction isTestingModuleOverride(value: unknown): value is TestingModuleOverride {\n return value === TestingModuleOverride.DECLARATION ||\n value === TestingModuleOverride.OVERRIDE_TEMPLATE;\n}\n\n// Resolvers for Angular decorators\ntype Resolvers = {\n module: Resolver<NgModule>,\n component: Resolver<Directive>,\n directive: Resolver<Component>,\n pipe: Resolver<Pipe>,\n};\n\ninterface CleanupOperation {\n fieldName: string;\n object: any;\n originalValue: unknown;\n}\n\nexport class R3TestBedCompiler {\n private originalComponentResolutionQueue: Map<Type<any>, Component>|null = null;\n\n // Testing module configuration\n private declarations: Type<any>[] = [];\n private imports: Type<any>[] = [];\n private providers: Provider[] = [];\n private schemas: any[] = [];\n\n // Queues of components/directives/pipes that should be recompiled.\n private pendingComponents = new Set<Type<any>>();\n private pendingDirectives = new Set<Type<any>>();\n private pendingPipes = new Set<Type<any>>();\n\n // Keep track of all components and directives, so we can patch Providers onto defs later.\n private seenComponents = new Set<Type<any>>();\n private seenDirectives = new Set<Type<any>>();\n\n // Keep track of overridden modules, so that we can collect all affected ones in the module tree.\n private overriddenModules = new Set<NgModuleType<any>>();\n\n // Store resolved styles for Components that have template overrides present and `styleUrls`\n // defined at the same time.\n private existingComponentStyles = new Map<Type<any>, string[]>();\n\n private resolvers: Resolvers = initResolvers();\n\n private componentToModuleScope = new Map<Type<any>, Type<any>|TestingModuleOverride>();\n\n // Map that keeps initial version of component/directive/pipe defs in case\n // we compile a Type again, thus overriding respective static fields. This is\n // required to make sure we restore defs to their initial states between test runs\n // TODO: we should support the case with multiple defs on a type\n private initialNgDefs = new Map<Type<any>, [string, PropertyDescriptor|undefined]>();\n\n // Array that keeps cleanup operations for initial versions of component/directive/pipe/module\n // defs in case TestBed makes changes to the originals.\n private defCleanupOps: CleanupOperation[] = [];\n\n private _injector: Injector|null = null;\n private compilerProviders: Provider[]|null = null;\n\n private providerOverrides: Provider[] = [];\n private rootProviderOverrides: Provider[] = [];\n // Overrides for injectables with `{providedIn: SomeModule}` need to be tracked and added to that\n // module's provider list.\n private providerOverridesByModule = new Map<InjectorType<any>, Provider[]>();\n private providerOverridesByToken = new Map<any, Provider>();\n private moduleProvidersOverridden = new Set<Type<any>>();\n\n private testModuleType: NgModuleType<any>;\n private testModuleRef: NgModuleRef<any>|null = null;\n\n constructor(private platform: PlatformRef, private additionalModuleTypes: Type<any>|Type<any>[]) {\n class DynamicTestModule {}\n this.testModuleType = DynamicTestModule as any;\n }\n\n setCompilerProviders(providers: Provider[]|null): void {\n this.compilerProviders = providers;\n this._injector = null;\n }\n\n configureTestingModule(moduleDef: TestModuleMetadata): void {\n // Enqueue any compilation tasks for the directly declared component.\n if (moduleDef.declarations !== undefined) {\n this.queueTypeArray(moduleDef.declarations, TestingModuleOverride.DECLARATION);\n this.declarations.push(...moduleDef.declarations);\n }\n\n // Enqueue any compilation tasks for imported modules.\n if (moduleDef.imports !== undefined) {\n this.queueTypesFromModulesArray(moduleDef.imports);\n this.imports.push(...moduleDef.imports);\n }\n\n if (moduleDef.providers !== undefined) {\n this.providers.push(...moduleDef.providers);\n }\n\n if (moduleDef.schemas !== undefined) {\n this.schemas.push(...moduleDef.schemas);\n }\n }\n\n overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void {\n this.overriddenModules.add(ngModule as NgModuleType<any>);\n\n // Compile the module right away.\n this.resolvers.module.addOverride(ngModule, override);\n const metadata = this.resolvers.module.resolve(ngModule);\n if (metadata === null) {\n throw invalidTypeError(ngModule.name, 'NgModule');\n }\n\n this.recompileNgModule(ngModule, metadata);\n\n // At this point, the module has a valid module def (ɵmod), but the override may have introduced\n // new declarations or imported modules. Ingest any possible new types and add them to the\n // current queue.\n this.queueTypesFromModulesArray([ngModule]);\n }\n\n overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void {\n this.resolvers.component.addOverride(component, override);\n this.pendingComponents.add(component);\n }\n\n overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void {\n this.resolvers.directive.addOverride(directive, override);\n this.pendingDirectives.add(directive);\n }\n\n overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void {\n this.resolvers.pipe.addOverride(pipe, override);\n this.pendingPipes.add(pipe);\n }\n\n overrideProvider(\n token: any,\n provider: {useFactory?: Function, useValue?: any, deps?: any[], multi?: boolean}): void {\n let providerDef: Provider;\n if (provider.useFactory !== undefined) {\n providerDef = {\n provide: token,\n useFactory: provider.useFactory,\n deps: provider.deps || [],\n multi: provider.multi\n };\n } else if (provider.useValue !== undefined) {\n providerDef = {provide: token, useValue: provider.useValue, multi: provider.multi};\n } else {\n providerDef = {provide: token};\n }\n\n const injectableDef: InjectableDeclaration<any>|null =\n typeof token !== 'string' ? getInjectableDef(token) : null;\n const providedIn = injectableDef === null ? null : resolveForwardRef(injectableDef.providedIn);\n const overridesBucket =\n providedIn === 'root' ? this.rootProviderOverrides : this.providerOverrides;\n overridesBucket.push(providerDef);\n\n // Keep overrides grouped by token as well for fast lookups using token\n this.providerOverridesByToken.set(token, providerDef);\n if (injectableDef !== null && providedIn !== null && typeof providedIn !== 'string') {\n const existingOverrides = this.providerOverridesByModule.get(providedIn);\n if (existingOverrides !== undefined) {\n existingOverrides.push(providerDef);\n } else {\n this.providerOverridesByModule.set(providedIn, [providerDef]);\n }\n }\n }\n\n overrideTemplateUsingTestingModule(type: Type<any>, template: string): void {\n const def = (type as any)[NG_COMP_DEF];\n const hasStyleUrls = (): boolean => {\n const metadata = this.resolvers.component.resolve(type)! as Component;\n return !!metadata.styleUrls && metadata.styleUrls.length > 0;\n };\n const overrideStyleUrls = !!def && !isComponentDefPendingResolution(type) && hasStyleUrls();\n\n // In Ivy, compiling a component does not require knowing the module providing the\n // component's scope, so overrideTemplateUsingTestingModule can be implemented purely via\n // overrideComponent. Important: overriding template requires full Component re-compilation,\n // which may fail in case styleUrls are also present (thus Component is considered as required\n // resolution). In order to avoid this, we preemptively set styleUrls to an empty array,\n // preserve current styles available on Component def and restore styles back once compilation\n // is complete.\n const override = overrideStyleUrls ? {template, styles: [], styleUrls: []} : {template};\n this.overrideComponent(type, {set: override});\n\n if (overrideStyleUrls && def.styles && def.styles.length > 0) {\n this.existingComponentStyles.set(type, def.styles);\n }\n\n // Set the component's scope to be the testing module.\n this.componentToModuleScope.set(type, TestingModuleOverride.OVERRIDE_TEMPLATE);\n }\n\n async compileComponents(): Promise<void> {\n this.clearComponentResolutionQueue();\n // Run compilers for all queued types.\n let needsAsyncResources = this.compileTypesSync();\n\n // compileComponents() should not be async unless it needs to be.\n if (needsAsyncResources) {\n let resourceLoader: ResourceLoader;\n let resolver = (url: string): Promise<string> => {\n if (!resourceLoader) {\n resourceLoader = this.injector.get(ResourceLoader);\n }\n return Promise.resolve(resourceLoader.get(url));\n };\n await resolveComponentResources(resolver);\n }\n }\n\n finalize(): NgModuleRef<any> {\n // One last compile\n this.compileTypesSync();\n\n // Create the testing module itself.\n this.compileTestModule();\n\n this.applyTransitiveScopes();\n\n this.applyProviderOverrides();\n\n // Patch previously stored `styles` Component values (taken from ɵcmp), in case these\n // Components have `styleUrls` fields defined and template override was requested.\n this.patchComponentsWithExistingStyles();\n\n // Clear the componentToModuleScope map, so that future compilations don't reset the scope of\n // every component.\n this.componentToModuleScope.clear();\n\n const parentInjector = this.platform.injector;\n this.testModuleRef = new NgModuleRef(this.testModuleType, parentInjector);\n\n // ApplicationInitStatus.runInitializers() is marked @internal to core.\n // Cast it to any before accessing it.\n (this.testModuleRef.injector.get(ApplicationInitStatus) as any).runInitializers();\n\n // Set locale ID after running app initializers, since locale information might be updated while\n // running initializers. This is also consistent with the execution order while bootstrapping an\n // app (see `packages/core/src/application_ref.ts` file).\n const localeId = this.testModuleRef.injector.get(LOCALE_ID, DEFAULT_LOCALE_ID);\n setLocaleId(localeId);\n\n return this.testModuleRef;\n }\n\n /**\n * @internal\n */\n _compileNgModuleSync(moduleType: Type<any>): void {\n this.queueTypesFromModulesArray([moduleType]);\n this.compileTypesSync();\n this.applyProviderOverrides();\n this.applyProviderOverridesToModule(moduleType);\n this.applyTransitiveScopes();\n }\n\n /**\n * @internal\n */\n async _compileNgModuleAsync(moduleType: Type<any>): Promise<void> {\n this.queueTypesFromModulesArray([moduleType]);\n await this.compileComponents();\n this.applyProviderOverrides();\n this.applyProviderOverridesToModule(moduleType);\n this.applyTransitiveScopes();\n }\n\n /**\n * @internal\n */\n _getModuleResolver(): Resolver<NgModule> {\n return this.resolvers.module;\n }\n\n /**\n * @internal\n */\n _getComponentFactories(moduleType: NgModuleType): ComponentFactory<any>[] {\n return maybeUnwrapFn(moduleType.ɵmod.declarations).reduce((factories, declaration) => {\n const componentDef = (declaration as any).ɵcmp;\n componentDef && factories.push(new ComponentFactory(componentDef, this.testModuleRef!));\n return factories;\n }, [] as ComponentFactory<any>[]);\n }\n\n private compileTypesSync(): boolean {\n // Compile all queued components, directives, pipes.\n let needsAsyncResources = false;\n this.pendingComponents.forEach(declaration => {\n needsAsyncResources = needsAsyncResources || isComponentDefPendingResolution(declaration);\n const metadata = this.resolvers.component.resolve(declaration);\n if (metadata === null) {\n throw invalidTypeError(declaration.name, 'Component');\n }\n this.maybeStoreNgDef(NG_COMP_DEF, declaration);\n compileComponent(declaration, metadata);\n });\n this.pendingComponents.clear();\n\n this.pendingDirectives.forEach(declaration => {\n const metadata = this.resolvers.directive.resolve(declaration);\n if (metadata === null) {\n throw invalidTypeError(declaration.name, 'Directive');\n }\n this.maybeStoreNgDef(NG_DIR_DEF, declaration);\n compileDirective(declaration, metadata);\n });\n this.pendingDirectives.clear();\n\n this.pendingPipes.forEach(declaration => {\n const metadata = this.resolvers.pipe.resolve(declaration);\n if (metadata === null) {\n throw invalidTypeError(declaration.name, 'Pipe');\n }\n this.maybeStoreNgDef(NG_PIPE_DEF, declaration);\n compilePipe(declaration, metadata);\n });\n this.pendingPipes.clear();\n\n return needsAsyncResources;\n }\n\n private applyTransitiveScopes(): void {\n if (this.overriddenModules.size > 0) {\n // Module overrides (via `TestBed.overrideModule`) might affect scopes that were previously\n // calculated and stored in `transitiveCompileScopes`. If module overrides are present,\n // collect all affected modules and reset scopes to force their re-calculation.\n const testingModuleDef = (this.testModuleType as any)[NG_MOD_DEF];\n const affectedModules = this.collectModulesAffectedByOverrides(testingModuleDef.imports);\n if (affectedModules.size > 0) {\n affectedModules.forEach(moduleType => {\n this.storeFieldOfDefOnType(moduleType as any, NG_MOD_DEF, 'transitiveCompileScopes');\n (moduleType as any)[NG_MOD_DEF].transitiveCompileScopes = null;\n });\n }\n }\n\n const moduleToScope = new Map<Type<any>|TestingModuleOverride, NgModuleTransitiveScopes>();\n const getScopeOfModule =\n (moduleType: Type<any>|TestingModuleOverride): NgModuleTransitiveScopes => {\n if (!moduleToScope.has(moduleType)) {\n const isTestingModule = isTestingModuleOverride(moduleType);\n const realType = isTestingModule ? this.testModuleType : moduleType as Type<any>;\n moduleToScope.set(moduleType, transitiveScopesFor(realType));\n }\n return moduleToScope.get(moduleType)!;\n };\n\n this.componentToModuleScope.forEach((moduleType, componentType) => {\n const moduleScope = getScopeOfModule(moduleType);\n this.storeFieldOfDefOnType(componentType, NG_COMP_DEF, 'directiveDefs');\n this.storeFieldOfDefOnType(componentType, NG_COMP_DEF, 'pipeDefs');\n // `tView` that is stored on component def contains information about directives and pipes\n // that are in the scope of this component. Patching component scope will cause `tView` to be\n // changed. Store original `tView` before patching scope, so the `tView` (including scope\n // information) is restored back to its previous/original state before running next test.\n this.storeFieldOfDefOnType(componentType, NG_COMP_DEF, 'tView');\n patchComponentDefWithScope((componentType as any).ɵcmp, moduleScope);\n });\n\n this.componentToModuleScope.clear();\n }\n\n private applyProviderOverrides(): void {\n const maybeApplyOverrides = (field: string) => (type: Type<any>) => {\n const resolver = field === NG_COMP_DEF ? this.resolvers.component : this.resolvers.directive;\n const metadata = resolver.resolve(type)!;\n if (this.hasProviderOverrides(metadata.providers)) {\n this.patchDefWithProviderOverrides(type, field);\n }\n };\n this.seenComponents.forEach(maybeApplyOverrides(NG_COMP_DEF));\n this.seenDirectives.forEach(maybeApplyOverrides(NG_DIR_DEF));\n\n this.seenComponents.clear();\n this.seenDirectives.clear();\n }\n\n private applyProviderOverridesToModule(moduleType: Type<any>): void {\n if (this.moduleProvidersOverridden.has(moduleType)) {\n return;\n }\n this.moduleProvidersOverridden.add(moduleType);\n\n const injectorDef: any = (moduleType as any)[NG_INJ_DEF];\n if (this.providerOverridesByToken.size > 0) {\n const providers = [\n ...injectorDef.providers,\n ...(this.providerOverridesByModule.get(moduleType as InjectorType<any>) || [])\n ];\n if (this.hasProviderOverrides(providers)) {\n this.maybeStoreNgDef(NG_INJ_DEF, moduleType);\n\n this.storeFieldOfDefOnType(moduleType, NG_INJ_DEF, 'providers');\n injectorDef.providers = this.getOverriddenProviders(providers);\n }\n\n // Apply provider overrides to imported modules recursively\n const moduleDef = (moduleType as any)[NG_MOD_DEF];\n const imports = maybeUnwrapFn(moduleDef.imports);\n for (const importedModule of imports) {\n this.applyProviderOverridesToModule(importedModule);\n }\n // Also override the providers on any ModuleWithProviders imports since those don't appear in\n // the moduleDef.\n for (const importedModule of flatten(injectorDef.imports)) {\n if (isModuleWithProviders(importedModule)) {\n this.defCleanupOps.push({\n object: importedModule,\n fieldName: 'providers',\n originalValue: importedModule.providers\n });\n importedModule.providers = this.getOverriddenProviders(importedModule.providers);\n }\n }\n }\n }\n\n private patchComponentsWithExistingStyles(): void {\n this.existingComponentStyles.forEach(\n (styles, type) => (type as any)[NG_COMP_DEF].styles = styles);\n this.existingComponentStyles.clear();\n }\n\n private queueTypeArray(arr: any[], moduleType: Type<any>|TestingModuleOverride): void {\n for (const value of arr) {\n if (Array.isArray(value)) {\n this.queueTypeArray(value, moduleType);\n } else {\n this.queueType(value, moduleType);\n }\n }\n }\n\n private recompileNgModule(ngModule: Type<any>, metadata: NgModule): void {\n // Cache the initial ngModuleDef as it will be overwritten.\n this.maybeStoreNgDef(NG_MOD_DEF, ngModule);\n this.maybeStoreNgDef(NG_INJ_DEF, ngModule);\n\n compileNgModuleDefs(ngModule as NgModuleType<any>, metadata);\n }\n\n private queueType(type: Type<any>, moduleType: Type<any>|TestingModuleOverride): void {\n const component = this.resolvers.component.resolve(type);\n if (component) {\n // Check whether a give Type has respective NG def (ɵcmp) and compile if def is\n // missing. That might happen in case a class without any Angular decorators extends another\n // class where Component/Directive/Pipe decorator is defined.\n if (isComponentDefPendingResolution(type) || !type.hasOwnProperty(NG_COMP_DEF)) {\n this.pendingComponents.add(type);\n }\n this.seenComponents.add(type);\n\n // Keep track of the module which declares this component, so later the component's scope\n // can be set correctly. If the component has already been recorded here, then one of several\n // cases is true:\n // * the module containing the component was imported multiple times (common).\n // * the component is declared in multiple modules (which is an error).\n // * the component was in 'declarations' of the testing module, and also in an imported module\n // in which case the module scope will be TestingModuleOverride.DECLARATION.\n // * overrideTemplateUsingTestingModule was called for the component in which case the module\n // scope will be TestingModuleOverride.OVERRIDE_TEMPLATE.\n //\n // If the component was previously in the testing module's 'declarations' (meaning the\n // current value is TestingModuleOverride.DECLARATION), then `moduleType` is the component's\n // real module, which was imported. This pattern is understood to mean that the component\n // should use its original scope, but that the testing module should also contain the\n // component in its scope.\n if (!this.componentToModuleScope.has(type) ||\n this.componentToModuleScope.get(type) === TestingModuleOverride.DECLARATION) {\n this.componentToModuleScope.set(type, moduleType);\n }\n return;\n }\n\n const directive = this.resolvers.directive.resolve(type);\n if (directive) {\n if (!type.hasOwnProperty(NG_DIR_DEF)) {\n this.pendingDirectives.add(type);\n }\n this.seenDirectives.add(type);\n return;\n }\n\n const pipe = this.resolvers.pipe.resolve(type);\n if (pipe && !type.hasOwnProperty(NG_PIPE_DEF)) {\n this.pendingPipes.add(type);\n return;\n }\n }\n\n private queueTypesFromModulesArray(arr: any[]): void {\n // Because we may encounter the same NgModule while processing the imports and exports of an\n // NgModule tree, we cache them in this set so we can skip ones that have already been seen\n // encountered. In some test setups, this caching resulted in 10X runtime improvement.\n const processedNgModuleDefs = new Set();\n const queueTypesFromModulesArrayRecur = (arr: any[]): void => {\n for (const value of arr) {\n if (Array.isArray(value)) {\n queueTypesFromModulesArrayRecur(value);\n } else if (hasNgModuleDef(value)) {\n const def = value.ɵmod;\n if (processedNgModuleDefs.has(def)) {\n continue;\n }\n processedNgModuleDefs.add(def);\n // Look through declarations, imports, and exports, and queue\n // everything found there.\n this.queueTypeArray(maybeUnwrapFn(def.declarations), value);\n queueTypesFromModulesArrayRecur(maybeUnwrapFn(def.imports));\n queueTypesFromModulesArrayRecur(maybeUnwrapFn(def.exports));\n } else if (isModuleWithProviders(value)) {\n queueTypesFromModulesArrayRecur([value.ngModule]);\n }\n }\n };\n queueTypesFromModulesArrayRecur(arr);\n }\n\n // When module overrides (via `TestBed.overrideModule`) are present, it might affect all modules\n // that import (even transitively) an overridden one. For all affected modules we need to\n // recalculate their scopes for a given test run and restore original scopes at the end. The goal\n // of this function is to collect all affected modules in a set for further processing. Example:\n // if we have the following module hierarchy: A -> B -> C (where `->` means `imports`) and module\n // `C` is overridden, we consider `A` and `B` as affected, since their scopes might become\n // invalidated with the override.\n private collectModulesAffectedByOverrides(arr: any[]): Set<NgModuleType<any>> {\n const seenModules = new Set<NgModuleType<any>>();\n const affectedModules = new Set<NgModuleType<any>>();\n const calcAffectedModulesRecur = (arr: any[], path: NgModuleType<any>[]): void => {\n for (const value of arr) {\n if (Array.isArray(value)) {\n // If the value is an array, just flatten it (by invoking this function recursively),\n // keeping \"path\" the same.\n calcAffectedModulesRecur(value, path);\n } else if (hasNgModuleDef(value)) {\n if (seenModules.has(value)) {\n // If we've seen this module before and it's included into \"affected modules\" list, mark\n // the whole path that leads to that module as affected, but do not descend into its\n // imports, since we already examined them before.\n if (affectedModules.has(value)) {\n path.forEach(item => affectedModules.add(item));\n }\n continue;\n }\n seenModules.add(value);\n if (this.overriddenModules.has(value)) {\n path.forEach(item => affectedModules.add(item));\n }\n // Examine module imports recursively to look for overridden modules.\n const moduleDef = (value as any)[NG_MOD_DEF];\n calcAffectedModulesRecur(maybeUnwrapFn(moduleDef.imports), path.concat(value));\n }\n }\n };\n calcAffectedModulesRecur(arr, []);\n return affectedModules;\n }\n\n private maybeStoreNgDef(prop: string, type: Type<any>) {\n if (!this.initialNgDefs.has(type)) {\n const currentDef = Object.getOwnPropertyDescriptor(type, prop);\n this.initialNgDefs.set(type, [prop, currentDef]);\n }\n }\n\n private storeFieldOfDefOnType(type: Type<any>, defField: string, fieldName: string): void {\n const def: any = (type as any)[defField];\n const originalValue: any = def[fieldName];\n this.defCleanupOps.push({object: def, fieldName, originalValue});\n }\n\n /**\n * Clears current components resolution queue, but stores the state of the queue, so we can\n * restore it later. Clearing the queue is required before we try to compile components (via\n * `TestBed.compileComponents`), so that component defs are in sync with the resolution queue.\n */\n private clearComponentResolutionQueue() {\n if (this.originalComponentResolutionQueue === null) {\n this.originalComponentResolutionQueue = new Map();\n }\n clearResolutionOfComponentResourcesQueue().forEach(\n (value, key) => this.originalComponentResolutionQueue!.set(key, value));\n }\n\n /*\n * Restores component resolution queue to the previously saved state. This operation is performed\n * as a part of restoring the state after completion of the current set of tests (that might\n * potentially mutate the state).\n */\n private restoreComponentResolutionQueue() {\n if (this.originalComponentResolutionQueue !== null) {\n restoreComponentResolutionQueue(this.originalComponentResolutionQueue);\n this.originalComponentResolutionQueue = null;\n }\n }\n\n restoreOriginalState(): void {\n // Process cleanup ops in reverse order so the field's original value is restored correctly (in\n // case there were multiple overrides for the same field).\n forEachRight(this.defCleanupOps, (op: CleanupOperation) => {\n op.object[op.fieldName] = op.originalValue;\n });\n // Restore initial component/directive/pipe defs\n this.initialNgDefs.forEach((value: [string, PropertyDescriptor|undefined], type: Type<any>) => {\n const [prop, descriptor] = value;\n if (!descriptor) {\n // Delete operations are generally undesirable since they have performance implications\n // on objects they were applied to. In this particular case, situations where this code\n // is invoked should be quite rare to cause any noticeable impact, since it's applied\n // only to some test cases (for example when class with no annotations extends some\n // @Component) when we need to clear 'ɵcmp' field on a given class to restore\n // its original state (before applying overrides and running tests).\n delete (type as any)[prop];\n } else {\n Object.defineProperty(type, prop, descriptor);\n }\n });\n this.initialNgDefs.clear();\n this.moduleProvidersOverridden.clear();\n this.restoreComponentResolutionQueue();\n // Restore the locale ID to the default value, this shouldn't be necessary but we never know\n setLocaleId(DEFAULT_LOCALE_ID);\n }\n\n private compileTestModule(): void {\n class RootScopeModule {}\n compileNgModuleDefs(RootScopeModule as NgModuleType<any>, {\n providers: [...this.rootProviderOverrides],\n });\n\n const ngZone = new NgZone({enableLongStackTrace: true});\n const providers: Provider[] = [\n {provide: NgZone, useValue: ngZone},\n {provide: Compiler, useFactory: () => new R3TestCompiler(this)},\n ...this.providers,\n ...this.providerOverrides,\n ];\n const imports = [RootScopeModule, this.additionalModuleTypes, this.imports || []];\n\n // clang-format off\n compileNgModuleDefs(this.testModuleType, {\n declarations: this.declarations,\n imports,\n schemas: this.schemas,\n providers,\n }, /* allowDuplicateDeclarationsInRoot */ true);\n // clang-format on\n\n this.applyProviderOverridesToModule(this.testModuleType);\n }\n\n get injector(): Injector {\n if (this._injector !== null) {\n return this._injector;\n }\n\n const providers: Provider[] = [];\n const compilerOptions = this.platform.injector.get(COMPILER_OPTIONS);\n compilerOptions.forEach(opts => {\n if (opts.providers) {\n providers.push(opts.providers);\n }\n });\n if (this.compilerProviders !== null) {\n providers.push(...this.compilerProviders);\n }\n\n // TODO(ocombe): make this work with an Injector directly instead of creating a module for it\n class CompilerModule {}\n compileNgModuleDefs(CompilerModule as NgModuleType<any>, {providers});\n\n const CompilerModuleFactory = new R3NgModuleFactory(CompilerModule);\n this._injector = CompilerModuleFactory.create(this.platform.injector).injector;\n return this._injector;\n }\n\n // get overrides for a specific provider (if any)\n private getSingleProviderOverrides(provider: Provider): Provider|null {\n const token = getProviderToken(provider);\n return this.providerOverridesByToken.get(token) || null;\n }\n\n private getProviderOverrides(providers?: Provider[]): Provider[] {\n if (!providers || !providers.length || this.providerOverridesByToken.size === 0) return [];\n // There are two flattening operations here. The inner flatten() operates on the metadata's\n // providers and applies a mapping function which retrieves overrides for each incoming\n // provider. The outer flatten() then flattens the produced overrides array. If this is not\n // done, the array can contain other empty arrays (e.g. `[[], []]`) which leak into the\n // providers array and contaminate any error messages that might be generated.\n return flatten(flatten(\n providers, (provider: Provider) => this.getSingleProviderOverrides(provider) || []));\n }\n\n private getOverriddenProviders(providers?: Provider[]): Provider[] {\n if (!providers || !providers.length || this.providerOverridesByToken.size === 0) return [];\n\n const flattenedProviders = flatten<Provider[]>(providers);\n const overrides = this.getProviderOverrides(flattenedProviders);\n const overriddenProviders = [...flattenedProviders, ...overrides];\n const final: Provider[] = [];\n const seenOverriddenProviders = new Set<Provider>();\n\n // We iterate through the list of providers in reverse order to make sure provider overrides\n // take precedence over the values defined in provider list. We also filter out all providers\n // that have overrides, keeping overridden values only. This is needed, since presence of a\n // provider with `ngOnDestroy` hook will cause this hook to be registered and invoked later.\n forEachRight(overriddenProviders, (provider: any) => {\n const token: any = getProviderToken(provider);\n if (this.providerOverridesByToken.has(token)) {\n if (!seenOverriddenProviders.has(token)) {\n seenOverriddenProviders.add(token);\n // Treat all overridden providers as `{multi: false}` (even if it's a multi-provider) to\n // make sure that provided override takes highest precedence and is not combined with\n // other instances of the same multi provider.\n final.unshift({...provider, multi: false});\n }\n } else {\n final.unshift(provider);\n }\n });\n return final;\n }\n\n private hasProviderOverrides(providers?: Provider[]): boolean {\n return this.getProviderOverrides(providers).length > 0;\n }\n\n private patchDefWithProviderOverrides(declaration: Type<any>, field: string): void {\n const def = (declaration as any)[field];\n if (def && def.providersResolver) {\n this.maybeStoreNgDef(field, declaration);\n\n const resolver = def.providersResolver;\n const processProvidersFn = (providers: Provider[]) => this.getOverriddenProviders(providers);\n this.storeFieldOfDefOnType(declaration, field, 'providersResolver');\n def.providersResolver = (ngDef: DirectiveDef<any>) => resolver(ngDef, processProvidersFn);\n }\n }\n}\n\nfunction initResolvers(): Resolvers {\n return {\n module: new NgModuleResolver(),\n component: new ComponentResolver(),\n directive: new DirectiveResolver(),\n pipe: new PipeResolver()\n };\n}\n\nfunction hasNgModuleDef<T>(value: Type<T>): value is NgModuleType<T> {\n return value.hasOwnProperty('ɵmod');\n}\n\nfunction maybeUnwrapFn<T>(maybeFn: (() => T)|T): T {\n return maybeFn instanceof Function ? maybeFn() : maybeFn;\n}\n\nfunction flatten<T>(values: any[], mapFn?: (value: T) => any): T[] {\n const out: T[] = [];\n values.forEach(value => {\n if (Array.isArray(value)) {\n out.push(...flatten<T>(value, mapFn));\n } else {\n out.push(mapFn ? mapFn(value) : value);\n }\n });\n return out;\n}\n\nfunction getProviderField(provider: Provider, field: string) {\n return provider && typeof provider === 'object' && (provider as any)[field];\n}\n\nfunction getProviderToken(provider: Provider) {\n return getProviderField(provider, 'provide') || provider;\n}\n\nfunction isModuleWithProviders(value: any): value is ModuleWithProviders<any> {\n return value.hasOwnProperty('ngModule');\n}\n\nfunction forEachRight<T>(values: T[], fn: (value: T, idx: number) => void): void {\n for (let idx = values.length - 1; idx >= 0; idx--) {\n fn(values[idx], idx);\n }\n}\n\nfunction invalidTypeError(name: string, expectedType: string): Error {\n return new Error(`${name} class doesn't have @${expectedType} decorator or is missing metadata.`);\n}\n\nclass R3TestCompiler implements Compiler {\n constructor(private testBed: R3TestBedCompiler) {}\n\n compileModuleSync<T>(moduleType: Type<T>): NgModuleFactory<T> {\n this.testBed._compileNgModuleSync(moduleType);\n return new R3NgModuleFactory(moduleType);\n }\n\n async compileModuleAsync<T>(moduleType: Type<T>): Promise<NgModuleFactory<T>> {\n await this.testBed._compileNgModuleAsync(moduleType);\n return new R3NgModuleFactory(moduleType);\n }\n\n compileModuleAndAllComponentsSync<T>(moduleType: Type<T>): ModuleWithComponentFactories<T> {\n const ngModuleFactory = this.compileModuleSync(moduleType);\n const componentFactories = this.testBed._getComponentFactories(moduleType as NgModuleType<T>);\n return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n }\n\n async compileModuleAndAllComponentsAsync<T>(moduleType: Type<T>):\n Promise<ModuleWithComponentFactories<T>> {\n const ngModuleFactory = await this.compileModuleAsync(moduleType);\n const componentFactories = this.testBed._getComponentFactories(moduleType as NgModuleType<T>);\n return new ModuleWithComponentFactories(ngModuleFactory, componentFactories);\n }\n\n clearCache(): void {}\n\n clearCacheFor(type: Type<any>): void {}\n\n getModuleId(moduleType: Type<any>): string|undefined {\n const meta = this.testBed._getModuleResolver().resolve(moduleType);\n return meta && meta.id || undefined;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Component, Directive, InjectFlags, InjectionToken, NgModule, Pipe, PlatformRef, ProviderToken, SchemaMetadata, Type} from '@angular/core';\n\nimport {ComponentFixture} from './component_fixture';\nimport {MetadataOverride} from './metadata_override';\nimport {TestBed} from './test_bed';\n\n/** Whether test modules should be torn down by default. */\nexport const TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT = true;\n\n/**\n * An abstract class for inserting the root test component element in a platform independent way.\n *\n * @publicApi\n */\nexport class TestComponentRenderer {\n insertRootElement(rootElementId: string) {}\n removeAllRootElements?() {}\n}\n\n/**\n * @publicApi\n */\nexport const ComponentFixtureAutoDetect =\n new InjectionToken<boolean[]>('ComponentFixtureAutoDetect');\n\n/**\n * @publicApi\n */\nexport const ComponentFixtureNoNgZone = new InjectionToken<boolean[]>('ComponentFixtureNoNgZone');\n\n/**\n * @publicApi\n */\nexport type TestModuleMetadata = {\n providers?: any[],\n declarations?: any[],\n imports?: any[],\n schemas?: Array<SchemaMetadata|any[]>,\n /**\n * @deprecated With Ivy, AOT summary files are unused.\n */\n aotSummaries?: () => any[],\n teardown?: ModuleTeardownOptions;\n};\n\n/**\n * @publicApi\n */\nexport interface TestEnvironmentOptions {\n /**\n * Provides a way to specify AOT summaries to use in TestBed.\n * This parameter is unused and deprecated in Ivy.\n *\n * @deprecated With Ivy, AOT summary files are unused.\n */\n aotSummaries?: () => any[];\n /**\n * Configures the test module teardown behavior in `TestBed`.\n */\n teardown?: ModuleTeardownOptions;\n}\n\n/**\n * Configures the test module teardown behavior in `TestBed`.\n * @publicApi\n */\nexport interface ModuleTeardownOptions {\n /** Whether the test module should be destroyed after every test. */\n destroyAfterEach: boolean;\n\n /** Whether errors during test module destruction should be re-thrown. Defaults to `true`. */\n rethrowErrors?: boolean;\n}\n\n/**\n * Static methods implemented by the `TestBedViewEngine` and `TestBedRender3`\n *\n * @publicApi\n */\nexport interface TestBedStatic {\n new(...args: any[]): TestBed;\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n options?: TestEnvironmentOptions): TestBed;\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n *\n * @deprecated This API that allows providing AOT summaries is deprecated, since summary files are\n * unused in Ivy.\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): TestBed;\n\n /**\n * Reset the providers for the test injector.\n */\n resetTestEnvironment(): void;\n\n resetTestingModule(): TestBedStatic;\n\n /**\n * Allows overriding default compiler providers and settings\n * which are defined in test_injector.js\n */\n configureCompiler(config: {providers?: any[]; useJit?: boolean;}): TestBedStatic;\n\n /**\n * Allows overriding default providers, directives, pipes, modules of the test injector,\n * which are defined in test_injector.js\n */\n configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic;\n\n /**\n * Compile components with a `templateUrl` for the test's NgModule.\n * It is necessary to call this function\n * as fetching urls is asynchronous.\n */\n compileComponents(): Promise<any>;\n\n overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic;\n\n overrideComponent(component: Type<any>, override: MetadataOverride<Component>): TestBedStatic;\n\n overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): TestBedStatic;\n\n overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic;\n\n overrideTemplate(component: Type<any>, template: string): TestBedStatic;\n\n /**\n * Overrides the template of the given component, compiling the template\n * in the context of the TestingModule.\n *\n * Note: This works for JIT and AOTed components as well.\n */\n overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic;\n\n /**\n * Overwrites all providers for the given token with the given provider definition.\n *\n * Note: This works for JIT and AOTed components as well.\n */\n overrideProvider(token: any, provider: {\n useFactory: Function,\n deps: any[],\n }): TestBedStatic;\n overrideProvider(token: any, provider: {useValue: any;}): TestBedStatic;\n overrideProvider(token: any, provider: {\n useFactory?: Function,\n useValue?: any,\n deps?: any[],\n }): TestBedStatic;\n\n inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue?: any): any;\n\n createComponent<T>(component: Type<T>): ComponentFixture<T>;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// The formatter and CI disagree on how this import statement should be formatted. Both try to keep\n// it on one line, too, which has gotten very hard to read & manage. So disable the formatter for\n// this statement only.\n\n/* clang-format off */\nimport {\n Component,\n Directive,\n InjectFlags,\n InjectionToken,\n Injector,\n NgModule,\n NgZone,\n Pipe,\n PlatformRef,\n ProviderToken,\n Type,\n ɵflushModuleScopingQueueAsMuchAsPossible as flushModuleScopingQueueAsMuchAsPossible,\n ɵRender3ComponentFactory as ComponentFactory,\n ɵRender3NgModuleRef as NgModuleRef,\n ɵresetCompiledComponents as resetCompiledComponents,\n ɵstringify as stringify,\n} from '@angular/core';\n\n/* clang-format on */\n\nimport {ComponentFixture} from './component_fixture';\nimport {MetadataOverride} from './metadata_override';\nimport {R3TestBedCompiler} from './r3_test_bed_compiler';\nimport {TestBed} from './test_bed';\nimport {ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, ModuleTeardownOptions, TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT, TestBedStatic, TestComponentRenderer, TestEnvironmentOptions, TestModuleMetadata} from './test_bed_common';\n\nlet _nextRootElementId = 0;\n\n\n/**\n * @description\n * Configures and initializes environment for unit testing and provides methods for\n * creating components and services in unit tests.\n *\n * TestBed is the primary api for writing unit tests for Angular applications and libraries.\n *\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\n * according to the compiler used.\n */\nexport class TestBedRender3 implements TestBed {\n /**\n * Teardown options that have been configured at the environment level.\n * Used as a fallback if no instance-level options have been provided.\n */\n private static _environmentTeardownOptions: ModuleTeardownOptions|undefined;\n\n /**\n * Teardown options that have been configured at the `TestBed` instance level.\n * These options take precedence over the environemnt-level ones.\n */\n private _instanceTeardownOptions: ModuleTeardownOptions|undefined;\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n *\n * @publicApi\n */\n static initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n summariesOrOptions?: TestEnvironmentOptions|(() => any[])): TestBed {\n const testBed = _getTestBedRender3();\n testBed.initTestEnvironment(ngModule, platform, summariesOrOptions);\n return testBed;\n }\n\n /**\n * Reset the providers for the test injector.\n *\n * @publicApi\n */\n static resetTestEnvironment(): void {\n _getTestBedRender3().resetTestEnvironment();\n }\n\n static configureCompiler(config: {providers?: any[]; useJit?: boolean;}): TestBedStatic {\n _getTestBedRender3().configureCompiler(config);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n /**\n * Allows overriding default providers, directives, pipes, modules of the test injector,\n * which are defined in test_injector.js\n */\n static configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic {\n _getTestBedRender3().configureTestingModule(moduleDef);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n /**\n * Compile components with a `templateUrl` for the test's NgModule.\n * It is necessary to call this function\n * as fetching urls is asynchronous.\n */\n static compileComponents(): Promise<any> {\n return _getTestBedRender3().compileComponents();\n }\n\n static overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic {\n _getTestBedRender3().overrideModule(ngModule, override);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static overrideComponent(component: Type<any>, override: MetadataOverride<Component>):\n TestBedStatic {\n _getTestBedRender3().overrideComponent(component, override);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>):\n TestBedStatic {\n _getTestBedRender3().overrideDirective(directive, override);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic {\n _getTestBedRender3().overridePipe(pipe, override);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static overrideTemplate(component: Type<any>, template: string): TestBedStatic {\n _getTestBedRender3().overrideComponent(component, {set: {template, templateUrl: null!}});\n return TestBedRender3 as any as TestBedStatic;\n }\n\n /**\n * Overrides the template of the given component, compiling the template\n * in the context of the TestingModule.\n *\n * Note: This works for JIT and AOTed components as well.\n */\n static overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic {\n _getTestBedRender3().overrideTemplateUsingTestingModule(component, template);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static overrideProvider(token: any, provider: {\n useFactory: Function,\n deps: any[],\n }): TestBedStatic;\n static overrideProvider(token: any, provider: {useValue: any;}): TestBedStatic;\n static overrideProvider(token: any, provider: {\n useFactory?: Function,\n useValue?: any,\n deps?: any[],\n }): TestBedStatic {\n _getTestBedRender3().overrideProvider(token, provider);\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n static inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n static inject<T>(token: ProviderToken<T>, notFoundValue?: T|null, flags?: InjectFlags): T|null {\n return _getTestBedRender3().inject(token, notFoundValue, flags);\n }\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n static get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n static get(token: any, notFoundValue?: any): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n static get(\n token: any, notFoundValue: any = Injector.THROW_IF_NOT_FOUND,\n flags: InjectFlags = InjectFlags.Default): any {\n return _getTestBedRender3().inject(token, notFoundValue, flags);\n }\n\n static createComponent<T>(component: Type<T>): ComponentFixture<T> {\n return _getTestBedRender3().createComponent(component);\n }\n\n static resetTestingModule(): TestBedStatic {\n _getTestBedRender3().resetTestingModule();\n return TestBedRender3 as any as TestBedStatic;\n }\n\n static shouldTearDownTestingModule(): boolean {\n return _getTestBedRender3().shouldTearDownTestingModule();\n }\n\n static tearDownTestingModule(): void {\n _getTestBedRender3().tearDownTestingModule();\n }\n\n // Properties\n\n platform: PlatformRef = null!;\n ngModule: Type<any>|Type<any>[] = null!;\n\n private _compiler: R3TestBedCompiler|null = null;\n private _testModuleRef: NgModuleRef<any>|null = null;\n\n private _activeFixtures: ComponentFixture<any>[] = [];\n private _globalCompilationChecked = false;\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n *\n * @publicApi\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n summariesOrOptions?: TestEnvironmentOptions|(() => any[])): void {\n if (this.platform || this.ngModule) {\n throw new Error('Cannot set base providers because it has already been called');\n }\n\n // If `summariesOrOptions` is a function, it means that it's\n // an AOT summaries factory which Ivy doesn't support.\n TestBedRender3._environmentTeardownOptions =\n typeof summariesOrOptions === 'function' ? undefined : summariesOrOptions?.teardown;\n\n this.platform = platform;\n this.ngModule = ngModule;\n this._compiler = new R3TestBedCompiler(this.platform, this.ngModule);\n }\n\n /**\n * Reset the providers for the test injector.\n *\n * @publicApi\n */\n resetTestEnvironment(): void {\n this.resetTestingModule();\n this._compiler = null;\n this.platform = null!;\n this.ngModule = null!;\n TestBedRender3._environmentTeardownOptions = undefined;\n }\n\n resetTestingModule(): void {\n this.checkGlobalCompilationFinished();\n resetCompiledComponents();\n if (this._compiler !== null) {\n this.compiler.restoreOriginalState();\n }\n this._compiler = new R3TestBedCompiler(this.platform, this.ngModule);\n\n // We have to chain a couple of try/finally blocks, because each step can\n // throw errors and we don't want it to interrupt the next step and we also\n // want an error to be thrown at the end.\n try {\n this.destroyActiveFixtures();\n } finally {\n try {\n if (this.shouldTearDownTestingModule()) {\n this.tearDownTestingModule();\n }\n } finally {\n this._testModuleRef = null;\n this._instanceTeardownOptions = undefined;\n }\n }\n }\n\n configureCompiler(config: {providers?: any[]; useJit?: boolean;}): void {\n if (config.useJit != null) {\n throw new Error('the Render3 compiler JiT mode is not configurable !');\n }\n\n if (config.providers !== undefined) {\n this.compiler.setCompilerProviders(config.providers);\n }\n }\n\n configureTestingModule(moduleDef: TestModuleMetadata): void {\n this.assertNotInstantiated('R3TestBed.configureTestingModule', 'configure the test module');\n // Always re-assign the teardown options, even if they're undefined.\n // This ensures that we don't carry the options between tests.\n this._instanceTeardownOptions = moduleDef.teardown;\n this.compiler.configureTestingModule(moduleDef);\n }\n\n compileComponents(): Promise<any> {\n return this.compiler.compileComponents();\n }\n\n inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n inject<T>(token: ProviderToken<T>, notFoundValue?: T|null, flags?: InjectFlags): T|null {\n if (token as unknown === TestBedRender3) {\n return this as any;\n }\n const UNDEFINED = {};\n const result = this.testModuleRef.injector.get(token, UNDEFINED, flags);\n return result === UNDEFINED ? this.compiler.injector.get(token, notFoundValue, flags) as any :\n result;\n }\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue?: any): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue: any = Injector.THROW_IF_NOT_FOUND,\n flags: InjectFlags = InjectFlags.Default): any {\n return this.inject(token, notFoundValue, flags);\n }\n\n execute(tokens: any[], fn: Function, context?: any): any {\n const params = tokens.map(t => this.inject(t));\n return fn.apply(context, params);\n }\n\n overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void {\n this.assertNotInstantiated('overrideModule', 'override module metadata');\n this.compiler.overrideModule(ngModule, override);\n }\n\n overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void {\n this.assertNotInstantiated('overrideComponent', 'override component metadata');\n this.compiler.overrideComponent(component, override);\n }\n\n overrideTemplateUsingTestingModule(component: Type<any>, template: string): void {\n this.assertNotInstantiated(\n 'R3TestBed.overrideTemplateUsingTestingModule',\n 'Cannot override template when the test module has already been instantiated');\n this.compiler.overrideTemplateUsingTestingModule(component, template);\n }\n\n overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void {\n this.assertNotInstantiated('overrideDirective', 'override directive metadata');\n this.compiler.overrideDirective(directive, override);\n }\n\n overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void {\n this.assertNotInstantiated('overridePipe', 'override pipe metadata');\n this.compiler.overridePipe(pipe, override);\n }\n\n /**\n * Overwrites all providers for the given token with the given provider definition.\n */\n overrideProvider(token: any, provider: {useFactory?: Function, useValue?: any, deps?: any[]}):\n void {\n this.assertNotInstantiated('overrideProvider', 'override provider');\n this.compiler.overrideProvider(token, provider);\n }\n\n createComponent<T>(type: Type<T>): ComponentFixture<T> {\n const testComponentRenderer = this.inject(TestComponentRenderer);\n const rootElId = `root${_nextRootElementId++}`;\n testComponentRenderer.insertRootElement(rootElId);\n\n const componentDef = (type as any).ɵcmp;\n\n if (!componentDef) {\n throw new Error(\n `It looks like '${stringify(type)}' has not been IVY compiled - it has no 'ɵcmp' field`);\n }\n\n // TODO: Don't cast as `InjectionToken<boolean>`, proper type is boolean[]\n const noNgZone = this.inject(ComponentFixtureNoNgZone as InjectionToken<boolean>, false);\n // TODO: Don't cast as `InjectionToken<boolean>`, proper type is boolean[]\n const autoDetect: boolean =\n this.inject(ComponentFixtureAutoDetect as InjectionToken<boolean>, false);\n const ngZone: NgZone|null = noNgZone ? null : this.inject(NgZone, null);\n const componentFactory = new ComponentFactory(componentDef);\n const initComponent = () => {\n const componentRef =\n componentFactory.create(Injector.NULL, [], `#${rootElId}`, this.testModuleRef);\n return new ComponentFixture<any>(componentRef, ngZone, autoDetect);\n };\n const fixture = ngZone ? ngZone.run(initComponent) : initComponent();\n this._activeFixtures.push(fixture);\n return fixture;\n }\n\n /**\n * @internal strip this from published d.ts files due to\n * https://github.com/microsoft/TypeScript/issues/36216\n */\n private get compiler(): R3TestBedCompiler {\n if (this._compiler === null) {\n throw new Error(`Need to call TestBed.initTestEnvironment() first`);\n }\n return this._compiler;\n }\n\n /**\n * @internal strip this from published d.ts files due to\n * https://github.com/microsoft/TypeScript/issues/36216\n */\n private get testModuleRef(): NgModuleRef<any> {\n if (this._testModuleRef === null) {\n this._testModuleRef = this.compiler.finalize();\n }\n return this._testModuleRef;\n }\n\n private assertNotInstantiated(methodName: string, methodDescription: string) {\n if (this._testModuleRef !== null) {\n throw new Error(\n `Cannot ${methodDescription} when the test module has already been instantiated. ` +\n `Make sure you are not using \\`inject\\` before \\`${methodName}\\`.`);\n }\n }\n\n /**\n * Check whether the module scoping queue should be flushed, and flush it if needed.\n *\n * When the TestBed is reset, it clears the JIT module compilation queue, cancelling any\n * in-progress module compilation. This creates a potential hazard - the very first time the\n * TestBed is initialized (or if it's reset without being initialized), there may be pending\n * compilations of modules declared in global scope. These compilations should be finished.\n *\n * To ensure that globally declared modules have their components scoped properly, this function\n * is called whenever TestBed is initialized or reset. The _first_ time that this happens, prior\n * to any other operations, the scoping queue is flushed.\n */\n private checkGlobalCompilationFinished(): void {\n // Checking _testNgModuleRef is null should not be necessary, but is left in as an additional\n // guard that compilations queued in tests (after instantiation) are never flushed accidentally.\n if (!this._globalCompilationChecked && this._testModuleRef === null) {\n flushModuleScopingQueueAsMuchAsPossible();\n }\n this._globalCompilationChecked = true;\n }\n\n private destroyActiveFixtures(): void {\n let errorCount = 0;\n this._activeFixtures.forEach((fixture) => {\n try {\n fixture.destroy();\n } catch (e) {\n errorCount++;\n console.error('Error during cleanup of component', {\n component: fixture.componentInstance,\n stacktrace: e,\n });\n }\n });\n this._activeFixtures = [];\n\n if (errorCount > 0 && this.shouldRethrowTeardownErrors()) {\n throw Error(\n `${errorCount} ${(errorCount === 1 ? 'component' : 'components')} ` +\n `threw errors during cleanup`);\n }\n }\n\n shouldRethrowTeardownErrors() {\n const instanceOptions = this._instanceTeardownOptions;\n const environmentOptions = TestBedRender3._environmentTeardownOptions;\n\n // If the new teardown behavior hasn't been configured, preserve the old behavior.\n if (!instanceOptions && !environmentOptions) {\n return TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT;\n }\n\n // Otherwise use the configured behavior or default to rethrowing.\n return instanceOptions?.rethrowErrors ?? environmentOptions?.rethrowErrors ??\n this.shouldTearDownTestingModule();\n }\n\n shouldTearDownTestingModule(): boolean {\n return this._instanceTeardownOptions?.destroyAfterEach ??\n TestBedRender3._environmentTeardownOptions?.destroyAfterEach ??\n TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT;\n }\n\n tearDownTestingModule() {\n // If the module ref has already been destroyed, we won't be able to get a test renderer.\n if (this._testModuleRef === null) {\n return;\n }\n // Resolve the renderer ahead of time, because we want to remove the root elements as the very\n // last step, but the injector will be destroyed as a part of the module ref destruction.\n const testRenderer = this.inject(TestComponentRenderer);\n try {\n this._testModuleRef.destroy();\n } catch (e) {\n if (this.shouldRethrowTeardownErrors()) {\n throw e;\n } else {\n console.error('Error during cleanup of a testing module', {\n component: this._testModuleRef.instance,\n stacktrace: e,\n });\n }\n } finally {\n testRenderer.removeAllRootElements?.();\n }\n }\n}\n\nlet testBed: TestBedRender3;\n\nexport function _getTestBedRender3(): TestBedRender3 {\n return testBed = testBed || new TestBedRender3();\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Compiler, CompilerOptions, Component, ComponentFactory, Directive, Injectable, Injector, NgModule, Pipe, Type} from '@angular/core';\n\nimport {MetadataOverride} from './metadata_override';\n\nfunction unimplemented(): any {\n throw Error('unimplemented');\n}\n\n/**\n * Special interface to the compiler only used by testing\n *\n * @publicApi\n */\n@Injectable()\nexport class TestingCompiler extends Compiler {\n get injector(): Injector {\n throw unimplemented();\n }\n overrideModule(module: Type<any>, overrides: MetadataOverride<NgModule>): void {\n throw unimplemented();\n }\n overrideDirective(directive: Type<any>, overrides: MetadataOverride<Directive>): void {\n throw unimplemented();\n }\n overrideComponent(component: Type<any>, overrides: MetadataOverride<Component>): void {\n throw unimplemented();\n }\n overridePipe(directive: Type<any>, overrides: MetadataOverride<Pipe>): void {\n throw unimplemented();\n }\n /**\n * Allows to pass the compile summary from AOT compilation to the JIT compiler,\n * so that it can use the code generated by AOT.\n */\n loadAotSummaries(summaries: () => any[]) {\n throw unimplemented();\n }\n\n /**\n * Gets the component factory for the given component.\n * This assumes that the component has been compiled before calling this call using\n * `compileModuleAndAllComponents*`.\n */\n getComponentFactory<T>(component: Type<T>): ComponentFactory<T> {\n throw unimplemented();\n }\n\n /**\n * Returns the component type that is stored in the given error.\n * This can be used for errors created by compileModule...\n */\n getComponentFromError(error: Error): Type<any>|null {\n throw unimplemented();\n }\n}\n\n/**\n * A factory for creating a Compiler\n *\n * @publicApi\n */\nexport abstract class TestingCompilerFactory {\n abstract createTestingCompiler(options?: CompilerOptions[]): TestingCompiler;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ApplicationInitStatus, CompilerOptions, Component, Directive, InjectFlags, InjectionToken, Injector, NgModule, NgModuleFactory, NgModuleRef, NgZone, Optional, Pipe, PlatformRef, Provider, ProviderToken, SchemaMetadata, SkipSelf, StaticProvider, Type, ɵclearOverrides as clearOverrides, ɵDepFlags as DepFlags, ɵgetInjectableDef as getInjectableDef, ɵINJECTOR_SCOPE as INJECTOR_SCOPE, ɵivyEnabled as ivyEnabled, ɵNodeFlags as NodeFlags, ɵoverrideComponentView as overrideComponentView, ɵoverrideProvider as overrideProvider, ɵstringify as stringify, ɵɵInjectableDeclaration} from '@angular/core';\n\nimport {ComponentFixture} from './component_fixture';\nimport {MetadataOverride} from './metadata_override';\nimport {_getTestBedRender3, TestBedRender3} from './r3_test_bed';\nimport {ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, ModuleTeardownOptions, TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT, TestBedStatic, TestComponentRenderer, TestEnvironmentOptions, TestModuleMetadata} from './test_bed_common';\nimport {TestingCompiler, TestingCompilerFactory} from './test_compiler';\n\n\nlet _nextRootElementId = 0;\n\n/**\n * @publicApi\n */\nexport interface TestBed {\n platform: PlatformRef;\n\n ngModule: Type<any>|Type<any>[];\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n options?: TestEnvironmentOptions): void;\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n *\n * @deprecated This API that allows providing AOT summaries is deprecated, since summary files are\n * unused in Ivy.\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): void;\n\n /**\n * Reset the providers for the test injector.\n */\n resetTestEnvironment(): void;\n\n resetTestingModule(): void;\n\n configureCompiler(config: {providers?: any[], useJit?: boolean}): void;\n\n configureTestingModule(moduleDef: TestModuleMetadata): void;\n\n compileComponents(): Promise<any>;\n\n inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue?: any): any;\n\n execute(tokens: any[], fn: Function, context?: any): any;\n\n overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void;\n\n overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void;\n\n overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void;\n\n overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void;\n\n /**\n * Overwrites all providers for the given token with the given provider definition.\n */\n overrideProvider(token: any, provider: {\n useFactory: Function,\n deps: any[],\n }): void;\n overrideProvider(token: any, provider: {useValue: any;}): void;\n overrideProvider(token: any, provider: {useFactory?: Function, useValue?: any, deps?: any[]}):\n void;\n\n overrideTemplateUsingTestingModule(component: Type<any>, template: string): void;\n\n createComponent<T>(component: Type<T>): ComponentFixture<T>;\n}\n\n/**\n * @description\n * Configures and initializes environment for unit testing and provides methods for\n * creating components and services in unit tests.\n *\n * `TestBed` is the primary api for writing unit tests for Angular applications and libraries.\n *\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\n * according to the compiler used.\n */\nexport class TestBedViewEngine implements TestBed {\n /**\n * Teardown options that have been configured at the environment level.\n * Used as a fallback if no instance-level options have been provided.\n */\n private static _environmentTeardownOptions: ModuleTeardownOptions|undefined;\n\n /**\n * Teardown options that have been configured at the `TestBed` instance level.\n * These options take precedence over the environemnt-level ones.\n */\n private _instanceTeardownOptions: ModuleTeardownOptions|undefined;\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n */\n static initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n summariesOrOptions?: TestEnvironmentOptions|(() => any[])): TestBedViewEngine {\n const testBed = _getTestBedViewEngine();\n testBed.initTestEnvironment(ngModule, platform, summariesOrOptions);\n return testBed;\n }\n\n /**\n * Reset the providers for the test injector.\n */\n static resetTestEnvironment(): void {\n _getTestBedViewEngine().resetTestEnvironment();\n }\n\n static resetTestingModule(): TestBedStatic {\n _getTestBedViewEngine().resetTestingModule();\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n /**\n * Allows overriding default compiler providers and settings\n * which are defined in test_injector.js\n */\n static configureCompiler(config: {providers?: any[]; useJit?: boolean;}): TestBedStatic {\n _getTestBedViewEngine().configureCompiler(config);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n /**\n * Allows overriding default providers, directives, pipes, modules of the test injector,\n * which are defined in test_injector.js\n */\n static configureTestingModule(moduleDef: TestModuleMetadata): TestBedStatic {\n _getTestBedViewEngine().configureTestingModule(moduleDef);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n /**\n * Compile components with a `templateUrl` for the test's NgModule.\n * It is necessary to call this function\n * as fetching urls is asynchronous.\n */\n static compileComponents(): Promise<any> {\n return getTestBed().compileComponents();\n }\n\n static overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): TestBedStatic {\n _getTestBedViewEngine().overrideModule(ngModule, override);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n static overrideComponent(component: Type<any>, override: MetadataOverride<Component>):\n TestBedStatic {\n _getTestBedViewEngine().overrideComponent(component, override);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n static overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>):\n TestBedStatic {\n _getTestBedViewEngine().overrideDirective(directive, override);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n static overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): TestBedStatic {\n _getTestBedViewEngine().overridePipe(pipe, override);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n static overrideTemplate(component: Type<any>, template: string): TestBedStatic {\n _getTestBedViewEngine().overrideComponent(component, {set: {template, templateUrl: null!}});\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n /**\n * Overrides the template of the given component, compiling the template\n * in the context of the TestingModule.\n *\n * Note: This works for JIT and AOTed components as well.\n */\n static overrideTemplateUsingTestingModule(component: Type<any>, template: string): TestBedStatic {\n _getTestBedViewEngine().overrideTemplateUsingTestingModule(component, template);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n /**\n * Overwrites all providers for the given token with the given provider definition.\n *\n * Note: This works for JIT and AOTed components as well.\n */\n static overrideProvider(token: any, provider: {\n useFactory: Function,\n deps: any[],\n }): TestBedStatic;\n static overrideProvider(token: any, provider: {useValue: any;}): TestBedStatic;\n static overrideProvider(token: any, provider: {\n useFactory?: Function,\n useValue?: any,\n deps?: any[],\n }): TestBedStatic {\n _getTestBedViewEngine().overrideProvider(token, provider as any);\n return TestBedViewEngine as any as TestBedStatic;\n }\n\n static inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n static inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n static inject<T>(token: ProviderToken<T>, notFoundValue?: T|null, flags?: InjectFlags): T|null {\n return _getTestBedViewEngine().inject(token, notFoundValue, flags);\n }\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n static get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /**\n * @deprecated from v9.0.0 use TestBed.inject\n * @suppress {duplicate}\n */\n static get(token: any, notFoundValue?: any): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n static get(\n token: any, notFoundValue: any = Injector.THROW_IF_NOT_FOUND,\n flags: InjectFlags = InjectFlags.Default): any {\n return _getTestBedViewEngine().inject(token, notFoundValue, flags);\n }\n\n static createComponent<T>(component: Type<T>): ComponentFixture<T> {\n return _getTestBedViewEngine().createComponent(component);\n }\n\n static shouldTearDownTestingModule(): boolean {\n return _getTestBedViewEngine().shouldTearDownTestingModule();\n }\n\n static tearDownTestingModule(): void {\n _getTestBedViewEngine().tearDownTestingModule();\n }\n\n private _instantiated: boolean = false;\n\n private _compiler: TestingCompiler = null!;\n private _moduleRef: NgModuleRef<any>|null = null;\n private _moduleFactory: NgModuleFactory<any>|null = null;\n private _pendingModuleFactory: Type<unknown>|null = null;\n\n private _compilerOptions: CompilerOptions[] = [];\n\n private _moduleOverrides: [Type<any>, MetadataOverride<NgModule>][] = [];\n private _componentOverrides: [Type<any>, MetadataOverride<Component>][] = [];\n private _directiveOverrides: [Type<any>, MetadataOverride<Directive>][] = [];\n private _pipeOverrides: [Type<any>, MetadataOverride<Pipe>][] = [];\n\n private _providers: Provider[] = [];\n private _declarations: Array<Type<any>|any[]|any> = [];\n private _imports: Array<Type<any>|any[]|any> = [];\n private _schemas: Array<SchemaMetadata|any[]> = [];\n private _activeFixtures: ComponentFixture<any>[] = [];\n\n private _testEnvAotSummaries: () => any[] = () => [];\n private _aotSummaries: Array<() => any[]> = [];\n private _templateOverrides: Array<{component: Type<any>, templateOf: Type<any>}> = [];\n\n private _isRoot: boolean = true;\n private _rootProviderOverrides: Provider[] = [];\n\n platform: PlatformRef = null!;\n\n ngModule: Type<any>|Type<any>[] = null!;\n\n /**\n * Initialize the environment for testing with a compiler factory, a PlatformRef, and an\n * angular module. These are common to every test in the suite.\n *\n * This may only be called once, to set up the common providers for the current test\n * suite on the current platform. If you absolutely need to change the providers,\n * first use `resetTestEnvironment`.\n *\n * Test modules and platforms for individual platforms are available from\n * '@angular/<platform_name>/testing'.\n */\n initTestEnvironment(\n ngModule: Type<any>|Type<any>[], platform: PlatformRef,\n summariesOrOptions?: TestEnvironmentOptions|(() => any[])): void {\n if (this.platform || this.ngModule) {\n throw new Error('Cannot set base providers because it has already been called');\n }\n this.platform = platform;\n this.ngModule = ngModule;\n if (typeof summariesOrOptions === 'function') {\n this._testEnvAotSummaries = summariesOrOptions;\n TestBedViewEngine._environmentTeardownOptions = undefined;\n } else {\n this._testEnvAotSummaries = (summariesOrOptions?.aotSummaries) || (() => []);\n TestBedViewEngine._environmentTeardownOptions = summariesOrOptions?.teardown;\n }\n }\n\n /**\n * Reset the providers for the test injector.\n */\n resetTestEnvironment(): void {\n this.resetTestingModule();\n this.platform = null!;\n this.ngModule = null!;\n this._testEnvAotSummaries = () => [];\n TestBedViewEngine._environmentTeardownOptions = undefined;\n }\n\n resetTestingModule(): void {\n clearOverrides();\n this._aotSummaries = [];\n this._templateOverrides = [];\n this._compiler = null!;\n this._moduleOverrides = [];\n this._componentOverrides = [];\n this._directiveOverrides = [];\n this._pipeOverrides = [];\n\n this._isRoot = true;\n this._rootProviderOverrides = [];\n\n this._moduleFactory = null;\n this._pendingModuleFactory = null;\n this._compilerOptions = [];\n this._providers = [];\n this._declarations = [];\n this._imports = [];\n this._schemas = [];\n\n // We have to chain a couple of try/finally blocks, because each step can\n // throw errors and we don't want it to interrupt the next step and we also\n // want an error to be thrown at the end.\n try {\n this.destroyActiveFixtures();\n } finally {\n try {\n if (this.shouldTearDownTestingModule()) {\n this.tearDownTestingModule();\n }\n } finally {\n this._moduleRef = null;\n this._instanceTeardownOptions = undefined;\n this._instantiated = false;\n }\n }\n }\n\n configureCompiler(config: {providers?: any[], useJit?: boolean}): void {\n this._assertNotInstantiated('TestBed.configureCompiler', 'configure the compiler');\n this._compilerOptions.push(config);\n }\n\n configureTestingModule(moduleDef: TestModuleMetadata): void {\n this._assertNotInstantiated('TestBed.configureTestingModule', 'configure the test module');\n if (moduleDef.providers) {\n this._providers.push(...moduleDef.providers);\n }\n if (moduleDef.declarations) {\n this._declarations.push(...moduleDef.declarations);\n }\n if (moduleDef.imports) {\n this._imports.push(...moduleDef.imports);\n }\n if (moduleDef.schemas) {\n this._schemas.push(...moduleDef.schemas);\n }\n if (moduleDef.aotSummaries) {\n this._aotSummaries.push(moduleDef.aotSummaries);\n }\n // Always re-assign the teardown options, even if they're undefined.\n // This ensures that we don't carry the options between tests.\n this._instanceTeardownOptions = moduleDef.teardown;\n }\n\n compileComponents(): Promise<any> {\n if (this._moduleFactory || this._instantiated) {\n return Promise.resolve(null);\n }\n\n const moduleType = this._createCompilerAndModule();\n this._pendingModuleFactory = moduleType;\n return this._compiler.compileModuleAndAllComponentsAsync(moduleType).then(result => {\n // If the module mismatches by the time the promise resolves, it means that the module has\n // already been destroyed and a new compilation has started. If that's the case, avoid\n // overwriting the module factory, because it can cause downstream errors.\n if (this._pendingModuleFactory === moduleType) {\n this._moduleFactory = result.ngModuleFactory;\n this._pendingModuleFactory = null;\n }\n });\n }\n\n private _initIfNeeded(): void {\n if (this._instantiated) {\n return;\n }\n if (!this._moduleFactory) {\n try {\n const moduleType = this._createCompilerAndModule();\n this._moduleFactory =\n this._compiler.compileModuleAndAllComponentsSync(moduleType).ngModuleFactory;\n } catch (e) {\n const errorCompType = this._compiler.getComponentFromError(e);\n if (errorCompType) {\n throw new Error(\n `This test module uses the component ${\n stringify(\n errorCompType)} which is using a \"templateUrl\" or \"styleUrls\", but they were never compiled. ` +\n `Please call \"TestBed.compileComponents\" before your test.`);\n } else {\n throw e;\n }\n }\n }\n for (const {component, templateOf} of this._templateOverrides) {\n const compFactory = this._compiler.getComponentFactory(templateOf);\n overrideComponentView(component, compFactory);\n }\n\n const ngZone =\n new NgZone({enableLongStackTrace: true, shouldCoalesceEventChangeDetection: false});\n const providers: StaticProvider[] = [{provide: NgZone, useValue: ngZone}];\n const ngZoneInjector = Injector.create({\n providers: providers,\n parent: this.platform.injector,\n name: this._moduleFactory.moduleType.name\n });\n this._moduleRef = this._moduleFactory.create(ngZoneInjector);\n // ApplicationInitStatus.runInitializers() is marked @internal to core. So casting to any\n // before accessing it.\n try {\n (this._moduleRef.injector.get(ApplicationInitStatus) as any).runInitializers();\n } finally {\n this._instantiated = true;\n }\n }\n\n private _createCompilerAndModule(): Type<any> {\n const providers = this._providers.concat([{provide: TestBed, useValue: this}]);\n const declarations =\n [...this._declarations, ...this._templateOverrides.map(entry => entry.templateOf)];\n\n const rootScopeImports = [];\n const rootProviderOverrides = this._rootProviderOverrides;\n if (this._isRoot) {\n @NgModule({\n providers: [\n ...rootProviderOverrides,\n ],\n jit: true,\n })\n class RootScopeModule {\n }\n rootScopeImports.push(RootScopeModule);\n }\n providers.push({provide: INJECTOR_SCOPE, useValue: this._isRoot ? 'root' : null});\n\n const imports = [rootScopeImports, this.ngModule, this._imports];\n const schemas = this._schemas;\n\n @NgModule({providers, declarations, imports, schemas, jit: true})\n class DynamicTestModule {\n }\n\n const compilerFactory = this.platform.injector.get(TestingCompilerFactory);\n this._compiler = compilerFactory.createTestingCompiler(this._compilerOptions);\n for (const summary of [this._testEnvAotSummaries, ...this._aotSummaries]) {\n this._compiler.loadAotSummaries(summary);\n }\n this._moduleOverrides.forEach((entry) => this._compiler.overrideModule(entry[0], entry[1]));\n this._componentOverrides.forEach(\n (entry) => this._compiler.overrideComponent(entry[0], entry[1]));\n this._directiveOverrides.forEach(\n (entry) => this._compiler.overrideDirective(entry[0], entry[1]));\n this._pipeOverrides.forEach((entry) => this._compiler.overridePipe(entry[0], entry[1]));\n return DynamicTestModule;\n }\n\n private _assertNotInstantiated(methodName: string, methodDescription: string) {\n if (this._instantiated) {\n throw new Error(\n `Cannot ${methodDescription} when the test module has already been instantiated. ` +\n `Make sure you are not using \\`inject\\` before \\`${methodName}\\`.`);\n }\n }\n\n inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T|null;\n inject<T>(token: ProviderToken<T>, notFoundValue?: T|null, flags?: InjectFlags): T|null {\n this._initIfNeeded();\n if (token as unknown === TestBed) {\n return this as any;\n }\n // Tests can inject things from the ng module and from the compiler,\n // but the ng module can't inject things from the compiler and vice versa.\n const UNDEFINED = {};\n const result = this._moduleRef!.injector.get(token, UNDEFINED, flags);\n return result === UNDEFINED ? this._compiler.injector.get(token, notFoundValue, flags) as any :\n result;\n }\n\n /** @deprecated from v9.0.0 use TestBed.inject */\n get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue?: any): any;\n /** @deprecated from v9.0.0 use TestBed.inject */\n get(token: any, notFoundValue: any = Injector.THROW_IF_NOT_FOUND,\n flags: InjectFlags = InjectFlags.Default): any {\n return this.inject(token, notFoundValue, flags);\n }\n\n execute(tokens: any[], fn: Function, context?: any): any {\n this._initIfNeeded();\n const params = tokens.map(t => this.inject(t));\n return fn.apply(context, params);\n }\n\n overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void {\n this._assertNotInstantiated('overrideModule', 'override module metadata');\n this._moduleOverrides.push([ngModule, override]);\n }\n\n overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void {\n this._assertNotInstantiated('overrideComponent', 'override component metadata');\n this._componentOverrides.push([component, override]);\n }\n\n overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void {\n this._assertNotInstantiated('overrideDirective', 'override directive metadata');\n this._directiveOverrides.push([directive, override]);\n }\n\n overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void {\n this._assertNotInstantiated('overridePipe', 'override pipe metadata');\n this._pipeOverrides.push([pipe, override]);\n }\n\n /**\n * Overwrites all providers for the given token with the given provider definition.\n */\n overrideProvider(token: any, provider: {\n useFactory: Function,\n deps: any[],\n }): void;\n overrideProvider(token: any, provider: {useValue: any;}): void;\n overrideProvider(token: any, provider: {useFactory?: Function, useValue?: any, deps?: any[]}):\n void {\n this._assertNotInstantiated('overrideProvider', 'override provider');\n this.overrideProviderImpl(token, provider);\n }\n\n private overrideProviderImpl(\n token: any, provider: {\n useFactory?: Function,\n useValue?: any,\n deps?: any[],\n },\n deprecated = false): void {\n let def: ɵɵInjectableDeclaration<any>|null = null;\n if (typeof token !== 'string' && (def = getInjectableDef(token)) && def.providedIn === 'root') {\n if (provider.useFactory) {\n this._rootProviderOverrides.push(\n {provide: token, useFactory: provider.useFactory, deps: provider.deps || []});\n } else {\n this._rootProviderOverrides.push({provide: token, useValue: provider.useValue});\n }\n }\n let flags: NodeFlags = 0;\n let value: any;\n if (provider.useFactory) {\n flags |= NodeFlags.TypeFactoryProvider;\n value = provider.useFactory;\n } else {\n flags |= NodeFlags.TypeValueProvider;\n value = provider.useValue;\n }\n const deps = (provider.deps || []).map((dep) => {\n let depFlags: DepFlags = DepFlags.None;\n let depToken: any;\n if (Array.isArray(dep)) {\n dep.forEach((entry: any) => {\n if (entry instanceof Optional) {\n depFlags |= DepFlags.Optional;\n } else if (entry instanceof SkipSelf) {\n depFlags |= DepFlags.SkipSelf;\n } else {\n depToken = entry;\n }\n });\n } else {\n depToken = dep;\n }\n return [depFlags, depToken];\n });\n overrideProvider({token, flags, deps, value, deprecatedBehavior: deprecated});\n }\n\n overrideTemplateUsingTestingModule(component: Type<any>, template: string) {\n this._assertNotInstantiated('overrideTemplateUsingTestingModule', 'override template');\n\n @Component({selector: 'empty', template, jit: true})\n class OverrideComponent {\n }\n\n this._templateOverrides.push({component, templateOf: OverrideComponent});\n }\n\n createComponent<T>(component: Type<T>): ComponentFixture<T> {\n this._initIfNeeded();\n const componentFactory = this._compiler.getComponentFactory(component);\n\n if (!componentFactory) {\n throw new Error(`Cannot create the component ${\n stringify(component)} as it was not imported into the testing module!`);\n }\n\n // TODO: Don't cast as `InjectionToken<boolean>`, declared type is boolean[]\n const noNgZone = this.inject(ComponentFixtureNoNgZone as InjectionToken<boolean>, false);\n // TODO: Don't cast as `InjectionToken<boolean>`, declared type is boolean[]\n const autoDetect: boolean =\n this.inject(ComponentFixtureAutoDetect as InjectionToken<boolean>, false);\n const ngZone: NgZone|null = noNgZone ? null : this.inject(NgZone, null);\n const testComponentRenderer: TestComponentRenderer = this.inject(TestComponentRenderer);\n const rootElId = `root${_nextRootElementId++}`;\n testComponentRenderer.insertRootElement(rootElId);\n\n const initComponent = () => {\n const componentRef =\n componentFactory.create(Injector.NULL, [], `#${rootElId}`, this._moduleRef!);\n return new ComponentFixture<T>(componentRef, ngZone, autoDetect);\n };\n\n const fixture = !ngZone ? initComponent() : ngZone.run(initComponent);\n this._activeFixtures.push(fixture);\n return fixture;\n }\n\n private destroyActiveFixtures(): void {\n let errorCount = 0;\n this._activeFixtures.forEach((fixture) => {\n try {\n fixture.destroy();\n } catch (e) {\n errorCount++;\n console.error('Error during cleanup of component', {\n component: fixture.componentInstance,\n stacktrace: e,\n });\n }\n });\n this._activeFixtures = [];\n\n if (errorCount > 0 && this.shouldRethrowTeardownErrors()) {\n throw Error(\n `${errorCount} ${(errorCount === 1 ? 'component' : 'components')} ` +\n `threw errors during cleanup`);\n }\n }\n\n shouldRethrowTeardownErrors() {\n const instanceOptions = this._instanceTeardownOptions;\n const environmentOptions = TestBedViewEngine._environmentTeardownOptions;\n\n // If the new teardown behavior hasn't been configured, preserve the old behavior.\n if (!instanceOptions && !environmentOptions) {\n return TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT;\n }\n\n // Otherwise use the configured behavior or default to rethrowing.\n return instanceOptions?.rethrowErrors ?? environmentOptions?.rethrowErrors ??\n this.shouldTearDownTestingModule();\n }\n\n shouldTearDownTestingModule(): boolean {\n return this._instanceTeardownOptions?.destroyAfterEach ??\n TestBedViewEngine._environmentTeardownOptions?.destroyAfterEach ??\n TEARDOWN_TESTING_MODULE_ON_DESTROY_DEFAULT;\n }\n\n tearDownTestingModule() {\n // If the module ref has already been destroyed, we won't be able to get a test renderer.\n if (this._moduleRef === null) {\n return;\n }\n\n // Resolve the renderer ahead of time, because we want to remove the root elements as the very\n // last step, but the injector will be destroyed as a part of the module ref destruction.\n const testRenderer = this.inject(TestComponentRenderer);\n try {\n this._moduleRef.destroy();\n } catch (e) {\n if (this._instanceTeardownOptions?.rethrowErrors ??\n TestBedViewEngine._environmentTeardownOptions?.rethrowErrors ?? true) {\n throw e;\n } else {\n console.error('Error during cleanup of a testing module', {\n component: this._moduleRef.instance,\n stacktrace: e,\n });\n }\n } finally {\n testRenderer?.removeAllRootElements?.();\n }\n }\n}\n\n/**\n * @description\n * Configures and initializes environment for unit testing and provides methods for\n * creating components and services in unit tests.\n *\n * `TestBed` is the primary api for writing unit tests for Angular applications and libraries.\n *\n * Note: Use `TestBed` in tests. It will be set to either `TestBedViewEngine` or `TestBedRender3`\n * according to the compiler used.\n *\n * @publicApi\n */\nexport const TestBed: TestBedStatic =\n ivyEnabled ? TestBedRender3 as any as TestBedStatic : TestBedViewEngine as any as TestBedStatic;\n\n/**\n * Returns a singleton of the applicable `TestBed`.\n *\n * It will be either an instance of `TestBedViewEngine` or `TestBedRender3`.\n *\n * @publicApi\n */\nexport const getTestBed: () => TestBed = ivyEnabled ? _getTestBedRender3 : _getTestBedViewEngine;\n\nlet testBed: TestBedViewEngine;\n\nfunction _getTestBedViewEngine(): TestBedViewEngine {\n return testBed = testBed || new TestBedViewEngine();\n}\n\n/**\n * Allows injecting dependencies in `beforeEach()` and `it()`.\n *\n * Example:\n *\n * ```\n * beforeEach(inject([Dependency, AClass], (dep, object) => {\n * // some code that uses `dep` and `object`\n * // ...\n * }));\n *\n * it('...', inject([AClass], (object) => {\n * object.doSomething();\n * expect(...);\n * })\n * ```\n *\n * @publicApi\n */\nexport function inject(tokens: any[], fn: Function): () => any {\n const testBed = getTestBed();\n // Not using an arrow function to preserve context passed from call site\n return function(this: unknown) {\n return testBed.execute(tokens, fn, this);\n };\n}\n\n/**\n * @publicApi\n */\nexport class InjectSetupWrapper {\n constructor(private _moduleDef: () => TestModuleMetadata) {}\n\n private _addModule() {\n const moduleDef = this._moduleDef();\n if (moduleDef) {\n getTestBed().configureTestingModule(moduleDef);\n }\n }\n\n inject(tokens: any[], fn: Function): () => any {\n const self = this;\n // Not using an arrow function to preserve context passed from call site\n return function(this: unknown) {\n self._addModule();\n return inject(tokens, fn).call(this);\n };\n }\n}\n\n/**\n * @publicApi\n */\nexport function withModule(moduleDef: TestModuleMetadata): InjectSetupWrapper;\nexport function withModule(moduleDef: TestModuleMetadata, fn: Function): () => any;\nexport function withModule(moduleDef: TestModuleMetadata, fn?: Function|null): (() => any)|\n InjectSetupWrapper {\n if (fn) {\n // Not using an arrow function to preserve context passed from call site\n return function(this: unknown) {\n const testBed = getTestBed();\n if (moduleDef) {\n testBed.configureTestingModule(moduleDef);\n }\n return fn.apply(this);\n };\n }\n return new InjectSetupWrapper(() => moduleDef);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Public Test Library for unit testing Angular applications. Assumes that you are running\n * with Jasmine, Mocha, or a similar framework which exports a beforeEach function and\n * allows tests to be asynchronous by either returning a promise or using a 'done' parameter.\n */\n\nimport {resetFakeAsyncZone} from './fake_async';\nimport {TestBed, TestBedViewEngine as TestBedInternal} from './test_bed';\n\ndeclare var global: any;\n\nconst _global = <any>(typeof window === 'undefined' ? global : window);\n\n// Reset the test providers and the fake async zone before each test.\nif (_global.beforeEach) {\n _global.beforeEach(getCleanupHook(false));\n}\n\n// We provide both a `beforeEach` and `afterEach`, because the updated behavior for\n// tearing down the module is supposed to run after the test so that we can associate\n// teardown errors with the correct test.\nif (_global.afterEach) {\n _global.afterEach(getCleanupHook(true));\n}\n\nfunction getCleanupHook(expectedTeardownValue: boolean) {\n return () => {\n if ((TestBed as unknown as TestBedInternal).shouldTearDownTestingModule() ===\n expectedTeardownValue) {\n TestBed.resetTestingModule();\n resetFakeAsyncZone();\n }\n };\n}\n\n/**\n * This API should be removed. But doing so seems to break `google3` and so it requires a bit of\n * investigation.\n *\n * A work around is to mark it as `@codeGenApi` for now and investigate later.\n *\n * @codeGenApi\n */\n// TODO(iminar): Remove this code in a safe way.\nexport const __core_private_testing_placeholder__ = '';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Type used for modifications to metadata\n *\n * @publicApi\n */\nexport type MetadataOverride<T> = {\n add?: Partial<T>,\n remove?: Partial<T>,\n set?: Partial<T>\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport {TestingCompiler as ɵTestingCompiler, TestingCompilerFactory as ɵTestingCompilerFactory} from './test_compiler';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the core/testing package.\n */\n\nexport * from './async';\nexport * from './component_fixture';\nexport * from './fake_async';\nexport {TestBed, getTestBed, inject, InjectSetupWrapper, withModule} from './test_bed';\nexport {TestComponentRenderer, ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, TestModuleMetadata, TestEnvironmentOptions, ModuleTeardownOptions, TestBedStatic} from './test_bed_common';\nexport * from './test_hooks';\nexport * from './metadata_override';\nexport {MetadataOverrider as ɵMetadataOverrider} from './metadata_overrider';\nexport * from './private_export_testing';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/// <reference types=\"jasmine\" />\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/testing';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["stringify","ReflectionCapabilities","getInjectableDef","NG_COMP_DEF","NgModuleRef","DEFAULT_LOCALE_ID","setLocaleId","ComponentFactory","compileComponent","NG_DIR_DEF","compileDirective","NG_PIPE_DEF","compilePipe","NG_MOD_DEF","transitiveScopesFor","patchComponentDefWithScope","NG_INJ_DEF","compileNgModuleDefs","R3NgModuleFactory","_nextRootElementId","resetCompiledComponents","flushModuleScopingQueueAsMuchAsPossible","testBed","clearOverrides","overrideComponentView","INJECTOR_SCOPE","overrideProvider","ivyEnabled"],"mappings":"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"}
\No newline at end of file