From 770dfcef81fa5c9cc03d7a30f0eae27d2210cfc1 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Thu, 28 May 2026 16:35:32 -0700 Subject: [PATCH] test: preserve ssh mock event listeners --- src/main/ssh/ssh-connection.test.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/ssh/ssh-connection.test.ts b/src/main/ssh/ssh-connection.test.ts index a9bca04ec5c..fb58ad7f27e 100644 --- a/src/main/ssh/ssh-connection.test.ts +++ b/src/main/ssh/ssh-connection.test.ts @@ -6,7 +6,7 @@ import { mkdtempSync, rmSync, writeFileSync } from 'fs' import { tmpdir } from 'os' import { join } from 'path' -let eventHandlers: Map void> +let eventHandlers: Map void>> let connectBehavior: 'ready' | 'error' = 'ready' let connectErrorMessage = '' let destroyErrorMessage = '' @@ -20,6 +20,12 @@ type MockSshClient = { } let clientInstances: MockSshClient[] = [] +function emitSshEvent(event: string, ...args: unknown[]): void { + for (const handler of eventHandlers?.get(event) ?? []) { + handler(...args) + } +} + vi.mock('ssh2', () => { class MockBaseAgent {} class MockSshClient { @@ -34,10 +40,14 @@ vi.mock('ssh2', () => { clientInstances.push(this) } on(event: string, handler: (...args: unknown[]) => void) { - eventHandlers?.set(event, handler) + const handlers = eventHandlers?.get(event) ?? new Set<(...args: unknown[]) => void>() + handlers.add(handler) + eventHandlers?.set(event, handlers) } off(event: string, handler: (...args: unknown[]) => void) { - if (eventHandlers?.get(event) === handler) { + const handlers = eventHandlers?.get(event) + handlers?.delete(handler) + if (handlers?.size === 0) { eventHandlers.delete(event) } } @@ -46,17 +56,17 @@ vi.mock('ssh2', () => { setTimeout(() => { const next = connectSequence.shift() if (next instanceof Error) { - eventHandlers?.get('error')?.(next) + emitSshEvent('error', next) return } if (next === 'ready') { - eventHandlers?.get('ready')?.() + emitSshEvent('ready') return } if (connectBehavior === 'error') { - eventHandlers?.get('error')?.(new Error(connectErrorMessage)) + emitSshEvent('error', new Error(connectErrorMessage)) } else { - eventHandlers?.get('ready')?.() + emitSshEvent('ready') } }, 0) } @@ -65,9 +75,8 @@ vi.mock('ssh2', () => { if (!destroyErrorMessage) { return } - const handler = eventHandlers?.get('error') - if (handler) { - handler(new Error(destroyErrorMessage)) + if (eventHandlers?.has('error')) { + emitSshEvent('error', new Error(destroyErrorMessage)) return } throw new Error(destroyErrorMessage)