import { BaseStream, type StreamMessage, } from "../../source/services/stream/base-stream.js"; /** Minimal observable connection used by application and broadcaster tests. */ export class TestConnection extends BaseStream { readonly messages: StreamMessage[] = []; readonly closeCallbacks: Array<() => void> = []; closed = false; constructor( readonly streaming: boolean, readonly bidirectional: boolean, ) { super(); } async send(message: StreamMessage): Promise { if (this.closed) { throw new Error("connection is closed"); } this.messages.push(message); } close(): void { if (this.closed) { return; } this.closed = true; const callbacks = this.closeCallbacks.splice(0); callbacks.forEach((callback) => callback()); } onClose(callback: () => void): void { if (this.closed) { callback(); return; } this.closeCallbacks.push(callback); } }