139 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			139 lines
		
	
	
		
			4.4 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 {ifEnvSupports} from '../test-util'; | ||
|  | declare const window: any; | ||
|  | 
 | ||
|  | const TIMEOUT = 5000; | ||
|  | 
 | ||
|  | if (!window['saucelabs']) { | ||
|  |   // sauceLabs does not support WebSockets; skip these tests
 | ||
|  | 
 | ||
|  |   xdescribe('WebSocket', ifEnvSupports('WebSocket', function() { | ||
|  |               let socket: WebSocket; | ||
|  |               const TEST_SERVER_URL = 'ws://localhost:8001'; | ||
|  |               const testZone = Zone.current.fork({name: 'test'}); | ||
|  | 
 | ||
|  | 
 | ||
|  |               beforeEach(function(done) { | ||
|  |                 socket = new WebSocket(TEST_SERVER_URL); | ||
|  |                 socket.addEventListener('open', function() { done(); }); | ||
|  |                 socket.addEventListener('error', function() { | ||
|  |                   fail( | ||
|  |                       'Can\'t establish socket to ' + TEST_SERVER_URL + | ||
|  |                       '! do you have test/ws-server.js running?'); | ||
|  |                   done(); | ||
|  |                 }); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  |               afterEach(function(done) { | ||
|  |                 socket.addEventListener('close', function() { done(); }); | ||
|  |                 socket.close(); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  |               xit('should be patched in a Web Worker', done => { | ||
|  |                 const worker = new Worker('/base/test/ws-webworker-context.js'); | ||
|  |                 worker.onmessage = (e: MessageEvent) => { | ||
|  |                   if (e.data !== 'pass' && e.data !== 'fail') { | ||
|  |                     fail(`web worker ${e.data}`); | ||
|  |                     return; | ||
|  |                   } | ||
|  |                   expect(e.data).toBe('pass'); | ||
|  |                   done(); | ||
|  |                 }; | ||
|  |               }, 10000); | ||
|  | 
 | ||
|  |               it('should work with addEventListener', function(done) { | ||
|  |                 testZone.run(function() { | ||
|  |                   socket.addEventListener('message', function(event) { | ||
|  |                     expect(Zone.current).toBe(testZone); | ||
|  |                     expect(event['data']).toBe('hi'); | ||
|  |                     done(); | ||
|  |                   }); | ||
|  |                 }); | ||
|  |                 socket.send('hi'); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  | 
 | ||
|  |               it('should respect removeEventListener', function(done) { | ||
|  |                 let log = ''; | ||
|  | 
 | ||
|  |                 function logOnMessage() { | ||
|  |                   log += 'a'; | ||
|  | 
 | ||
|  |                   expect(log).toEqual('a'); | ||
|  | 
 | ||
|  |                   socket.removeEventListener('message', logOnMessage); | ||
|  |                   socket.send('hi'); | ||
|  | 
 | ||
|  |                   setTimeout(function() { | ||
|  |                     expect(log).toEqual('a'); | ||
|  |                     done(); | ||
|  |                   }, 10); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 socket.addEventListener('message', logOnMessage); | ||
|  |                 socket.send('hi'); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  | 
 | ||
|  |               it('should work with onmessage', function(done) { | ||
|  |                 testZone.run(function() { | ||
|  |                   socket.onmessage = function(contents) { | ||
|  |                     expect(Zone.current).toBe(testZone); | ||
|  |                     expect(contents.data).toBe('hi'); | ||
|  |                     done(); | ||
|  |                   }; | ||
|  |                 }); | ||
|  |                 socket.send('hi'); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  | 
 | ||
|  |               it('should only allow one onmessage handler', function(done) { | ||
|  |                 let log = ''; | ||
|  | 
 | ||
|  |                 socket.onmessage = function() { | ||
|  |                   log += 'a'; | ||
|  |                   expect(log).toEqual('b'); | ||
|  |                   done(); | ||
|  |                 }; | ||
|  | 
 | ||
|  |                 socket.onmessage = function() { | ||
|  |                   log += 'b'; | ||
|  |                   expect(log).toEqual('b'); | ||
|  |                   done(); | ||
|  |                 }; | ||
|  | 
 | ||
|  |                 socket.send('hi'); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  | 
 | ||
|  |               it('should handler removing onmessage', function(done) { | ||
|  |                 let log = ''; | ||
|  | 
 | ||
|  |                 socket.onmessage = function() { log += 'a'; }; | ||
|  | 
 | ||
|  |                 socket.onmessage = null as any; | ||
|  | 
 | ||
|  |                 socket.send('hi'); | ||
|  | 
 | ||
|  |                 setTimeout(function() { | ||
|  |                   expect(log).toEqual(''); | ||
|  |                   done(); | ||
|  |                 }, 100); | ||
|  |               }, TIMEOUT); | ||
|  | 
 | ||
|  |               it('should have constants', function() { | ||
|  |                 expect(Object.keys(WebSocket)).toContain('CONNECTING'); | ||
|  |                 expect(Object.keys(WebSocket)).toContain('OPEN'); | ||
|  |                 expect(Object.keys(WebSocket)).toContain('CLOSING'); | ||
|  |                 expect(Object.keys(WebSocket)).toContain('CLOSED'); | ||
|  |               }); | ||
|  |             })); | ||
|  | } |