mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-17 09:30:58 -07:00
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, vi } from 'vitest';
|
|
import { UserHintService } from './userHintService.js';
|
|
|
|
describe('UserHintService', () => {
|
|
it('is disabled by default and ignores hints', () => {
|
|
const service = new UserHintService(() => false);
|
|
service.addUserHint('this hint should be ignored');
|
|
expect(service.getUserHints()).toEqual([]);
|
|
expect(service.getLatestHintIndex()).toBe(-1);
|
|
});
|
|
|
|
it('stores trimmed hints and exposes them via indexing when enabled', () => {
|
|
const service = new UserHintService(() => true);
|
|
|
|
service.addUserHint(' first hint ');
|
|
service.addUserHint('second hint');
|
|
service.addUserHint(' ');
|
|
|
|
expect(service.getUserHints()).toEqual(['first hint', 'second hint']);
|
|
expect(service.getLatestHintIndex()).toBe(1);
|
|
expect(service.getUserHintsAfter(-1)).toEqual([
|
|
'first hint',
|
|
'second hint',
|
|
]);
|
|
expect(service.getUserHintsAfter(0)).toEqual(['second hint']);
|
|
expect(service.getUserHintsAfter(1)).toEqual([]);
|
|
});
|
|
|
|
it('tracks the last hint timestamp', () => {
|
|
const service = new UserHintService(() => true);
|
|
|
|
expect(service.getLastUserHintAt()).toBeNull();
|
|
service.addUserHint('hint');
|
|
|
|
const timestamp = service.getLastUserHintAt();
|
|
expect(timestamp).not.toBeNull();
|
|
expect(typeof timestamp).toBe('number');
|
|
});
|
|
|
|
it('notifies listeners when a hint is added', () => {
|
|
const service = new UserHintService(() => true);
|
|
const listener = vi.fn();
|
|
service.onUserHint(listener);
|
|
|
|
service.addUserHint('new hint');
|
|
|
|
expect(listener).toHaveBeenCalledWith('new hint');
|
|
});
|
|
|
|
it('does NOT notify listeners after they are unregistered', () => {
|
|
const service = new UserHintService(() => true);
|
|
const listener = vi.fn();
|
|
service.onUserHint(listener);
|
|
service.offUserHint(listener);
|
|
|
|
service.addUserHint('ignored hint');
|
|
|
|
expect(listener).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should clear all hints', () => {
|
|
const service = new UserHintService(() => true);
|
|
service.addUserHint('hint 1');
|
|
service.addUserHint('hint 2');
|
|
expect(service.getUserHints()).toHaveLength(2);
|
|
|
|
service.clear();
|
|
expect(service.getUserHints()).toHaveLength(0);
|
|
expect(service.getLatestHintIndex()).toBe(-1);
|
|
});
|
|
});
|