46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { startServer } from "./server.ts";
|
|
|
|
export const hostname = "0.0.0.0";
|
|
export const port = 8042;
|
|
|
|
export function setup(
|
|
fn: (ctx: Deno.TestContext) => Promise<void>,
|
|
handler: Deno.ServeHandler,
|
|
): (ctx: Deno.TestContext) => Promise<void> {
|
|
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<void> {
|
|
return new Promise((resolve) => {
|
|
if (socket.readyState === WebSocket.CLOSED) {
|
|
return resolve();
|
|
}
|
|
socket.onclose = () => resolve();
|
|
socket.close();
|
|
});
|
|
}
|
|
|
|
export function flush(): Promise<void> {
|
|
return new Promise((resolve) => setTimeout(resolve, 0));
|
|
}
|