fix(view): chagned view factory to keep AstWithSource
This commit is contained in:
parent
4943c0f887
commit
56f3429cc9
|
@ -109,11 +109,11 @@ export class ProtoViewFactory {
|
||||||
);
|
);
|
||||||
// text nodes
|
// text nodes
|
||||||
for (var i=0; i<renderElementBinder.textBindings.length; i++) {
|
for (var i=0; i<renderElementBinder.textBindings.length; i++) {
|
||||||
protoView.bindTextNode(renderElementBinder.textBindings[i].ast);
|
protoView.bindTextNode(renderElementBinder.textBindings[i]);
|
||||||
}
|
}
|
||||||
// element properties
|
// element properties
|
||||||
MapWrapper.forEach(renderElementBinder.propertyBindings, (astWithSource, propertyName) => {
|
MapWrapper.forEach(renderElementBinder.propertyBindings, (astWithSource, propertyName) => {
|
||||||
protoView.bindElementProperty(astWithSource.ast, propertyName);
|
protoView.bindElementProperty(astWithSource, propertyName);
|
||||||
});
|
});
|
||||||
// events
|
// events
|
||||||
protoView.bindEvent(renderElementBinder.eventBindings, -1);
|
protoView.bindEvent(renderElementBinder.eventBindings, -1);
|
||||||
|
@ -136,7 +136,7 @@ export class ProtoViewFactory {
|
||||||
// TODO: these setters should eventually be created by change detection, to make
|
// TODO: these setters should eventually be created by change detection, to make
|
||||||
// it monomorphic!
|
// it monomorphic!
|
||||||
var setter = reflector.setter(propertyName);
|
var setter = reflector.setter(propertyName);
|
||||||
protoView.bindDirectiveProperty(i, astWithSource.ast, propertyName, setter);
|
protoView.bindDirectiveProperty(i, astWithSource, propertyName, setter);
|
||||||
});
|
});
|
||||||
// directive events
|
// directive events
|
||||||
protoView.bindEvent(renderDirectiveMetadata.eventBindings, i);
|
protoView.bindEvent(renderDirectiveMetadata.eventBindings, i);
|
||||||
|
|
|
@ -248,7 +248,7 @@ export class EventBuilder extends AstTransformer {
|
||||||
// var adjustedAst = astWithSource.ast.visit(this);
|
// var adjustedAst = astWithSource.ast.visit(this);
|
||||||
var adjustedAst = source.ast;
|
var adjustedAst = source.ast;
|
||||||
var fullName = isPresent(target) ? target + EVENT_TARGET_SEPARATOR + name : name;
|
var fullName = isPresent(target) ? target + EVENT_TARGET_SEPARATOR + name : name;
|
||||||
var result = new api.EventBinding(fullName, new ASTWithSource(adjustedAst, source.source, ''));
|
var result = new api.EventBinding(fullName, new ASTWithSource(adjustedAst, source.source, source.location));
|
||||||
var event = new Event(name, target, fullName);
|
var event = new Event(name, target, fullName);
|
||||||
if (isBlank(target)) {
|
if (isBlank(target)) {
|
||||||
ListWrapper.push(this.localEvents, event);
|
ListWrapper.push(this.localEvents, event);
|
||||||
|
|
|
@ -731,8 +731,49 @@ export function main() {
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("error handling", () => {
|
||||||
|
|
||||||
|
it('should specify a location of an error that happened during change detection (text)',
|
||||||
|
inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
||||||
|
|
||||||
|
tb.overrideView(MyComp, new View({
|
||||||
|
template: '{{a.b}}'
|
||||||
|
}));
|
||||||
|
|
||||||
|
tb.createView(MyComp, {context: ctx}).then((view) => {
|
||||||
|
expect(() => view.detectChanges()).toThrowError(new RegExp('{{a.b}} in MyComp'));
|
||||||
|
async.done();
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should specify a location of an error that happened during change detection (element property)',
|
||||||
|
inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
||||||
|
|
||||||
|
tb.overrideView(MyComp, new View({
|
||||||
|
template: '<div [prop]="a.b"></div>'
|
||||||
|
}));
|
||||||
|
|
||||||
|
tb.createView(MyComp, {context: ctx}).then((view) => {
|
||||||
|
expect(() => view.detectChanges()).toThrowError(new RegExp('a.b in MyComp'));
|
||||||
|
async.done();
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should specify a location of an error that happened during change detection (directive property)',
|
||||||
|
inject([TestBed, AsyncTestCompleter], (tb, async) => {
|
||||||
|
|
||||||
|
tb.overrideView(MyComp, new View({
|
||||||
|
template: '<child-cmp [prop]="a.b"></child-cmp>',
|
||||||
|
directives: [ChildComp]
|
||||||
|
}));
|
||||||
|
|
||||||
|
tb.createView(MyComp, {context: ctx}).then((view) => {
|
||||||
|
expect(() => view.detectChanges()).toThrowError(new RegExp('a.b in MyComp'));
|
||||||
|
async.done();
|
||||||
|
})
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Disabled until a solution is found, refs:
|
// Disabled until a solution is found, refs:
|
||||||
|
|
Loading…
Reference in New Issue