summaryrefslogtreecommitdiff
path: root/packages/cli/src/utils/cleanup.test.ts
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-08-08 15:38:30 +0000
committerGitHub <[email protected]>2025-08-08 15:38:30 +0000
commit3af4913ef3f00de71744de551a568aa713a3beec (patch)
treeca71aae771662435a4c01400a701b48a4c5dbcf3 /packages/cli/src/utils/cleanup.test.ts
parent5ec4ea9b4d425269c9e9052503ad85b5caaa976e (diff)
[ide-mode] Close all open diffs when the CLI gets closed (#5792)
Diffstat (limited to 'packages/cli/src/utils/cleanup.test.ts')
-rw-r--r--packages/cli/src/utils/cleanup.test.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/packages/cli/src/utils/cleanup.test.ts b/packages/cli/src/utils/cleanup.test.ts
new file mode 100644
index 00000000..0b254bac
--- /dev/null
+++ b/packages/cli/src/utils/cleanup.test.ts
@@ -0,0 +1,68 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { vi } from 'vitest';
+import { registerCleanup, runExitCleanup } from './cleanup';
+
+describe('cleanup', () => {
+ const originalCleanupFunctions = global['cleanupFunctions'];
+
+ beforeEach(() => {
+ // Isolate cleanup functions for each test
+ global['cleanupFunctions'] = [];
+ });
+
+ afterAll(() => {
+ // Restore original cleanup functions
+ global['cleanupFunctions'] = originalCleanupFunctions;
+ });
+
+ it('should run a registered synchronous function', async () => {
+ const cleanupFn = vi.fn();
+ registerCleanup(cleanupFn);
+
+ await runExitCleanup();
+
+ expect(cleanupFn).toHaveBeenCalledTimes(1);
+ });
+
+ it('should run a registered asynchronous function', async () => {
+ const cleanupFn = vi.fn().mockResolvedValue(undefined);
+ registerCleanup(cleanupFn);
+
+ await runExitCleanup();
+
+ expect(cleanupFn).toHaveBeenCalledTimes(1);
+ });
+
+ it('should run multiple registered functions', async () => {
+ const syncFn = vi.fn();
+ const asyncFn = vi.fn().mockResolvedValue(undefined);
+
+ registerCleanup(syncFn);
+ registerCleanup(asyncFn);
+
+ await runExitCleanup();
+
+ expect(syncFn).toHaveBeenCalledTimes(1);
+ expect(asyncFn).toHaveBeenCalledTimes(1);
+ });
+
+ it('should continue running cleanup functions even if one throws an error', async () => {
+ const errorFn = vi.fn(() => {
+ throw new Error('Test Error');
+ });
+ const successFn = vi.fn();
+
+ registerCleanup(errorFn);
+ registerCleanup(successFn);
+
+ await runExitCleanup();
+
+ expect(errorFn).toHaveBeenCalledTimes(1);
+ expect(successFn).toHaveBeenCalledTimes(1);
+ });
+});