Previous commit change the logic to not rely on the `TViewNode` this change removes it entirely. PR Close #38707
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google LLC All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| import {addToViewTree, createLContainer, createLView, createTNode, createTView, getOrCreateTNode, refreshView, renderView} from '../../../src/render3/instructions/shared';
 | |
| import {ComponentTemplate, DirectiveDefList} from '../../../src/render3/interfaces/definition';
 | |
| import {TAttributes, TElementNode, TNodeType} from '../../../src/render3/interfaces/node';
 | |
| import {domRendererFactory3, RendererFactory3} from '../../../src/render3/interfaces/renderer';
 | |
| import {LView, LViewFlags, TVIEW, TView, TViewType} from '../../../src/render3/interfaces/view';
 | |
| import {insertView} from '../../../src/render3/node_manipulation';
 | |
| 
 | |
| import {MicroBenchmarkRendererFactory} from './noop_renderer';
 | |
| 
 | |
| const isBrowser = typeof process === 'undefined';
 | |
| const rendererFactory: RendererFactory3 =
 | |
|     isBrowser ? domRendererFactory3 : new MicroBenchmarkRendererFactory;
 | |
| const renderer = rendererFactory.createRenderer(null, null);
 | |
| 
 | |
| export function createAndRenderLView(
 | |
|     parentLView: LView, tView: TView, hostTNode: TElementNode): LView {
 | |
|   const embeddedLView = createLView(
 | |
|       parentLView, tView, {}, LViewFlags.CheckAlways, null, hostTNode, rendererFactory, renderer,
 | |
|       null, null);
 | |
|   renderView(tView, embeddedLView, null);
 | |
|   return embeddedLView;
 | |
| }
 | |
| 
 | |
| export function setupRootViewWithEmbeddedViews(
 | |
|     templateFn: ComponentTemplate<any>|null, decls: number, vars: number, noOfViews: number,
 | |
|     embeddedViewContext: any = {}, consts: TAttributes[]|null = null,
 | |
|     directiveRegistry: DirectiveDefList|null = null): LView {
 | |
|   return setupTestHarness(
 | |
|              templateFn, decls, vars, noOfViews, embeddedViewContext, consts, directiveRegistry)
 | |
|       .hostLView;
 | |
| }
 | |
| 
 | |
| export interface TestHarness {
 | |
|   hostLView: LView;
 | |
|   hostTView: TView;
 | |
|   embeddedTView: TView;
 | |
|   createEmbeddedLView(): LView;
 | |
|   detectChanges(): void;
 | |
| }
 | |
| 
 | |
| export function setupTestHarness(
 | |
|     templateFn: ComponentTemplate<any>|null, decls: number, vars: number, noOfViews: number,
 | |
|     embeddedViewContext: any = {}, consts: TAttributes[]|null = null,
 | |
|     directiveRegistry: DirectiveDefList|null = null): TestHarness {
 | |
|   // Create a root view with a container
 | |
|   const hostTView = createTView(TViewType.Root, null, null, 1, 0, null, null, null, null, consts);
 | |
|   const tContainerNode = getOrCreateTNode(hostTView, 0, TNodeType.Container, null, null);
 | |
|   const hostNode = renderer.createElement('div');
 | |
|   const hostLView = createLView(
 | |
|       null, hostTView, {}, LViewFlags.CheckAlways | LViewFlags.IsRoot, hostNode, null,
 | |
|       rendererFactory, renderer, null, null);
 | |
|   const mockRCommentNode = renderer.createComment('');
 | |
|   const lContainer =
 | |
|       createLContainer(mockRCommentNode, hostLView, mockRCommentNode, tContainerNode);
 | |
|   addToViewTree(hostLView, lContainer);
 | |
| 
 | |
| 
 | |
|   // create test embedded views
 | |
|   const embeddedTView = createTView(
 | |
|       TViewType.Embedded, null, templateFn, decls, vars, directiveRegistry, null, null, null,
 | |
|       consts);
 | |
|   const viewTNode = createTNode(hostTView, null, TNodeType.Element, -1, null, null);
 | |
| 
 | |
|   function createEmbeddedLView(): LView {
 | |
|     const embeddedLView = createLView(
 | |
|         hostLView, embeddedTView, embeddedViewContext, LViewFlags.CheckAlways, null, viewTNode,
 | |
|         rendererFactory, renderer, null, null);
 | |
|     renderView(embeddedTView, embeddedLView, embeddedViewContext);
 | |
|     return embeddedLView;
 | |
|   }
 | |
| 
 | |
|   function detectChanges(): void {
 | |
|     refreshView(hostTView, hostLView, hostTView.template, embeddedViewContext);
 | |
|   }
 | |
| 
 | |
|   // create embedded views and add them to the container
 | |
|   for (let i = 0; i < noOfViews; i++) {
 | |
|     const lView = createEmbeddedLView();
 | |
|     insertView(lView[TVIEW], lView, lContainer, i);
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     hostLView: hostLView,
 | |
|     hostTView: hostTView,
 | |
|     embeddedTView: embeddedTView,
 | |
|     createEmbeddedLView: createEmbeddedLView,
 | |
|     detectChanges: detectChanges,
 | |
|   };
 | |
| }
 |