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');
|
||
|
});
|
||
|
}));
|
||
|
}
|