77 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. 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
 | 
						|
 */
 | 
						|
 | 
						|
import {supportPatchXHROnProperty} from '../test-util';
 | 
						|
 | 
						|
declare const global: any;
 | 
						|
 | 
						|
describe('TaskTrackingZone', function() {
 | 
						|
  let _TaskTrackingZoneSpec: typeof TaskTrackingZoneSpec = (Zone as any)['TaskTrackingZoneSpec'];
 | 
						|
  let taskTrackingZoneSpec: TaskTrackingZoneSpec|null = null;
 | 
						|
  let taskTrackingZone: Zone;
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    taskTrackingZoneSpec = new _TaskTrackingZoneSpec();
 | 
						|
    taskTrackingZone = Zone.current.fork(taskTrackingZoneSpec);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should track tasks', (done: Function) => {
 | 
						|
    taskTrackingZone.run(() => {
 | 
						|
      taskTrackingZone.scheduleMicroTask('test1', () => {});
 | 
						|
      expect(taskTrackingZoneSpec !.microTasks.length).toBe(1);
 | 
						|
      expect(taskTrackingZoneSpec !.microTasks[0].source).toBe('test1');
 | 
						|
 | 
						|
      setTimeout(() => {});
 | 
						|
      expect(taskTrackingZoneSpec !.macroTasks.length).toBe(1);
 | 
						|
      expect(taskTrackingZoneSpec !.macroTasks[0].source).toBe('setTimeout');
 | 
						|
      taskTrackingZone.cancelTask(taskTrackingZoneSpec !.macroTasks[0]);
 | 
						|
      expect(taskTrackingZoneSpec !.macroTasks.length).toBe(0);
 | 
						|
 | 
						|
      setTimeout(() => {
 | 
						|
        // assert on execution it is null
 | 
						|
        expect(taskTrackingZoneSpec !.macroTasks.length).toBe(0);
 | 
						|
        expect(taskTrackingZoneSpec !.microTasks.length).toBe(0);
 | 
						|
 | 
						|
        // If a browser does not have XMLHttpRequest, then end test here.
 | 
						|
        if (typeof global['XMLHttpRequest'] == 'undefined') return done();
 | 
						|
        const xhr = new XMLHttpRequest();
 | 
						|
        xhr.open('get', '/', true);
 | 
						|
        xhr.onreadystatechange = () => {
 | 
						|
          if (xhr.readyState == 4) {
 | 
						|
            // clear current event tasks using setTimeout
 | 
						|
            setTimeout(() => {
 | 
						|
              expect(taskTrackingZoneSpec !.macroTasks.length).toBe(0);
 | 
						|
              expect(taskTrackingZoneSpec !.microTasks.length).toBe(0);
 | 
						|
              if (supportPatchXHROnProperty()) {
 | 
						|
                expect(taskTrackingZoneSpec !.eventTasks.length).not.toBe(0);
 | 
						|
              }
 | 
						|
              taskTrackingZoneSpec !.clearEvents();
 | 
						|
              expect(taskTrackingZoneSpec !.eventTasks.length).toBe(0);
 | 
						|
              done();
 | 
						|
            });
 | 
						|
          }
 | 
						|
        };
 | 
						|
        xhr.send();
 | 
						|
        expect(taskTrackingZoneSpec !.macroTasks.length).toBe(1);
 | 
						|
        expect(taskTrackingZoneSpec !.macroTasks[0].source).toBe('XMLHttpRequest.send');
 | 
						|
        if (supportPatchXHROnProperty()) {
 | 
						|
          expect(taskTrackingZoneSpec !.eventTasks[0].source)
 | 
						|
              .toMatch(/\.addEventListener:readystatechange/);
 | 
						|
        }
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should capture task creation stacktrace', (done) => {
 | 
						|
    taskTrackingZone.run(() => {
 | 
						|
      setTimeout(() => { done(); });
 | 
						|
      expect((taskTrackingZoneSpec !.macroTasks[0] as any)['creationLocation']).toBeTruthy();
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |