mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
The sync-test zone is used in e.g. `describe` to raise an error when there is asynchronous code scheduled in describe blocks. This commit includes the zone name in such thrown errors to allow for us to include the jasmine describe name in the error. This will be wired up in the jasmine zonejs patches separately.
35 lines
945 B
TypeScript
35 lines
945 B
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
class SyncTestZoneSpec implements ZoneSpec {
|
|
runZone = Zone.current;
|
|
|
|
constructor(namePrefix: string) {
|
|
this.name = 'syncTestZone for ' + namePrefix;
|
|
}
|
|
|
|
// ZoneSpec implementation below.
|
|
|
|
name: string;
|
|
|
|
onScheduleTask(delegate: ZoneDelegate, current: Zone, target: Zone, task: Task): Task {
|
|
switch (task.type) {
|
|
case 'microTask':
|
|
case 'macroTask':
|
|
throw new Error(`Cannot call ${task.source} from within a sync test (${this.name}).`);
|
|
case 'eventTask':
|
|
task = delegate.scheduleTask(target, task);
|
|
break;
|
|
}
|
|
return task;
|
|
}
|
|
}
|
|
|
|
// Export the class so that new instances can be created with proper
|
|
// constructor params.
|
|
(Zone as any)['SyncTestZoneSpec'] = SyncTestZoneSpec;
|