mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
fix(change_detection): fixed reflect properties as attributes
Closes #3761
This commit is contained in:
@@ -28,13 +28,13 @@ export function main() {
|
||||
|
||||
it("should return a proto change detector when one is available", () => {
|
||||
var map = {'id': (def) => proto};
|
||||
var cd = new PreGeneratedChangeDetection(map);
|
||||
var cd = new PreGeneratedChangeDetection(null, map);
|
||||
|
||||
expect(cd.getProtoChangeDetector('id', def)).toBe(proto)
|
||||
});
|
||||
|
||||
it("should delegate to dynamic change detection otherwise", () => {
|
||||
var cd = new PreGeneratedChangeDetection({});
|
||||
var cd = new PreGeneratedChangeDetection(null, {});
|
||||
expect(cd.getProtoChangeDetector('id', def)).toBeAnInstanceOf(DynamicProtoChangeDetector);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -66,7 +66,7 @@ export var PROP_NAME = 'propName';
|
||||
* In this case, we expect `id` and `expression` to be the same string.
|
||||
*/
|
||||
export function getDefinition(id: string): TestDefinition {
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true);
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true, true);
|
||||
var testDef = null;
|
||||
if (StringMapWrapper.contains(_ExpressionWithLocals.availableDefinitions, id)) {
|
||||
let val = StringMapWrapper.get(_ExpressionWithLocals.availableDefinitions, id);
|
||||
@@ -110,6 +110,12 @@ export function getDefinition(id: string): TestDefinition {
|
||||
var records = _createBindingRecords("a");
|
||||
let cdDef = new ChangeDetectorDefinition(id, "ON_PUSH_OBSERVE", [], records, [], [], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
|
||||
} else if (id == "updateElementProduction") {
|
||||
var genConfig = new ChangeDetectorGenConfig(false, false, false);
|
||||
var records = _createBindingRecords("name");
|
||||
let cdDef = new ChangeDetectorDefinition(id, null, [], records, [], [], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +144,7 @@ export function getAllDefinitions(): List<TestDefinition> {
|
||||
ListWrapper.concat(allDefs, StringMapWrapper.keys(_DirectiveUpdating.availableDefinitions));
|
||||
allDefs = ListWrapper.concat(allDefs, _availableEventDefinitions);
|
||||
allDefs = ListWrapper.concat(allDefs, _availableHostEventDefinitions);
|
||||
allDefs = ListWrapper.concat(allDefs, ["onPushObserve"]);
|
||||
allDefs = ListWrapper.concat(allDefs, ["onPushObserve", "updateElementProduction"]);
|
||||
return ListWrapper.map(allDefs, (id) => getDefinition(id));
|
||||
}
|
||||
|
||||
@@ -150,7 +156,7 @@ class _ExpressionWithLocals {
|
||||
var variableBindings = _convertLocalsToVariableBindings(this.locals);
|
||||
var bindingRecords = _createBindingRecords(this._expression);
|
||||
var directiveRecords = [];
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true);
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true, true);
|
||||
return new ChangeDetectorDefinition('(empty id)', strategy, variableBindings, bindingRecords,
|
||||
[], directiveRecords, genConfig);
|
||||
}
|
||||
@@ -210,7 +216,7 @@ class _ExpressionWithMode {
|
||||
_createHostEventRecords("(host-event)='false'", dirRecordWithOnPush))
|
||||
}
|
||||
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true);
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true, true);
|
||||
|
||||
return new ChangeDetectorDefinition('(empty id)', this._strategy, variableBindings,
|
||||
bindingRecords, eventRecords, directiveRecords, genConfig);
|
||||
@@ -236,7 +242,7 @@ class _DirectiveUpdating {
|
||||
createChangeDetectorDefinition(): ChangeDetectorDefinition {
|
||||
var strategy = null;
|
||||
var variableBindings = [];
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true);
|
||||
var genConfig = new ChangeDetectorGenConfig(true, true, true);
|
||||
|
||||
return new ChangeDetectorDefinition('(empty id)', strategy, variableBindings,
|
||||
this._bindingRecords, [], this._directiveRecords,
|
||||
|
||||
@@ -535,6 +535,31 @@ export function main() {
|
||||
});
|
||||
});
|
||||
|
||||
describe("logBindingUpdate", () => {
|
||||
it('should be called for element updates in the dev mode', () => {
|
||||
var person = new Person('bob');
|
||||
var val = _createChangeDetector('name', person);
|
||||
val.changeDetector.detectChanges();
|
||||
expect(val.dispatcher.debugLog).toEqual(['propName=bob']);
|
||||
});
|
||||
|
||||
it('should be called for directive updates in the dev mode', () => {
|
||||
var val = _createWithoutHydrate('directNoDispatcher');
|
||||
val.changeDetector.hydrate(_DEFAULT_CONTEXT, null,
|
||||
new FakeDirectives([new TestDirective()], []), null);
|
||||
val.changeDetector.detectChanges();
|
||||
expect(val.dispatcher.debugLog).toEqual(["a=42"]);
|
||||
});
|
||||
|
||||
it('should not be called in the prod mode', () => {
|
||||
var person = new Person('bob');
|
||||
var val = _createChangeDetector('updateElementProduction', person);
|
||||
val.changeDetector.detectChanges();
|
||||
expect(val.dispatcher.debugLog).toEqual([]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('reading directives', () => {
|
||||
it('should read directive properties', () => {
|
||||
var directive = new TestDirective();
|
||||
@@ -1123,7 +1148,8 @@ class FakeDirectives {
|
||||
}
|
||||
|
||||
class TestDispatcher implements ChangeDispatcher {
|
||||
log: List<string>;
|
||||
log: string[];
|
||||
debugLog: string[];
|
||||
loggedValues: List<any>;
|
||||
onAllChangesDoneCalled: boolean = false;
|
||||
|
||||
@@ -1131,6 +1157,7 @@ class TestDispatcher implements ChangeDispatcher {
|
||||
|
||||
clear() {
|
||||
this.log = [];
|
||||
this.debugLog = [];
|
||||
this.loggedValues = [];
|
||||
this.onAllChangesDoneCalled = true;
|
||||
}
|
||||
@@ -1140,6 +1167,8 @@ class TestDispatcher implements ChangeDispatcher {
|
||||
this.loggedValues.push(value);
|
||||
}
|
||||
|
||||
logBindingUpdate(target, value) { this.debugLog.push(`${target.name}=${this._asString(value)}`); }
|
||||
|
||||
notifyOnAllChangesDone() { this.onAllChangesDoneCalled = true; }
|
||||
|
||||
getDebugContext(a, b) { return null; }
|
||||
|
||||
Reference in New Issue
Block a user