test(ivy): add testing utility to replace loadDirective (#26316)
PR Close #26316
This commit is contained in:
parent
456f23f76a
commit
b0879046b7
|
@ -99,7 +99,7 @@ export function getContext(target: any): LContext|null {
|
||||||
if (nodeIndex == -1) {
|
if (nodeIndex == -1) {
|
||||||
throw new Error('The provided directive was not found in the application');
|
throw new Error('The provided directive was not found in the application');
|
||||||
}
|
}
|
||||||
directives = discoverDirectives(nodeIndex, lViewData);
|
directives = discoverDirectives(nodeIndex, lViewData, false);
|
||||||
} else {
|
} else {
|
||||||
nodeIndex = findViaNativeElement(lViewData, target as RElement);
|
nodeIndex = findViaNativeElement(lViewData, target as RElement);
|
||||||
if (nodeIndex == -1) {
|
if (nodeIndex == -1) {
|
||||||
|
@ -344,15 +344,18 @@ function getLNodeFromViewData(lViewData: LViewData, lElementIndex: number): LEle
|
||||||
* Returns a list of directives extracted from the given view. Does not contain
|
* Returns a list of directives extracted from the given view. Does not contain
|
||||||
* the component.
|
* the component.
|
||||||
*
|
*
|
||||||
|
* @param nodeIndex Index of node to search
|
||||||
* @param lViewData The target view data
|
* @param lViewData The target view data
|
||||||
|
* @param includeComponents Whether or not to include components in returned directives
|
||||||
*/
|
*/
|
||||||
export function discoverDirectives(nodeIndex: number, lViewData: LViewData): any[]|null {
|
export function discoverDirectives(
|
||||||
|
nodeIndex: number, lViewData: LViewData, includeComponents: boolean): any[]|null {
|
||||||
const directivesAcrossView = lViewData[DIRECTIVES];
|
const directivesAcrossView = lViewData[DIRECTIVES];
|
||||||
if (directivesAcrossView != null) {
|
if (directivesAcrossView != null) {
|
||||||
const tNode = lViewData[TVIEW].data[nodeIndex] as TNode;
|
const tNode = lViewData[TVIEW].data[nodeIndex] as TNode;
|
||||||
let directiveStartIndex = getDirectiveStartIndex(tNode);
|
let directiveStartIndex = getDirectiveStartIndex(tNode);
|
||||||
const directiveEndIndex = getDirectiveEndIndex(tNode, directiveStartIndex);
|
const directiveEndIndex = getDirectiveEndIndex(tNode, directiveStartIndex);
|
||||||
if (tNode.flags & TNodeFlags.isComponent) directiveStartIndex++;
|
if (!includeComponents && tNode.flags & TNodeFlags.isComponent) directiveStartIndex++;
|
||||||
return directivesAcrossView.slice(directiveStartIndex, directiveEndIndex);
|
return directivesAcrossView.slice(directiveStartIndex, directiveEndIndex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -104,7 +104,7 @@ export function getDirectives(target: {}): Array<{}> {
|
||||||
const context = loadContext(target) !;
|
const context = loadContext(target) !;
|
||||||
|
|
||||||
if (context.directives === undefined) {
|
if (context.directives === undefined) {
|
||||||
context.directives = discoverDirectives(context.nodeIndex, context.lViewData);
|
context.directives = discoverDirectives(context.nodeIndex, context.lViewData, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return context.directives || [];
|
return context.directives || [];
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, Directive, HostBinding, HostListener, Injectable, Input, NgModule, OnDestroy, Optional, Pipe, PipeTransform, QueryList, SimpleChanges, TemplateRef, ViewChild, ViewChildren, ViewContainerRef} from '../../../src/core';
|
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, Directive, HostBinding, HostListener, Injectable, Input, NgModule, OnDestroy, Optional, Pipe, PipeTransform, QueryList, SimpleChanges, TemplateRef, ViewChild, ViewChildren, ViewContainerRef} from '../../../src/core';
|
||||||
import * as $r3$ from '../../../src/core_render3_private_export';
|
import * as $r3$ from '../../../src/core_render3_private_export';
|
||||||
import {ComponentDef} from '../../../src/render3/interfaces/definition';
|
import {ComponentDef} from '../../../src/render3/interfaces/definition';
|
||||||
import {renderComponent, toHtml} from '../render_util';
|
import {getDirectiveOnNode, renderComponent, toHtml} from '../render_util';
|
||||||
|
|
||||||
|
|
||||||
/// See: `normative.md`
|
/// See: `normative.md`
|
||||||
|
@ -161,7 +161,7 @@ describe('queries', () => {
|
||||||
template: function MyApp_Template(rf: $RenderFlags$, ctx: $MyApp$) {
|
template: function MyApp_Template(rf: $RenderFlags$, ctx: $MyApp$) {
|
||||||
if (rf & 1) {
|
if (rf & 1) {
|
||||||
$r3$.ɵelementStart(0, 'content-query-component');
|
$r3$.ɵelementStart(0, 'content-query-component');
|
||||||
contentQueryComp = $r3$.ɵloadDirective<ContentQueryComponent>(0);
|
contentQueryComp = getDirectiveOnNode(0);
|
||||||
$r3$.ɵelement(1, 'div', $e2_attrs$);
|
$r3$.ɵelement(1, 'div', $e2_attrs$);
|
||||||
$r3$.ɵelementEnd();
|
$r3$.ɵelementEnd();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
import {SelectorFlags} from '@angular/core/src/render3/interfaces/projection';
|
import {SelectorFlags} from '@angular/core/src/render3/interfaces/projection';
|
||||||
|
|
||||||
import {AttributeMarker, detectChanges} from '../../src/render3/index';
|
import {AttributeMarker, detectChanges} from '../../src/render3/index';
|
||||||
import {bind, container, containerRefreshEnd, containerRefreshStart, element, elementContainerEnd, elementContainerStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, loadDirective, projection, projectionDef, template, text} from '../../src/render3/instructions';
|
import {bind, container, containerRefreshEnd, containerRefreshStart, element, elementContainerEnd, elementContainerStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, projection, projectionDef, template, text} from '../../src/render3/instructions';
|
||||||
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
||||||
|
|
||||||
import {NgIf} from './common_with_def';
|
import {NgIf} from './common_with_def';
|
||||||
import {ComponentFixture, createComponent, renderComponent, toHtml} from './render_util';
|
import {ComponentFixture, createComponent, getDirectiveOnNode, renderComponent, toHtml} from './render_util';
|
||||||
|
|
||||||
describe('content projection', () => {
|
describe('content projection', () => {
|
||||||
it('should project content', () => {
|
it('should project content', () => {
|
||||||
|
@ -452,7 +452,7 @@ describe('content projection', () => {
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
childCmptInstance = loadDirective(0);
|
childCmptInstance = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 4, 0, [Child]);
|
}, 4, 0, [Child]);
|
||||||
|
|
||||||
|
@ -504,7 +504,7 @@ describe('content projection', () => {
|
||||||
element(0, 'child');
|
element(0, 'child');
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
childCmptInstance = loadDirective(0);
|
childCmptInstance = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 1, 0, [Child]);
|
}, 1, 0, [Child]);
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ describe('content projection', () => {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(0, 'child');
|
elementStart(0, 'child');
|
||||||
{
|
{
|
||||||
childCmptInstance = loadDirective(0);
|
childCmptInstance = getDirectiveOnNode(0);
|
||||||
text(1, 'content');
|
text(1, 'content');
|
||||||
}
|
}
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
@ -730,7 +730,7 @@ describe('content projection', () => {
|
||||||
}
|
}
|
||||||
elementEnd();
|
elementEnd();
|
||||||
// testing
|
// testing
|
||||||
parent = loadDirective(0);
|
parent = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 3, 0, [Parent]);
|
}, 3, 0, [Parent]);
|
||||||
|
|
||||||
|
@ -786,7 +786,7 @@ describe('content projection', () => {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(0, 'child');
|
elementStart(0, 'child');
|
||||||
{
|
{
|
||||||
childCmptInstance = loadDirective(0);
|
childCmptInstance = getDirectiveOnNode(0);
|
||||||
text(1, 'content');
|
text(1, 'content');
|
||||||
}
|
}
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
@ -848,7 +848,7 @@ describe('content projection', () => {
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
child = loadDirective(0);
|
child = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 4, 0, [Child]);
|
}, 4, 0, [Child]);
|
||||||
|
|
||||||
|
@ -913,7 +913,7 @@ describe('content projection', () => {
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
child = loadDirective(0);
|
child = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 4, 0, [Child]);
|
}, 4, 0, [Child]);
|
||||||
|
|
||||||
|
@ -1012,7 +1012,7 @@ describe('content projection', () => {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(0, 'child');
|
elementStart(0, 'child');
|
||||||
{
|
{
|
||||||
childCmptInstance = loadDirective(0);
|
childCmptInstance = getDirectiveOnNode(0);
|
||||||
text(1, 'content');
|
text(1, 'content');
|
||||||
}
|
}
|
||||||
elementEnd();
|
elementEnd();
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {LViewFlags} from '../../src/render3/interfaces/view';
|
||||||
import {ViewRef} from '../../src/render3/view_ref';
|
import {ViewRef} from '../../src/render3/view_ref';
|
||||||
|
|
||||||
import {getRendererFactory2} from './imported_renderer2';
|
import {getRendererFactory2} from './imported_renderer2';
|
||||||
import {ComponentFixture, createComponent, createDirective, renderComponent, toHtml} from './render_util';
|
import {ComponentFixture, createComponent, createDirective, getDirectiveOnNode, renderComponent, toHtml} from './render_util';
|
||||||
import {NgIf} from './common_with_def';
|
import {NgIf} from './common_with_def';
|
||||||
import {TNODE} from '../../src/render3/interfaces/injector';
|
import {TNODE} from '../../src/render3/interfaces/injector';
|
||||||
|
|
||||||
|
@ -1610,7 +1610,7 @@ describe('di', () => {
|
||||||
['myDirective', 'initial', 'exist', 'existValue', 'other', 'ignore']);
|
['myDirective', 'initial', 'exist', 'existValue', 'other', 'ignore']);
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
myDirectiveInstance = loadDirective(0);
|
myDirectiveInstance = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 1, 0, [MyDirective]);
|
}, 1, 0, [MyDirective]);
|
||||||
|
|
||||||
|
@ -1631,7 +1631,7 @@ describe('di', () => {
|
||||||
elementContainerEnd();
|
elementContainerEnd();
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
myDirectiveInstance = loadDirective(0);
|
myDirectiveInstance = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}, 1, 0, [MyDirective]);
|
}, 1, 0, [MyDirective]);
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,12 @@ import {Directive, OnChanges, OnDestroy, Pipe, PipeTransform} from '@angular/cor
|
||||||
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
||||||
|
|
||||||
import {defineDirective, definePipe} from '../../src/render3/definition';
|
import {defineDirective, definePipe} from '../../src/render3/definition';
|
||||||
import {bind, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, interpolation1, load, loadDirective, text, textBinding} from '../../src/render3/instructions';
|
import {bind, container, containerRefreshEnd, containerRefreshStart, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, interpolation1, load, text, textBinding} from '../../src/render3/instructions';
|
||||||
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
||||||
import {pipe, pipeBind1, pipeBind3, pipeBind4, pipeBindV} from '../../src/render3/pipe';
|
import {pipe, pipeBind1, pipeBind3, pipeBind4, pipeBindV} from '../../src/render3/pipe';
|
||||||
|
|
||||||
import {RenderLog, getRendererFactory2, patchLoggingRenderer2} from './imported_renderer2';
|
import {RenderLog, getRendererFactory2, patchLoggingRenderer2} from './imported_renderer2';
|
||||||
import {ComponentFixture, createComponent, renderToHtml} from './render_util';
|
import {ComponentFixture, createComponent, getDirectiveOnNode, renderToHtml} from './render_util';
|
||||||
|
|
||||||
|
|
||||||
let log: string[] = [];
|
let log: string[] = [];
|
||||||
|
@ -100,7 +100,7 @@ describe('pipe', () => {
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
elementProperty(0, 'elprop', bind(pipeBind1(1, 1, ctx)));
|
elementProperty(0, 'elprop', bind(pipeBind1(1, 1, ctx)));
|
||||||
directive = loadDirective(0);
|
directive = getDirectiveOnNode(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
renderToHtml(Template, 'a', 2, 3, [MyDir], [DoublePipe]);
|
renderToHtml(Template, 'a', 2, 3, [MyDir], [DoublePipe]);
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {AttributeMarker, defineComponent, template} from '../../src/render3/index';
|
import {AttributeMarker, defineComponent, template} from '../../src/render3/index';
|
||||||
import {bind, container, containerRefreshEnd, containerRefreshStart, element, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, loadDirective, nextContext} from '../../src/render3/instructions';
|
import {bind, container, containerRefreshEnd, containerRefreshStart, element, elementEnd, elementProperty, elementStart, embeddedViewEnd, embeddedViewStart, nextContext} from '../../src/render3/instructions';
|
||||||
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
import {RenderFlags} from '../../src/render3/interfaces/definition';
|
||||||
import {pureFunction1, pureFunction2, pureFunction3, pureFunction4, pureFunction5, pureFunction6, pureFunction7, pureFunction8, pureFunctionV} from '../../src/render3/pure_function';
|
import {pureFunction1, pureFunction2, pureFunction3, pureFunction4, pureFunction5, pureFunction6, pureFunction7, pureFunction8, pureFunctionV} from '../../src/render3/pure_function';
|
||||||
import {ComponentFixture, createComponent, renderToHtml} from '../../test/render3/render_util';
|
import {ComponentFixture, createComponent, getDirectiveOnNode, renderToHtml} from '../../test/render3/render_util';
|
||||||
import {NgIf} from './common_with_def';
|
import {NgIf} from './common_with_def';
|
||||||
|
|
||||||
describe('array literals', () => {
|
describe('array literals', () => {
|
||||||
|
@ -176,7 +176,7 @@ describe('array literals', () => {
|
||||||
template: function(rf: RenderFlags, ctx: any) {
|
template: function(rf: RenderFlags, ctx: any) {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(0, 'my-comp');
|
elementStart(0, 'my-comp');
|
||||||
myComps.push(loadDirective(0));
|
myComps.push(getDirectiveOnNode(0));
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
|
@ -275,22 +275,22 @@ describe('array literals', () => {
|
||||||
function Template(rf: RenderFlags, c: any) {
|
function Template(rf: RenderFlags, c: any) {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(0, 'my-comp');
|
elementStart(0, 'my-comp');
|
||||||
f3Comp = loadDirective(0);
|
f3Comp = getDirectiveOnNode(0);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(1, 'my-comp');
|
elementStart(1, 'my-comp');
|
||||||
f4Comp = loadDirective(1);
|
f4Comp = getDirectiveOnNode(1);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(2, 'my-comp');
|
elementStart(2, 'my-comp');
|
||||||
f5Comp = loadDirective(2);
|
f5Comp = getDirectiveOnNode(2);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(3, 'my-comp');
|
elementStart(3, 'my-comp');
|
||||||
f6Comp = loadDirective(3);
|
f6Comp = getDirectiveOnNode(3);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(4, 'my-comp');
|
elementStart(4, 'my-comp');
|
||||||
f7Comp = loadDirective(4);
|
f7Comp = getDirectiveOnNode(4);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
elementStart(5, 'my-comp');
|
elementStart(5, 'my-comp');
|
||||||
f8Comp = loadDirective(5);
|
f8Comp = getDirectiveOnNode(5);
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
|
@ -513,7 +513,7 @@ describe('object literals', () => {
|
||||||
let rf1 = embeddedViewStart(0, 1, 4);
|
let rf1 = embeddedViewStart(0, 1, 4);
|
||||||
if (rf1 & RenderFlags.Create) {
|
if (rf1 & RenderFlags.Create) {
|
||||||
elementStart(0, 'object-comp');
|
elementStart(0, 'object-comp');
|
||||||
objectComps.push(loadDirective(0));
|
objectComps.push(getDirectiveOnNode(0));
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
if (rf1 & RenderFlags.Update) {
|
if (rf1 & RenderFlags.Update) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ import {query, queryRefresh} from '../../src/render3/query';
|
||||||
import {templateRefExtractor} from '../../src/render3/view_engine_compatibility_prebound';
|
import {templateRefExtractor} from '../../src/render3/view_engine_compatibility_prebound';
|
||||||
|
|
||||||
import {NgForOf, NgIf, NgTemplateOutlet} from './common_with_def';
|
import {NgForOf, NgIf, NgTemplateOutlet} from './common_with_def';
|
||||||
import {ComponentFixture, TemplateFixture, createComponent, createDirective, renderComponent} from './render_util';
|
import {ComponentFixture, TemplateFixture, createComponent, createDirective, renderComponent, getDirectiveOnNode} from './render_util';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@ describe('query', () => {
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
child1 = loadDirective(0);
|
child1 = getDirectiveOnNode(2);
|
||||||
child2 = loadDirective(1);
|
child2 = getDirectiveOnNode(3);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
4, 0, [Child], [],
|
4, 0, [Child], [],
|
||||||
|
@ -151,7 +151,7 @@ describe('query', () => {
|
||||||
function(rf: RenderFlags, ctx: any) {
|
function(rf: RenderFlags, ctx: any) {
|
||||||
if (rf & RenderFlags.Create) {
|
if (rf & RenderFlags.Create) {
|
||||||
elementStart(1, 'div', ['child', '', 'otherChild', '']);
|
elementStart(1, 'div', ['child', '', 'otherChild', '']);
|
||||||
{ otherChildInstance = loadDirective(1); }
|
{ otherChildInstance = getDirectiveOnNode(1, 1); }
|
||||||
elementEnd();
|
elementEnd();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -684,7 +684,7 @@ describe('query', () => {
|
||||||
element(1, 'child', null, ['foo', '']);
|
element(1, 'child', null, ['foo', '']);
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
childInstance = loadDirective(0);
|
childInstance = getDirectiveOnNode(1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
3, 0, [Child], [],
|
3, 0, [Child], [],
|
||||||
|
@ -767,7 +767,7 @@ describe('query', () => {
|
||||||
element(1, 'div', ['child', ''], ['foo', 'child']);
|
element(1, 'div', ['child', ''], ['foo', 'child']);
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
childInstance = loadDirective(0);
|
childInstance = getDirectiveOnNode(1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
3, 0, [Child], [],
|
3, 0, [Child], [],
|
||||||
|
@ -806,8 +806,8 @@ describe('query', () => {
|
||||||
element(1, 'div', ['child1', '', 'child2', ''], ['foo', 'child1', 'bar', 'child2']);
|
element(1, 'div', ['child1', '', 'child2', ''], ['foo', 'child1', 'bar', 'child2']);
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
child1Instance = loadDirective(0);
|
child1Instance = getDirectiveOnNode(1, 0);
|
||||||
child2Instance = loadDirective(1);
|
child2Instance = getDirectiveOnNode(1, 1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
4, 0, [Child1, Child2], [],
|
4, 0, [Child1, Child2], [],
|
||||||
|
@ -846,7 +846,7 @@ describe('query', () => {
|
||||||
element(2, 'div', ['child', ''], ['foo', 'child', 'bar', 'child']);
|
element(2, 'div', ['child', ''], ['foo', 'child', 'bar', 'child']);
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
childInstance = loadDirective(0);
|
childInstance = getDirectiveOnNode(2);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
5, 0, [Child], [],
|
5, 0, [Child], [],
|
||||||
|
@ -928,7 +928,7 @@ describe('query', () => {
|
||||||
div = loadElement(1).native;
|
div = loadElement(1).native;
|
||||||
}
|
}
|
||||||
if (rf & RenderFlags.Update) {
|
if (rf & RenderFlags.Update) {
|
||||||
childInstance = loadDirective(0);
|
childInstance = getDirectiveOnNode(1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
4, 0, [Child], [],
|
4, 0, [Child], [],
|
||||||
|
|
|
@ -15,15 +15,16 @@ import {stringifyElement} from '@angular/platform-browser/testing/src/browser_ut
|
||||||
import {Injector} from '../../src/di/injector';
|
import {Injector} from '../../src/di/injector';
|
||||||
import {R3_CHANGE_DETECTOR_REF_FACTORY, R3_ELEMENT_REF_FACTORY, R3_TEMPLATE_REF_FACTORY, R3_VIEW_CONTAINER_REF_FACTORY} from '../../src/ivy_switch/runtime/ivy_switch_on';
|
import {R3_CHANGE_DETECTOR_REF_FACTORY, R3_ELEMENT_REF_FACTORY, R3_TEMPLATE_REF_FACTORY, R3_VIEW_CONTAINER_REF_FACTORY} from '../../src/ivy_switch/runtime/ivy_switch_on';
|
||||||
import {CreateComponentOptions} from '../../src/render3/component';
|
import {CreateComponentOptions} from '../../src/render3/component';
|
||||||
import {getContext, isComponentInstance} from '../../src/render3/context_discovery';
|
import {discoverDirectives, getContext, isComponentInstance} from '../../src/render3/context_discovery';
|
||||||
import {extractDirectiveDef, extractPipeDef} from '../../src/render3/definition';
|
import {extractDirectiveDef, extractPipeDef} from '../../src/render3/definition';
|
||||||
import {NG_ELEMENT_ID} from '../../src/render3/fields';
|
import {NG_ELEMENT_ID} from '../../src/render3/fields';
|
||||||
import {ComponentTemplate, ComponentType, DirectiveDef, DirectiveType, PublicFeature, RenderFlags, defineComponent, defineDirective, renderComponent as _renderComponent, tick} from '../../src/render3/index';
|
import {ComponentTemplate, ComponentType, DirectiveDef, DirectiveType, PublicFeature, RenderFlags, defineComponent, defineDirective, renderComponent as _renderComponent, tick} from '../../src/render3/index';
|
||||||
import {renderTemplate} from '../../src/render3/instructions';
|
import {_getViewData, renderTemplate} from '../../src/render3/instructions';
|
||||||
import {DirectiveDefList, DirectiveTypesOrFactory, PipeDef, PipeDefList, PipeTypesOrFactory} from '../../src/render3/interfaces/definition';
|
import {DirectiveDefList, DirectiveTypesOrFactory, PipeDef, PipeDefList, PipeTypesOrFactory} from '../../src/render3/interfaces/definition';
|
||||||
import {LElementNode} from '../../src/render3/interfaces/node';
|
import {LElementNode} from '../../src/render3/interfaces/node';
|
||||||
import {PlayerHandler} from '../../src/render3/interfaces/player';
|
import {PlayerHandler} from '../../src/render3/interfaces/player';
|
||||||
import {RElement, RText, Renderer3, RendererFactory3, domRendererFactory3} from '../../src/render3/interfaces/renderer';
|
import {RElement, RText, Renderer3, RendererFactory3, domRendererFactory3} from '../../src/render3/interfaces/renderer';
|
||||||
|
import {HEADER_OFFSET} from '../../src/render3/interfaces/view';
|
||||||
import {Sanitizer} from '../../src/sanitization/security';
|
import {Sanitizer} from '../../src/sanitization/security';
|
||||||
import {Type} from '../../src/type';
|
import {Type} from '../../src/type';
|
||||||
|
|
||||||
|
@ -290,6 +291,15 @@ export function createDirective(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the directive on the given node at the given index */
|
||||||
|
export function getDirectiveOnNode(nodeIndex: number, dirIndex: number = 0) {
|
||||||
|
const directives = discoverDirectives(nodeIndex + HEADER_OFFSET, _getViewData(), true);
|
||||||
|
if (directives == null) {
|
||||||
|
throw new Error(`No directives exist on node in slot ${nodeIndex}`);
|
||||||
|
}
|
||||||
|
return directives[dirIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Verify that DOM is a type of render. This is here for error checking only and has no use.
|
// Verify that DOM is a type of render. This is here for error checking only and has no use.
|
||||||
export const renderer: Renderer3 = null as any as Document;
|
export const renderer: Renderer3 = null as any as Document;
|
||||||
|
|
|
@ -19,7 +19,7 @@ import {pipe, pipeBind1} from '../../src/render3/pipe';
|
||||||
import {NgForOf} from '../../test/render3/common_with_def';
|
import {NgForOf} from '../../test/render3/common_with_def';
|
||||||
|
|
||||||
import {getRendererFactory2} from './imported_renderer2';
|
import {getRendererFactory2} from './imported_renderer2';
|
||||||
import {ComponentFixture, TemplateFixture, createComponent} from './render_util';
|
import {ComponentFixture, TemplateFixture, createComponent, getDirectiveOnNode} from './render_util';
|
||||||
|
|
||||||
describe('ViewContainerRef', () => {
|
describe('ViewContainerRef', () => {
|
||||||
let directiveInstance: DirectiveWithVCRef|null;
|
let directiveInstance: DirectiveWithVCRef|null;
|
||||||
|
@ -161,8 +161,8 @@ describe('ViewContainerRef', () => {
|
||||||
element(3, 'div', ['vcref', '']);
|
element(3, 'div', ['vcref', '']);
|
||||||
|
|
||||||
// for testing only:
|
// for testing only:
|
||||||
firstDir = loadDirective(0);
|
firstDir = getDirectiveOnNode(2);
|
||||||
secondDir = loadDirective(1);
|
secondDir = getDirectiveOnNode(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
function update() {
|
function update() {
|
||||||
|
|
Loading…
Reference in New Issue