summaryrefslogtreecommitdiff
path: root/packages/vscode-ide-companion/src/recent-files-manager.test.ts
diff options
context:
space:
mode:
authorShreya Keshive <[email protected]>2025-07-28 14:20:56 -0400
committerGitHub <[email protected]>2025-07-28 18:20:56 +0000
commitcfe3753d4c956ffcf13e227c0619069db672adbf (patch)
tree5d0b1ad9bfe3950861aff072e9cec91b5c20570e /packages/vscode-ide-companion/src/recent-files-manager.test.ts
parent9aef0a8e6c133d3bf1ff43f80119664c154ffdf2 (diff)
Refactors companion VS Code extension to import & use notification schema defined in gemini-cli (#5059)
Diffstat (limited to 'packages/vscode-ide-companion/src/recent-files-manager.test.ts')
-rw-r--r--packages/vscode-ide-companion/src/recent-files-manager.test.ts278
1 files changed, 0 insertions, 278 deletions
diff --git a/packages/vscode-ide-companion/src/recent-files-manager.test.ts b/packages/vscode-ide-companion/src/recent-files-manager.test.ts
deleted file mode 100644
index 9d56a10d..00000000
--- a/packages/vscode-ide-companion/src/recent-files-manager.test.ts
+++ /dev/null
@@ -1,278 +0,0 @@
-/**
- * @license
- * Copyright 2025 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
-import * as vscode from 'vscode';
-import {
- RecentFilesManager,
- MAX_FILES,
- MAX_FILE_AGE_MINUTES,
-} from './recent-files-manager.js';
-
-vi.mock('vscode', () => ({
- EventEmitter: vi.fn(() => {
- const listeners: Array<(e: void) => unknown> = [];
- return {
- event: vi.fn((listener) => {
- listeners.push(listener);
- return { dispose: vi.fn() };
- }),
- fire: vi.fn(() => {
- listeners.forEach((listener) => listener(undefined));
- }),
- dispose: vi.fn(),
- };
- }),
- window: {
- onDidChangeActiveTextEditor: vi.fn(),
- onDidChangeTextEditorSelection: vi.fn(),
- },
- workspace: {
- onDidDeleteFiles: vi.fn(),
- onDidCloseTextDocument: vi.fn(),
- onDidRenameFiles: vi.fn(),
- },
- Uri: {
- file: (path: string) => ({
- fsPath: path,
- scheme: 'file',
- }),
- },
-}));
-
-describe('RecentFilesManager', () => {
- let context: vscode.ExtensionContext;
- let onDidChangeActiveTextEditorListener: (
- editor: vscode.TextEditor | undefined,
- ) => void;
- let onDidDeleteFilesListener: (e: vscode.FileDeleteEvent) => void;
- let onDidCloseTextDocumentListener: (doc: vscode.TextDocument) => void;
- let onDidRenameFilesListener: (e: vscode.FileRenameEvent) => void;
-
- beforeEach(() => {
- vi.useFakeTimers();
-
- vi.mocked(vscode.window.onDidChangeActiveTextEditor).mockImplementation(
- (listener) => {
- onDidChangeActiveTextEditorListener = listener;
- return { dispose: vi.fn() };
- },
- );
- vi.mocked(vscode.workspace.onDidDeleteFiles).mockImplementation(
- (listener) => {
- onDidDeleteFilesListener = listener;
- return { dispose: vi.fn() };
- },
- );
- vi.mocked(vscode.workspace.onDidCloseTextDocument).mockImplementation(
- (listener) => {
- onDidCloseTextDocumentListener = listener;
- return { dispose: vi.fn() };
- },
- );
- vi.mocked(vscode.workspace.onDidRenameFiles).mockImplementation(
- (listener) => {
- onDidRenameFilesListener = listener;
- return { dispose: vi.fn() };
- },
- );
-
- context = {
- subscriptions: [],
- } as unknown as vscode.ExtensionContext;
- });
-
- afterEach(() => {
- vi.restoreAllMocks();
- vi.useRealTimers();
- });
-
- const getUri = (path: string) =>
- vscode.Uri.file(path) as unknown as vscode.Uri;
-
- it('adds a file to the list', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file1.txt');
- });
-
- it('moves an existing file to the top', async () => {
- const manager = new RecentFilesManager(context);
- const uri1 = getUri('/test/file1.txt');
- const uri2 = getUri('/test/file2.txt');
- manager.add(uri1);
- manager.add(uri2);
- manager.add(uri1);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(2);
- expect(manager.recentFiles[0].filePath).toBe('/test/file1.txt');
- });
-
- it('does not exceed the max number of files', async () => {
- const manager = new RecentFilesManager(context);
- for (let i = 0; i < MAX_FILES + 5; i++) {
- const uri = getUri(`/test/file${i}.txt`);
- manager.add(uri);
- }
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(MAX_FILES);
- expect(manager.recentFiles[0].filePath).toBe(
- `/test/file${MAX_FILES + 4}.txt`,
- );
- expect(manager.recentFiles[MAX_FILES - 1].filePath).toBe(`/test/file5.txt`);
- });
-
- it('fires onDidChange when a file is added', async () => {
- const manager = new RecentFilesManager(context);
- const onDidChangeSpy = vi.fn();
- manager.onDidChange(onDidChangeSpy);
-
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
-
- await vi.advanceTimersByTimeAsync(100);
- expect(onDidChangeSpy).toHaveBeenCalled();
- });
-
- it('removes a file when it is closed', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(1);
-
- onDidCloseTextDocumentListener({ uri } as vscode.TextDocument);
- await vi.advanceTimersByTimeAsync(100);
-
- expect(manager.recentFiles).toHaveLength(0);
- });
-
- it('fires onDidChange when a file is removed', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
-
- const onDidChangeSpy = vi.fn();
- manager.onDidChange(onDidChangeSpy);
-
- onDidCloseTextDocumentListener({ uri } as vscode.TextDocument);
- await vi.advanceTimersByTimeAsync(100);
-
- expect(onDidChangeSpy).toHaveBeenCalled();
- });
-
- it('removes a file when it is deleted', async () => {
- const manager = new RecentFilesManager(context);
- const uri1 = getUri('/test/file1.txt');
- const uri2 = getUri('/test/file2.txt');
- manager.add(uri1);
- manager.add(uri2);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(2);
-
- onDidDeleteFilesListener({ files: [uri1] });
- await vi.advanceTimersByTimeAsync(100);
-
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file2.txt');
- });
-
- it('fires onDidChange when a file is deleted', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
-
- const onDidChangeSpy = vi.fn();
- manager.onDidChange(onDidChangeSpy);
-
- onDidDeleteFilesListener({ files: [uri] });
- await vi.advanceTimersByTimeAsync(100);
-
- expect(onDidChangeSpy).toHaveBeenCalled();
- });
-
- it('removes multiple files when they are deleted', async () => {
- const manager = new RecentFilesManager(context);
- const uri1 = getUri('/test/file1.txt');
- const uri2 = getUri('/test/file2.txt');
- const uri3 = getUri('/test/file3.txt');
- manager.add(uri1);
- manager.add(uri2);
- manager.add(uri3);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(3);
-
- onDidDeleteFilesListener({ files: [uri1, uri3] });
- await vi.advanceTimersByTimeAsync(100);
-
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file2.txt');
- });
-
- it('prunes files older than the max age', () => {
- const manager = new RecentFilesManager(context);
- const uri1 = getUri('/test/file1.txt');
- manager.add(uri1);
-
- // Advance time by more than the max age
- const twoMinutesMs = (MAX_FILE_AGE_MINUTES + 1) * 60 * 1000;
- vi.advanceTimersByTime(twoMinutesMs);
-
- const uri2 = getUri('/test/file2.txt');
- manager.add(uri2);
-
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file2.txt');
- });
-
- it('fires onDidChange only once when adding an existing file', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
-
- const onDidChangeSpy = vi.fn();
- manager.onDidChange(onDidChangeSpy);
-
- manager.add(uri);
- await vi.advanceTimersByTimeAsync(100);
- expect(onDidChangeSpy).toHaveBeenCalledTimes(1);
- });
-
- it('updates the file when it is renamed', async () => {
- const manager = new RecentFilesManager(context);
- const oldUri = getUri('/test/file1.txt');
- const newUri = getUri('/test/file2.txt');
- manager.add(oldUri);
- await vi.advanceTimersByTimeAsync(100);
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file1.txt');
-
- onDidRenameFilesListener({ files: [{ oldUri, newUri }] });
- await vi.advanceTimersByTimeAsync(100);
-
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file2.txt');
- });
-
- it('adds a file when the active editor changes', async () => {
- const manager = new RecentFilesManager(context);
- const uri = getUri('/test/file1.txt');
-
- onDidChangeActiveTextEditorListener({
- document: { uri },
- } as vscode.TextEditor);
- await vi.advanceTimersByTimeAsync(100);
-
- expect(manager.recentFiles).toHaveLength(1);
- expect(manager.recentFiles[0].filePath).toBe('/test/file1.txt');
- });
-});