Skip to content

Commit 63e853d

Browse files
author
Tim Blasi
committed
feat(change_detect): Guard checkNoChanges behind assertionsEnabled
Always generate `checkNoChanges` tests, but guard them behind `assertionsEnabled` tests. Closes #4560
1 parent 2d0c8f1 commit 63e853d

File tree

14 files changed

+42
-60
lines changed

14 files changed

+42
-60
lines changed

modules/angular2/src/compiler/compiler.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ export function compilerProviders(): Array<Type | Provider | any[]> {
4040
CommandCompiler,
4141
ChangeDetectionCompiler,
4242
provide(ChangeDetectorGenConfig,
43-
{
44-
useValue:
45-
new ChangeDetectorGenConfig(assertionsEnabled(), assertionsEnabled(), false, true)
46-
}),
43+
{useValue: new ChangeDetectorGenConfig(assertionsEnabled(), false, true)}),
4744
TemplateCompiler,
4845
provide(RuntimeCompiler, {useClass: RuntimeCompiler_}),
4946
provide(Compiler, {useExisting: RuntimeCompiler}),

modules/angular2/src/core/change_detection/abstract_change_detector.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import {isPresent, isBlank, StringWrapper} from 'angular2/src/core/facade/lang';
2-
import {BaseException} from 'angular2/src/core/facade/exceptions';
1+
import {assertionsEnabled, isPresent, isBlank, StringWrapper} from 'angular2/src/core/facade/lang';
32
import {ListWrapper} from 'angular2/src/core/facade/collection';
43
import {ChangeDetectionUtil} from './change_detection_util';
54
import {ChangeDetectorRef, ChangeDetectorRef_} from './change_detector_ref';
@@ -76,7 +75,11 @@ export class AbstractChangeDetector<T> implements ChangeDetector {
7675

7776
detectChanges(): void { this.runDetectChanges(false); }
7877

79-
checkNoChanges(): void { throw new BaseException("Not implemented"); }
78+
checkNoChanges(): void {
79+
if (assertionsEnabled()) {
80+
this.runDetectChanges(true);
81+
}
82+
}
8083

8184
runDetectChanges(throwOnChange: boolean): void {
8285
if (this.mode === ChangeDetectionStrategy.Detached ||

modules/angular2/src/core/change_detection/change_detection_jit_generator.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import {Type, isBlank, isPresent, StringWrapper} from 'angular2/src/core/facade/lang';
1+
import {
2+
Type,
3+
assertionsEnabled,
4+
isBlank,
5+
isPresent,
6+
StringWrapper
7+
} from 'angular2/src/core/facade/lang';
28
import {BaseException} from 'angular2/src/core/facade/exceptions';
39
import {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/core/facade/collection';
410

@@ -97,8 +103,6 @@ export class ChangeDetectorJITGenerator {
97103
98104
${this._maybeGenHandleEventInternal()}
99105
100-
${this._genCheckNoChanges()}
101-
102106
${this._maybeGenAfterContentLifecycleCallbacks()}
103107
104108
${this._maybeGenAfterViewLifecycleCallbacks()}
@@ -434,7 +438,7 @@ export class ChangeDetectorJITGenerator {
434438

435439
/** @internal */
436440
_genThrowOnChangeCheck(oldValue: string, newValue: string): string {
437-
if (this.genConfig.genCheckNoChanges) {
441+
if (assertionsEnabled()) {
438442
return `
439443
if(throwOnChange) {
440444
this.throwOnChangeError(${oldValue}, ${newValue});
@@ -445,15 +449,6 @@ export class ChangeDetectorJITGenerator {
445449
}
446450
}
447451

448-
/** @internal */
449-
_genCheckNoChanges(): string {
450-
if (this.genConfig.genCheckNoChanges) {
451-
return `${this.typeName}.prototype.checkNoChanges = function() { this.runDetectChanges(true); }`;
452-
} else {
453-
return '';
454-
}
455-
}
456-
457452
/** @internal */
458453
_genAddToChanges(r: ProtoRecord): string {
459454
var newValue = this._names.getLocalName(r.selfIndex);

modules/angular2/src/core/change_detection/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export interface ChangeDetector {
3939
export interface ProtoChangeDetector { instantiate(dispatcher: ChangeDispatcher): ChangeDetector; }
4040

4141
export class ChangeDetectorGenConfig {
42-
constructor(public genCheckNoChanges: boolean, public genDebugInfo: boolean,
43-
public logBindingUpdate: boolean, public useJit: boolean) {}
42+
constructor(public genDebugInfo: boolean, public logBindingUpdate: boolean,
43+
public useJit: boolean) {}
4444
}
4545

4646
export class ChangeDetectorDefinition {

modules/angular2/src/core/change_detection/pregen_proto_change_detector.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export 'package:angular2/src/core/change_detection/proto_record.dart'
1919
show ProtoRecord;
2020
export 'package:angular2/src/core/change_detection/change_detection_util.dart'
2121
show ChangeDetectionUtil;
22-
export 'package:angular2/src/core/facade/lang.dart' show looseIdentical;
22+
export 'package:angular2/src/core/facade/lang.dart' show assertionsEnabled, looseIdentical;
2323

2424
typedef ProtoChangeDetector PregenProtoChangeDetectorFactory(
2525
ChangeDetectorDefinition definition);

modules/angular2/src/testing/test_injector.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ function _getAppBindings() {
8989

9090
return [
9191
compilerProviders(),
92-
provide(ChangeDetectorGenConfig,
93-
{useValue: new ChangeDetectorGenConfig(true, true, false, true)}),
92+
provide(ChangeDetectorGenConfig, {useValue: new ChangeDetectorGenConfig(true, false, true)}),
9493
provide(DOCUMENT, {useValue: appDoc}),
9594
provide(DomRenderer, {useClass: DomRenderer_}),
9695
provide(Renderer, {useExisting: DomRenderer}),

modules/angular2/test/compiler/change_definition_factory_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export function main() {
6464
var protoChangeDetectors =
6565
createChangeDetectorDefinitions(new CompileTypeMetadata({name: 'SomeComp'}),
6666
ChangeDetectionStrategy.Default,
67-
new ChangeDetectorGenConfig(true, true, false, false),
67+
new ChangeDetectorGenConfig(true, false, false),
6868
parser.parse(template, directives, 'TestComp'))
6969
.map(definition => new DynamicProtoChangeDetector(definition));
7070
var changeDetector = protoChangeDetectors[protoViewIndex].instantiate(dispatcher);

modules/angular2/test/compiler/change_detector_compiler_spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export function main() {
8080
describe('no jit', () => {
8181
beforeEachBindings(() => [
8282
provide(ChangeDetectorGenConfig,
83-
{useValue: new ChangeDetectorGenConfig(true, true, false, false)})
83+
{useValue: new ChangeDetectorGenConfig(true, false, false)})
8484
]);
8585
it('should watch element properties', () => {
8686
expect(detectChanges(compiler, '<div [el-prop]="someProp">'))
@@ -91,7 +91,7 @@ export function main() {
9191
describe('jit', () => {
9292
beforeEachBindings(() => [
9393
provide(ChangeDetectorGenConfig,
94-
{useValue: new ChangeDetectorGenConfig(true, true, false, true)})
94+
{useValue: new ChangeDetectorGenConfig(true, false, true)})
9595
]);
9696
it('should watch element properties', () => {
9797
expect(detectChanges(compiler, '<div [el-prop]="someProp">'))

modules/angular2/test/core/change_detection/change_detector_config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export const PROP_NAME = 'propName';
6565
* In this case, we expect `id` and `expression` to be the same string.
6666
*/
6767
export function getDefinition(id: string): TestDefinition {
68-
var genConfig = new ChangeDetectorGenConfig(true, true, true, true);
68+
var genConfig = new ChangeDetectorGenConfig(true, true, true);
6969
var testDef = null;
7070
if (StringMapWrapper.contains(_ExpressionWithLocals.availableDefinitions, id)) {
7171
let val = StringMapWrapper.get(_ExpressionWithLocals.availableDefinitions, id);
@@ -121,7 +121,7 @@ export function getDefinition(id: string): TestDefinition {
121121
[_DirectiveUpdating.recordNoCallbacks], genConfig);
122122
testDef = new TestDefinition(id, cdDef, null);
123123
} else if (id == "updateElementProduction") {
124-
var genConfig = new ChangeDetectorGenConfig(false, false, false, true);
124+
var genConfig = new ChangeDetectorGenConfig(false, false, true);
125125
var records = _createBindingRecords("name");
126126
let cdDef = new ChangeDetectorDefinition(id, null, [], records, [], [], genConfig);
127127
testDef = new TestDefinition(id, cdDef, null);
@@ -167,7 +167,7 @@ class _ExpressionWithLocals {
167167
var variableBindings = _convertLocalsToVariableBindings(this.locals);
168168
var bindingRecords = _createBindingRecords(this._expression);
169169
var directiveRecords = [];
170-
var genConfig = new ChangeDetectorGenConfig(true, true, true, true);
170+
var genConfig = new ChangeDetectorGenConfig(true, true, true);
171171
return new ChangeDetectorDefinition('(empty id)', strategy, variableBindings, bindingRecords,
172172
[], directiveRecords, genConfig);
173173
}
@@ -231,7 +231,7 @@ class _ExpressionWithMode {
231231
_createHostEventRecords("(host-event)='false'", dirRecordWithOnPush))
232232
}
233233

234-
var genConfig = new ChangeDetectorGenConfig(true, true, true, true);
234+
var genConfig = new ChangeDetectorGenConfig(true, true, true);
235235

236236
return new ChangeDetectorDefinition('(empty id)', this._strategy, variableBindings,
237237
bindingRecords, eventRecords, directiveRecords, genConfig);
@@ -260,7 +260,7 @@ class _DirectiveUpdating {
260260
createChangeDetectorDefinition(): ChangeDetectorDefinition {
261261
var strategy = null;
262262
var variableBindings = [];
263-
var genConfig = new ChangeDetectorGenConfig(true, true, true, true);
263+
var genConfig = new ChangeDetectorGenConfig(true, true, true);
264264

265265
return new ChangeDetectorDefinition('(empty id)', strategy, variableBindings,
266266
this._bindingRecords, [], this._directiveRecords,

modules/angular2/test/core/linker/integration_spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@ export function main() {
15751575
describe('logging property updates', () => {
15761576
beforeEachBindings(() => [
15771577
provide(ChangeDetectorGenConfig,
1578-
{useValue: new ChangeDetectorGenConfig(true, true, true, false)})
1578+
{useValue: new ChangeDetectorGenConfig(true, true, false)})
15791579
]);
15801580

15811581
it('should reflect property values as attributes',

0 commit comments

Comments
 (0)