60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.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 {asapScheduler, of } from 'rxjs';
 | |
| import {map, observeOn} from 'rxjs/operators';
 | |
| 
 | |
| import {asyncTest} from '../test-util';
 | |
| 
 | |
| describe('Scheduler.asap', () => {
 | |
|   let log: any[];
 | |
|   let errorCallback: Function;
 | |
|   const constructorZone: Zone = Zone.root.fork({name: 'Constructor Zone'});
 | |
| 
 | |
|   beforeEach(() => { log = []; });
 | |
| 
 | |
|   it('scheduler asap should run in correct zone', asyncTest((done: any) => {
 | |
|        let observable: any;
 | |
|        constructorZone.run(() => { observable = of (1, 2, 3).pipe(observeOn(asapScheduler)); });
 | |
| 
 | |
|        const zone = Zone.current.fork({name: 'subscribeZone'});
 | |
| 
 | |
|        zone.run(() => {
 | |
|          observable.pipe(map((value: number) => { return value; }))
 | |
|              .subscribe(
 | |
|                  (value: number) => {
 | |
|                    expect(Zone.current.name).toEqual(zone.name);
 | |
|                    if (value === 3) {
 | |
|                      setTimeout(done);
 | |
|                    }
 | |
|                  },
 | |
|                  (err: any) => { fail('should not be here'); });
 | |
|        });
 | |
|      }, Zone.root));
 | |
| 
 | |
|   it('scheduler asap error should run in correct zone', asyncTest((done: any) => {
 | |
|        let observable: any;
 | |
|        constructorZone.run(() => { observable = of (1, 2, 3).pipe(observeOn(asapScheduler)); });
 | |
| 
 | |
|        Zone.root.run(() => {
 | |
|          observable
 | |
|              .pipe(map((value: number) => {
 | |
|                if (value === 3) {
 | |
|                  throw new Error('oops');
 | |
|                }
 | |
|                return value;
 | |
|              }))
 | |
|              .subscribe((value: number) => {}, (err: any) => {
 | |
|                expect(err.message).toEqual('oops');
 | |
|                expect(Zone.current.name).toEqual('<root>');
 | |
|                done();
 | |
|              });
 | |
|        });
 | |
|      }, Zone.root));
 | |
| });
 |