test(ElementInjector): test that hostInjector has priority over viewInjector
This commit is contained in:
parent
6a6b43de07
commit
4d338a4f5c
|
@ -599,15 +599,6 @@ export function main() {
|
||||||
expect(childInj.get('injectable2')).toEqual('injectable1-injectable2');
|
expect(childInj.get('injectable2')).toEqual('injectable1-injectable2');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should instantiate components that depends on viewInjector dependencies", function() {
|
|
||||||
var inj = injector(
|
|
||||||
[DirectiveBinding.createFromType(
|
|
||||||
NeedsService,
|
|
||||||
new dirAnn.Component({viewInjector: [bind('service').toValue('service')]}))],
|
|
||||||
null, true);
|
|
||||||
expect(inj.get(NeedsService).service).toEqual('service');
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should instantiate hostInjector injectables that have dependencies", () => {
|
it("should instantiate hostInjector injectables that have dependencies", () => {
|
||||||
var inj = injector(ListWrapper.concat(
|
var inj = injector(ListWrapper.concat(
|
||||||
[DirectiveBinding.createFromType(SimpleDirective, new dirAnn.Directive({
|
[DirectiveBinding.createFromType(SimpleDirective, new dirAnn.Directive({
|
||||||
|
@ -624,7 +615,7 @@ export function main() {
|
||||||
expect(inj.get('injectable2')).toEqual('injectable1-injectable2');
|
expect(inj.get('injectable2')).toEqual('injectable1-injectable2');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should instantiate components that depends on viewInjector dependencies", function() {
|
it("should instantiate components that depends on viewInjector dependencies", () => {
|
||||||
var inj = injector(
|
var inj = injector(
|
||||||
ListWrapper.concat([DirectiveBinding.createFromType(NeedsService, new dirAnn.Component({
|
ListWrapper.concat([DirectiveBinding.createFromType(NeedsService, new dirAnn.Component({
|
||||||
viewInjector: [bind('service').toValue('service')]
|
viewInjector: [bind('service').toValue('service')]
|
||||||
|
@ -634,6 +625,16 @@ export function main() {
|
||||||
expect(inj.get(NeedsService).service).toEqual('service');
|
expect(inj.get(NeedsService).service).toEqual('service');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should prioritize hostInjector over viewInjector for the same binding", () => {
|
||||||
|
var inj = injector(
|
||||||
|
ListWrapper.concat([DirectiveBinding.createFromType(NeedsService, new dirAnn.Component({
|
||||||
|
hostInjector: [bind('service').toValue('hostService')],
|
||||||
|
viewInjector: [bind('service').toValue('viewService')]})
|
||||||
|
)], extraBindings), null, true);
|
||||||
|
expect(inj.get(NeedsService).service).toEqual('hostService');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it("should instantiate directives that depend on app services", () => {
|
it("should instantiate directives that depend on app services", () => {
|
||||||
var appInjector = Injector.resolveAndCreate(
|
var appInjector = Injector.resolveAndCreate(
|
||||||
ListWrapper.concat([bind("service").toValue("service")], extraBindings));
|
ListWrapper.concat([bind("service").toValue("service")], extraBindings));
|
||||||
|
|
|
@ -967,6 +967,28 @@ export function main() {
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
it('should prioritze hostInjector over viewInjector for the same binding',
|
||||||
|
inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
||||||
|
tb.overrideView(MyComp, new viewAnn.View({
|
||||||
|
template: `
|
||||||
|
<directive-providing-injectable>
|
||||||
|
<directive-consuming-injectable #consuming>
|
||||||
|
</directive-consuming-injectable>
|
||||||
|
</directive-providing-injectable>
|
||||||
|
`,
|
||||||
|
directives:
|
||||||
|
[DirectiveProvidingInjectableInHostAndView, DirectiveConsumingInjectable]
|
||||||
|
}));
|
||||||
|
tb.createView(MyComp, {context: ctx})
|
||||||
|
.then((view) => {
|
||||||
|
var comp = view.rawView.locals.get("consuming");
|
||||||
|
expect(comp.injectable).toEqual("host");
|
||||||
|
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it("should support viewInjector", inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
it("should support viewInjector", inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
||||||
tb.overrideView(DirectiveProvidingInjectableInView, new viewAnn.View({
|
tb.overrideView(DirectiveProvidingInjectableInView, new viewAnn.View({
|
||||||
template: `
|
template: `
|
||||||
|
@ -1592,13 +1614,24 @@ class DirectiveProvidingInjectable {
|
||||||
class DirectiveProvidingInjectableInView {
|
class DirectiveProvidingInjectableInView {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'directive-providing-injectable',
|
||||||
|
hostInjector: [new Binding(InjectableService, {toValue: 'host'})],
|
||||||
|
viewInjector: [new Binding(InjectableService, {toValue: 'view'})]
|
||||||
|
})
|
||||||
|
@View({template: ''})
|
||||||
|
@Injectable()
|
||||||
|
class DirectiveProvidingInjectableInHostAndView {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Component({selector: 'directive-consuming-injectable'})
|
@Component({selector: 'directive-consuming-injectable'})
|
||||||
@View({template: ''})
|
@View({template: ''})
|
||||||
@Injectable()
|
@Injectable()
|
||||||
class DirectiveConsumingInjectable {
|
class DirectiveConsumingInjectable {
|
||||||
injectable;
|
injectable;
|
||||||
|
|
||||||
constructor(@Ancestor() injectable: InjectableService) { this.injectable = injectable; }
|
constructor(@Ancestor() @Inject(InjectableService) injectable) { this.injectable = injectable; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue