test more

This commit is contained in:
Schluffe
2026-09-13 00:57:59 +02:00
parent 3e5dead07f
commit b2e29eaa95
+29 -17
View File
@@ -3,7 +3,7 @@ import { assertEquals } from "jsr:@std/assert";
const url = "ws://0.0.0.0:6969"; const url = "ws://0.0.0.0:6969";
function connect(): Promise<WebSocket> { function connect(url: string): Promise<WebSocket> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const socket = new WebSocket(url); const socket = new WebSocket(url);
socket.onopen = () => resolve(socket); socket.onopen = () => resolve(socket);
@@ -26,34 +26,46 @@ function nextMessage(socket: WebSocket): Promise<unknown> {
}); });
} }
function closeAndWait(socket: WebSocket): Promise<void> { function close(socket: WebSocket): Promise<void> {
return new Promise((resolve) => { return new Promise((resolve) => {
if (socket.readyState === WebSocket.CLOSED) return resolve(); if (socket.readyState === WebSocket.CLOSED) {
return resolve();
}
socket.onclose = () => resolve(); socket.onclose = () => resolve();
socket.close(); socket.close();
}); });
} }
Deno.test("broadcasts a message from one client to another", async () => { Deno.test("broadcasts a message on connect to all clients", async () => {
const a = await connect(); // 1 const s1 = await connect(url);
const b = await connect(); // 2 const s2 = await connect(url);
assertEquals(await nextMessage(s1), "2 has joined!");
const received = await nextMessage(b); const s3 = connect(url);
assertEquals(received, "2 has joined!"); Promise.all([nextMessage(s1), nextMessage(s2)]).then((messages) => {
messages.forEach((message) => {
assertEquals(message, "3 has joined!");
});
});
await closeAndWait(a); await close(s1);
await closeAndWait(b); await close(s2);
await close(await s3);
}); });
Deno.test("removes a client from broadcast after it disconnects", async () => { Deno.test("removes a client from broadcast after it disconnects", async () => {
// test are executed in a row so the ID will just increment const s4 = await connect(url);
const a = await connect(); // 3 const s5 = await connect(url);
const b = await connect(); // 4 const s6 = await connect(url);
await closeAndWait(b); await close(s5);
const msg = await nextMessage(a); Promise.all([nextMessage(s4), nextMessage(s6)]).then((messages) => {
assertEquals(msg, "4 has left!"); messages.forEach((message) => {
assertEquals(message, "5 has left!");
});
});
await closeAndWait(a); await close(s4);
await close(s6);
}); });