summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/cli/src/ui/hooks/useSlashCompletion.test.ts15
-rw-r--r--packages/cli/src/ui/hooks/useSlashCompletion.tsx8
2 files changed, 14 insertions, 9 deletions
diff --git a/packages/cli/src/ui/hooks/useSlashCompletion.test.ts b/packages/cli/src/ui/hooks/useSlashCompletion.test.ts
index 206c4dc9..da4dc87b 100644
--- a/packages/cli/src/ui/hooks/useSlashCompletion.test.ts
+++ b/packages/cli/src/ui/hooks/useSlashCompletion.test.ts
@@ -7,7 +7,7 @@
/** @vitest-environment jsdom */
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
-import { renderHook, act } from '@testing-library/react';
+import { renderHook, act, waitFor } from '@testing-library/react';
import { useSlashCompletion } from './useSlashCompletion.js';
import * as fs from 'fs/promises';
import * as path from 'path';
@@ -136,7 +136,7 @@ describe('useSlashCompletion', () => {
expect(result.current.isLoadingSuggestions).toBe(false);
});
- it('should reset all state to default values', () => {
+ it('should reset all state to default values', async () => {
const slashCommands = [
{
name: 'help',
@@ -165,6 +165,11 @@ describe('useSlashCompletion', () => {
result.current.resetCompletionState();
});
+ // Wait for async suggestions clearing
+ await waitFor(() => {
+ expect(result.current.suggestions).toEqual([]);
+ });
+
expect(result.current.suggestions).toEqual([]);
expect(result.current.activeSuggestionIndex).toBe(-1);
expect(result.current.visibleStartIndex).toBe(0);
@@ -1288,7 +1293,7 @@ describe('useSlashCompletion', () => {
result.current.handleAutocomplete(0);
});
- expect(result.current.textBuffer.text).toBe('@src/file1.txt');
+ expect(result.current.textBuffer.text).toBe('@src/file1.txt ');
});
it('should complete a file path when cursor is not at the end of the line', () => {
@@ -1318,7 +1323,7 @@ describe('useSlashCompletion', () => {
result.current.handleAutocomplete(0);
});
- expect(result.current.textBuffer.text).toBe('@src/file1.txt le.txt');
+ expect(result.current.textBuffer.text).toBe('@src/file1.txt le.txt');
});
it('should complete the correct file path with multiple @-commands', () => {
@@ -1347,7 +1352,7 @@ describe('useSlashCompletion', () => {
result.current.handleAutocomplete(0);
});
- expect(result.current.textBuffer.text).toBe('@file1.txt @src/file2.txt');
+ expect(result.current.textBuffer.text).toBe('@file1.txt @src/file2.txt ');
});
});
diff --git a/packages/cli/src/ui/hooks/useSlashCompletion.tsx b/packages/cli/src/ui/hooks/useSlashCompletion.tsx
index c6821358..3b59bd45 100644
--- a/packages/cli/src/ui/hooks/useSlashCompletion.tsx
+++ b/packages/cli/src/ui/hooks/useSlashCompletion.tsx
@@ -111,7 +111,7 @@ export function useSlashCompletion(
useEffect(() => {
if (commandIndex === -1 || reverseSearchActive) {
- resetCompletionState();
+ setTimeout(resetCompletionState, 0);
return;
}
@@ -631,17 +631,17 @@ export function useSlashCompletion(
) {
suggestionText = ' ' + suggestionText;
}
- suggestionText += ' ';
}
+ suggestionText += ' ';
+
buffer.replaceRangeByOffset(
logicalPosToOffset(buffer.lines, cursorRow, completionStart.current),
logicalPosToOffset(buffer.lines, cursorRow, completionEnd.current),
suggestionText,
);
- resetCompletionState();
},
- [cursorRow, resetCompletionState, buffer, suggestions, commandIndex],
+ [cursorRow, buffer, suggestions, commandIndex],
);
return {