
committed by
Kara Erickson

parent
7b3bcc23af
commit
5eb7426216
138
packages/zone.js/test/browser/WebSocket.spec.ts
Normal file
138
packages/zone.js/test/browser/WebSocket.spec.ts
Normal file
@ -0,0 +1,138 @@
|
||||
/**
|
||||
* @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');
|
||||
});
|
||||
}));
|
||||
}
|
Reference in New Issue
Block a user