|
|
@@ -0,0 +1,38 @@
|
|
|
+/** Regression coverage for ACP example teardown. */
|
|
|
+
|
|
|
+import { access, mkdtemp, rm } from 'node:fs/promises'
|
|
|
+import { tmpdir } from 'node:os'
|
|
|
+import { join } from 'node:path'
|
|
|
+import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
|
+import { cleanupAcpExampleTest } from './cleanup.ts'
|
|
|
+
|
|
|
+let fallbackWorkdir: string | undefined
|
|
|
+
|
|
|
+afterEach(async () => {
|
|
|
+ if (fallbackWorkdir !== undefined) await rm(fallbackWorkdir, { recursive: true, force: true })
|
|
|
+ fallbackWorkdir = undefined
|
|
|
+})
|
|
|
+
|
|
|
+describe('cleanupAcpExampleTest', () => {
|
|
|
+ it('removes the workspace after process shutdown fails', async () => {
|
|
|
+ fallbackWorkdir = await mkdtemp(join(tmpdir(), 'acp-cleanup-'))
|
|
|
+ const closeFailure = new Error('close failed')
|
|
|
+ const spawned = { close: vi.fn().mockRejectedValue(closeFailure) }
|
|
|
+
|
|
|
+ await expect(cleanupAcpExampleTest(spawned, fallbackWorkdir))
|
|
|
+ .rejects.toMatchObject({ errors: [closeFailure] })
|
|
|
+ await expect(access(fallbackWorkdir)).rejects.toThrow()
|
|
|
+ fallbackWorkdir = undefined
|
|
|
+ })
|
|
|
+
|
|
|
+ it('reports process and workspace failures together', async () => {
|
|
|
+ const closeFailure = new Error('close failed')
|
|
|
+ const spawned = { close: vi.fn().mockRejectedValue(closeFailure) }
|
|
|
+
|
|
|
+ const failure = await cleanupAcpExampleTest(spawned, '\0').catch((error: unknown) => error)
|
|
|
+
|
|
|
+ expect(failure).toBeInstanceOf(AggregateError)
|
|
|
+ expect((failure as AggregateError).errors).toHaveLength(2)
|
|
|
+ expect((failure as AggregateError).errors[0]).toBe(closeFailure)
|
|
|
+ })
|
|
|
+})
|