| 418 | |
| 419 | it('waits for open and reports close-before-open', async () => { |
| 420 | class SlowSocket implements WsLike { |
| 421 | readyState = 0; |
| 422 | private listeners = new Map<string, Array<(ev: WsEvent) => void>>(); |
| 423 | send() {} |
| 424 | close() {} |
| 425 | addEventListener(type: 'message' | 'close' | 'error' | 'open', listener: (ev: WsEvent) => void) { |
| 426 | const bucket = this.listeners.get(type) ?? []; |
| 427 | bucket.push(listener); |
| 428 | this.listeners.set(type, bucket); |
| 429 | } |
| 430 | removeEventListener(type: 'message' | 'close' | 'error' | 'open', listener: (ev: WsEvent) => void) { |
| 431 | const bucket = this.listeners.get(type) ?? []; |
| 432 | this.listeners.set( |
| 433 | type, |
| 434 | bucket.filter((l) => l !== listener), |
| 435 | ); |
| 436 | } |
| 437 | emitClose() { |
| 438 | for (const fn of this.listeners.get('close') ?? []) fn({}); |
| 439 | } |
| 440 | } |
| 441 | const sock = new SlowSocket(); |
| 442 | const pending = openWsSession({ |
| 443 | targetUrl: 'http://host.test', |
nothing calls this directly
no outgoing calls
no test coverage detected