import { startServer } from "./server.ts"; export const hostname = "0.0.0.0"; export const port = 8042; export const href = `ws://${hostname}:${port}`; export function setup( fn: (ctx: Deno.TestContext) => Promise, handler: Deno.ServeHandler, ): (ctx: Deno.TestContext) => Promise { return async (ctx) => { const shutdown = startServer(handler, hostname, port); try { await fn(ctx); } finally { await shutdown(); } }; } export function connect(url: string): Promise<[WebSocket, string[]]> { return new Promise((resolve, reject) => { const messages: string[] = []; const socket = new WebSocket(url); socket.onopen = () => resolve([socket, messages]); socket.onerror = (error) => reject(error); socket.onmessage = ({ data }) => { messages.push(data); }; }); } export function close(socket: WebSocket): Promise { return new Promise((resolve) => { if (socket.readyState === WebSocket.CLOSED) { return resolve(); } socket.onclose = () => resolve(); socket.close(); }); } export function flush(): Promise { return new Promise((resolve) => setTimeout(resolve, 0)); }