diff --git a/test/web-socket.spec.ts b/test/web-socket.spec.ts index 812d3f3733..ce36ad879b 100644 --- a/test/web-socket.spec.ts +++ b/test/web-socket.spec.ts @@ -15,95 +15,92 @@ * limitations under the License. */ -import { it, describe, expect } from './fixtures'; +import { it, expect } from './fixtures'; -describe('web socket', (test, { browserName }) => { -}, () => { - it('should work', async ({ page, server }) => { - const value = await page.evaluate(port => { - let cb; - const result = new Promise(f => cb = f); - const ws = new WebSocket('ws://localhost:' + port + '/ws'); - ws.addEventListener('message', data => { ws.close(); cb(data.data); }); - return result; - }, server.PORT); - expect(value).toBe('incoming'); - }); - - it('should emit close events', async ({ page, server }) => { - let socketClosed; - const socketClosePromise = new Promise(f => socketClosed = f); - const log = []; - page.on('websocket', ws => { - log.push(`open<${ws.url()}>`); - ws.on('close', () => { log.push('close'); socketClosed(); }); - }); - await page.evaluate(port => { - const ws = new WebSocket('ws://localhost:' + port + '/ws'); - ws.addEventListener('open', () => ws.close()); - }, server.PORT); - await socketClosePromise; - expect(log.join(':')).toBe(`open:close`); - }); - - it('should emit frame events', async ({ page, server, isFirefox }) => { - let socketClosed; - const socketClosePromise = new Promise(f => socketClosed = f); - const log = []; - page.on('websocket', ws => { - log.push('open'); - ws.on('framesent', d => log.push('sent<' + d.payload + '>')); - ws.on('framereceived', d => log.push('received<' + d.payload + '>')); - ws.on('close', () => { log.push('close'); socketClosed(); }); - }); - await page.evaluate(port => { - const ws = new WebSocket('ws://localhost:' + port + '/ws'); - ws.addEventListener('open', () => ws.send('outgoing')); - ws.addEventListener('message', () => { ws.close(); }); - }, server.PORT); - await socketClosePromise; - expect(log[0]).toBe('open'); - expect(log[3]).toBe('close'); - log.sort(); - expect(log.join(':')).toBe('close:open:received:sent'); - }); - - it('should emit binary frame events', async ({ page, server }) => { - let doneCallback; - const donePromise = new Promise(f => doneCallback = f); - const sent = []; - page.on('websocket', ws => { - ws.on('close', doneCallback); - ws.on('framesent', d => sent.push(d.payload)); - }); - await page.evaluate(port => { - const ws = new WebSocket('ws://localhost:' + port + '/ws'); - ws.addEventListener('open', () => { - const binary = new Uint8Array(5); - for (let i = 0; i < 5; ++i) - binary[i] = i; - ws.send('text'); - ws.send(binary); - ws.close(); - }); - }, server.PORT); - await donePromise; - expect(sent[0]).toBe('text'); - for (let i = 0; i < 5; ++i) - expect(sent[1][i]).toBe(i); - }); - - it('should emit error', async ({page, server, isFirefox}) => { - let callback; - const result = new Promise(f => callback = f); - page.on('websocket', ws => ws.on('socketerror', callback)); - page.evaluate(port => { - new WebSocket('ws://localhost:' + port + '/bogus-ws'); - }, server.PORT); - const message = await result; - if (isFirefox) - expect(message).toBe('CLOSE_ABNORMAL'); - else - expect(message).toContain(': 400'); - }); +it('should work', async ({ page, server }) => { + const value = await page.evaluate(port => { + let cb; + const result = new Promise(f => cb = f); + const ws = new WebSocket('ws://localhost:' + port + '/ws'); + ws.addEventListener('message', data => { ws.close(); cb(data.data); }); + return result; + }, server.PORT); + expect(value).toBe('incoming'); +}); + +it('should emit close events', async ({ page, server }) => { + let socketClosed; + const socketClosePromise = new Promise(f => socketClosed = f); + const log = []; + page.on('websocket', ws => { + log.push(`open<${ws.url()}>`); + ws.on('close', () => { log.push('close'); socketClosed(); }); + }); + await page.evaluate(port => { + const ws = new WebSocket('ws://localhost:' + port + '/ws'); + ws.addEventListener('open', () => ws.close()); + }, server.PORT); + await socketClosePromise; + expect(log.join(':')).toBe(`open:close`); +}); + +it('should emit frame events', async ({ page, server, isFirefox }) => { + let socketClosed; + const socketClosePromise = new Promise(f => socketClosed = f); + const log = []; + page.on('websocket', ws => { + log.push('open'); + ws.on('framesent', d => log.push('sent<' + d.payload + '>')); + ws.on('framereceived', d => log.push('received<' + d.payload + '>')); + ws.on('close', () => { log.push('close'); socketClosed(); }); + }); + await page.evaluate(port => { + const ws = new WebSocket('ws://localhost:' + port + '/ws'); + ws.addEventListener('open', () => ws.send('outgoing')); + ws.addEventListener('message', () => { ws.close(); }); + }, server.PORT); + await socketClosePromise; + expect(log[0]).toBe('open'); + expect(log[3]).toBe('close'); + log.sort(); + expect(log.join(':')).toBe('close:open:received:sent'); +}); + +it('should emit binary frame events', async ({ page, server }) => { + let doneCallback; + const donePromise = new Promise(f => doneCallback = f); + const sent = []; + page.on('websocket', ws => { + ws.on('close', doneCallback); + ws.on('framesent', d => sent.push(d.payload)); + }); + await page.evaluate(port => { + const ws = new WebSocket('ws://localhost:' + port + '/ws'); + ws.addEventListener('open', () => { + const binary = new Uint8Array(5); + for (let i = 0; i < 5; ++i) + binary[i] = i; + ws.send('text'); + ws.send(binary); + ws.close(); + }); + }, server.PORT); + await donePromise; + expect(sent[0]).toBe('text'); + for (let i = 0; i < 5; ++i) + expect(sent[1][i]).toBe(i); +}); + +it('should emit error', async ({page, server, isFirefox}) => { + let callback; + const result = new Promise(f => callback = f); + page.on('websocket', ws => ws.on('socketerror', callback)); + page.evaluate(port => { + new WebSocket('ws://localhost:' + port + '/bogus-ws'); + }, server.PORT); + const message = await result; + if (isFirefox) + expect(message).toBe('CLOSE_ABNORMAL'); + else + expect(message).toContain(': 400'); });