angular-docs-cn/packages/zone.js/test/browser/WebSocket.spec.ts

145 lines
4.5 KiB
TypeScript

/**
* @license
* Copyright Google LLC 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');
});
}));
}