Update the license headers throughout the repository to reference Google LLC rather than Google Inc, for the required license headers. PR Close #37205
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			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
 | |
|  */
 | |
| 
 | |
| describe('Microtasks', function() {
 | |
|   if (!global.Promise) return;
 | |
| 
 | |
|   function scheduleFn(task: Task) {
 | |
|     Promise.resolve().then(<any>task.invoke);
 | |
|   }
 | |
| 
 | |
|   it('should execute microtasks enqueued in the root zone', function(done) {
 | |
|     const log: number[] = [];
 | |
| 
 | |
|     Zone.current.scheduleMicroTask('test', () => log.push(1), undefined, scheduleFn);
 | |
|     Zone.current.scheduleMicroTask('test', () => log.push(2), undefined, scheduleFn);
 | |
|     Zone.current.scheduleMicroTask('test', () => log.push(3), undefined, scheduleFn);
 | |
| 
 | |
|     setTimeout(function() {
 | |
|       expect(log).toEqual([1, 2, 3]);
 | |
|       done();
 | |
|     }, 10);
 | |
|   });
 | |
| 
 | |
|   it('should correctly scheduleMacroTask microtasks vs macrotasks', function(done) {
 | |
|     const log = ['+root'];
 | |
| 
 | |
|     Zone.current.scheduleMicroTask('test', () => log.push('root.mit'), undefined, scheduleFn);
 | |
| 
 | |
|     setTimeout(function() {
 | |
|       log.push('+mat1');
 | |
|       Zone.current.scheduleMicroTask('test', () => log.push('mat1.mit'), undefined, scheduleFn);
 | |
|       log.push('-mat1');
 | |
|     }, 10);
 | |
| 
 | |
|     setTimeout(function() {
 | |
|       log.push('mat2');
 | |
|     }, 30);
 | |
| 
 | |
|     setTimeout(function() {
 | |
|       expect(log).toEqual(['+root', '-root', 'root.mit', '+mat1', '-mat1', 'mat1.mit', 'mat2']);
 | |
|       done();
 | |
|     }, 40);
 | |
| 
 | |
|     log.push('-root');
 | |
|   });
 | |
| 
 | |
|   it('should execute Promise wrapCallback in the zone where they are scheduled', function(done) {
 | |
|     const resolvedPromise = Promise.resolve(null);
 | |
| 
 | |
|     const testZone = Zone.current.fork({name: ''});
 | |
| 
 | |
|     testZone.run(function() {
 | |
|       resolvedPromise.then(function() {
 | |
|         expect(Zone.current.name).toBe(testZone.name);
 | |
|         done();
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   it('should execute Promise wrapCallback in the zone where they are scheduled even if resolved ' +
 | |
|          'in different zone.',
 | |
|      function(done) {
 | |
|        let resolve: Function;
 | |
|        const promise = new Promise(function(rs) {
 | |
|          resolve = rs;
 | |
|        });
 | |
| 
 | |
|        const testZone = Zone.current.fork({name: 'test'});
 | |
| 
 | |
|        testZone.run(function() {
 | |
|          promise.then(function() {
 | |
|            expect(Zone.current).toBe(testZone);
 | |
|            done();
 | |
|          });
 | |
|        });
 | |
| 
 | |
|        Zone.current.fork({name: 'test'}).run(function() {
 | |
|          resolve(null);
 | |
|        });
 | |
|      });
 | |
| 
 | |
|   describe('Promise', function() {
 | |
|     it('should go through scheduleTask', function(done) {
 | |
|       let called = false;
 | |
|       const testZone = Zone.current.fork({
 | |
|         name: 'test',
 | |
|         onScheduleTask: function(delegate: ZoneDelegate, current: Zone, target: Zone, task: Task):
 | |
|             Task {
 | |
|               called = true;
 | |
|               delegate.scheduleTask(target, task);
 | |
|               return task;
 | |
|             }
 | |
|       });
 | |
| 
 | |
|       testZone.run(function() {
 | |
|         Promise.resolve('value').then(function() {
 | |
|           expect(called).toEqual(true);
 | |
|           done();
 | |
|         });
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| });
 |