Refactor server stuff
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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<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));
|
||||
}
|
||||
Reference in New Issue
Block a user