@vybestack/llxprt-code 0.1.20-nightly.250818.90f427f5 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/package.json +3 -3
- package/dist/src/config/auth.test.d.ts +6 -0
- package/dist/src/config/auth.test.js +57 -0
- package/dist/src/config/auth.test.js.map +1 -0
- package/dist/src/config/config.d.ts +1 -1
- package/dist/src/config/config.js +27 -14
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.js +2 -2
- package/dist/src/config/keyBindings.test.d.ts +6 -0
- package/dist/src/config/keyBindings.test.js +51 -0
- package/dist/src/config/keyBindings.test.js.map +1 -0
- package/dist/src/config/logging/loggingConfig.test.d.ts +6 -0
- package/dist/src/config/logging/loggingConfig.test.js +363 -0
- package/dist/src/config/logging/loggingConfig.test.js.map +1 -0
- package/dist/src/config/settingsSchema.d.ts +0 -9
- package/dist/src/config/settingsSchema.js +0 -9
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.d.ts +6 -0
- package/dist/src/config/settingsSchema.test.js +195 -0
- package/dist/src/config/settingsSchema.test.js.map +1 -0
- package/dist/src/config/trustedFolders.test.d.ts +6 -0
- package/dist/src/config/trustedFolders.test.js +156 -0
- package/dist/src/config/trustedFolders.test.js.map +1 -0
- package/dist/src/gemini.js +14 -4
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.d.ts +6 -0
- package/dist/src/gemini.test.js +199 -0
- package/dist/src/gemini.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/integration-tests/base-url-behavior.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/base-url-behavior.integration.test.js +492 -0
- package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -0
- package/dist/src/integration-tests/cli-args.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/cli-args.integration.test.js +398 -0
- package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.js +436 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.js.map +1 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.js +290 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.js.map +1 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.js +564 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -0
- package/dist/src/integration-tests/modelParams.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/modelParams.integration.test.js +784 -0
- package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.js +429 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.js.map +1 -0
- package/dist/src/integration-tests/profile-system.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/profile-system.integration.test.js +364 -0
- package/dist/src/integration-tests/profile-system.integration.test.js.map +1 -0
- package/dist/src/integration-tests/provider-switching.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/provider-switching.integration.test.js +207 -0
- package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -0
- package/dist/src/integration-tests/security.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/security.integration.test.js +319 -0
- package/dist/src/integration-tests/security.integration.test.js.map +1 -0
- package/dist/src/integration-tests/test-utils.test.d.ts +6 -0
- package/dist/src/integration-tests/test-utils.test.js +221 -0
- package/dist/src/integration-tests/test-utils.test.js.map +1 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.js +559 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.d.ts +6 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.js +305 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.js.map +1 -0
- package/dist/src/providers/logging/git-stats.integration.test.d.ts +6 -0
- package/dist/src/providers/logging/git-stats.integration.test.js +245 -0
- package/dist/src/providers/logging/git-stats.integration.test.js.map +1 -0
- package/dist/src/providers/logging/git-stats.test.d.ts +6 -0
- package/dist/src/providers/logging/git-stats.test.js +432 -0
- package/dist/src/providers/logging/git-stats.test.js.map +1 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.d.ts +6 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js +531 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -0
- package/dist/src/providers/logging/performance.test.d.ts +6 -0
- package/dist/src/providers/logging/performance.test.js +465 -0
- package/dist/src/providers/logging/performance.test.js.map +1 -0
- package/dist/src/providers/provider-gemini-switching.test.d.ts +6 -0
- package/dist/src/providers/provider-gemini-switching.test.js +129 -0
- package/dist/src/providers/provider-gemini-switching.test.js.map +1 -0
- package/dist/src/providers/provider-switching.integration.test.d.ts +6 -0
- package/dist/src/providers/provider-switching.integration.test.js +113 -0
- package/dist/src/providers/provider-switching.integration.test.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.test.d.ts +6 -0
- package/dist/src/providers/providerManagerInstance.test.js +104 -0
- package/dist/src/providers/providerManagerInstance.test.js.map +1 -0
- package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
- package/dist/src/services/BuiltinCommandLoader.test.js +118 -0
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
- package/dist/src/services/CommandService.test.d.ts +6 -0
- package/dist/src/services/CommandService.test.js +232 -0
- package/dist/src/services/CommandService.test.js.map +1 -0
- package/dist/src/storage/ConversationStorage.test.d.ts +6 -0
- package/dist/src/storage/ConversationStorage.test.js +379 -0
- package/dist/src/storage/ConversationStorage.test.js.map +1 -0
- package/dist/src/test-utils/customMatchers.d.ts +14 -0
- package/dist/src/test-utils/customMatchers.js +46 -0
- package/dist/src/test-utils/customMatchers.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
- package/dist/src/test-utils/mockCommandContext.js +86 -0
- package/dist/src/test-utils/mockCommandContext.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
- package/dist/src/test-utils/mockCommandContext.test.js +51 -0
- package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
- package/dist/src/test-utils/responsive-testing.d.ts +14 -0
- package/dist/src/test-utils/responsive-testing.js +35 -0
- package/dist/src/test-utils/responsive-testing.js.map +1 -0
- package/dist/src/test-utils/responsive-testing.test.d.ts +6 -0
- package/dist/src/test-utils/responsive-testing.test.js +89 -0
- package/dist/src/test-utils/responsive-testing.test.js.map +1 -0
- package/dist/src/test-utils/testProviderConfig.d.ts +18 -0
- package/dist/src/test-utils/testProviderConfig.js +19 -0
- package/dist/src/test-utils/testProviderConfig.js.map +1 -0
- package/dist/src/ui/App.js +1 -1
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +8 -6
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +0 -1
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +5 -5
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/keyCommand.test.js +128 -0
- package/dist/src/ui/commands/keyCommand.test.js.map +1 -0
- package/dist/src/ui/commands/profileCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/profileCommand.test.js +343 -0
- package/dist/src/ui/commands/profileCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/setCommand.test.js +431 -0
- package/dist/src/ui/commands/setCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/setupGithubCommand.test.js +69 -0
- package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
- package/dist/src/ui/commands/toolformatCommand.test.d.ts +1 -0
- package/dist/src/ui/commands/toolformatCommand.test.js +145 -0
- package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.js +1 -1
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
- package/dist/src/ui/components/AuthDialog.test.js +252 -0
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.d.ts +1 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.js +89 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.js.map +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js +75 -0
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
- package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
- package/dist/src/ui/components/Footer.d.ts +1 -0
- package/dist/src/ui/components/Footer.js +2 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Footer.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/Footer.responsive.test.js +262 -0
- package/dist/src/ui/components/Footer.responsive.test.js.map +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js +92 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.paste.test.d.ts +6 -0
- package/dist/src/ui/components/InputPrompt.paste.test.js +263 -0
- package/dist/src/ui/components/InputPrompt.paste.test.js.map +1 -0
- package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/LoadingIndicator.test.js +149 -0
- package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js +127 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js.map +1 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.js +153 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.js.map +1 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js +252 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js.map +1 -0
- package/dist/src/ui/components/ProviderModelDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderModelDialog.test.js +197 -0
- package/dist/src/ui/components/ProviderModelDialog.test.js.map +1 -0
- package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
- package/dist/src/ui/components/SettingsDialog.test.js +555 -0
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.js +221 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.js.map +1 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.js +137 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.js.map +1 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.d.ts +6 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.js +94 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.js.map +1 -0
- package/dist/src/ui/components/messages/DiffRenderer.js +9 -7
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +13 -4
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js +172 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +112 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
- package/dist/src/ui/containers/SessionController.test.d.ts +6 -0
- package/dist/src/ui/containers/SessionController.test.js +440 -0
- package/dist/src/ui/containers/SessionController.test.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.js +830 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
- package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
- package/dist/src/ui/hooks/useEditorSettings.test.js +221 -0
- package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.d.ts +6 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js +800 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +12 -47
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
- package/dist/src/ui/hooks/useGitBranchName.test.js +170 -0
- package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
- package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
- package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
- package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
- package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
- package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
- package/dist/src/ui/hooks/useKeypress.test.d.ts +6 -0
- package/dist/src/ui/hooks/useKeypress.test.js +171 -0
- package/dist/src/ui/hooks/useKeypress.test.js.map +1 -0
- package/dist/src/ui/hooks/useResponsive.test.d.ts +6 -0
- package/dist/src/ui/hooks/useResponsive.test.js +124 -0
- package/dist/src/ui/hooks/useResponsive.test.js.map +1 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
- package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
- package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
- package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.js +929 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
- package/dist/src/ui/hooks/useStableCallback.test.d.ts +6 -0
- package/dist/src/ui/hooks/useStableCallback.test.js +57 -0
- package/dist/src/ui/hooks/useStableCallback.test.js.map +1 -0
- package/dist/src/ui/keyMatchers.test.d.ts +6 -0
- package/dist/src/ui/keyMatchers.test.js +276 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -0
- package/dist/src/ui/reducers/appReducer.test.d.ts +6 -0
- package/dist/src/ui/reducers/appReducer.test.js +519 -0
- package/dist/src/ui/reducers/appReducer.test.js.map +1 -0
- package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
- package/dist/src/ui/themes/color-utils.test.js +197 -0
- package/dist/src/ui/themes/color-utils.test.js.map +1 -0
- package/dist/src/ui/themes/semantic-resolver.test.d.ts +6 -0
- package/dist/src/ui/themes/semantic-resolver.test.js +210 -0
- package/dist/src/ui/themes/semantic-resolver.test.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.test.d.ts +6 -0
- package/dist/src/ui/themes/semantic-tokens.test.js +272 -0
- package/dist/src/ui/themes/semantic-tokens.test.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
- package/dist/src/ui/themes/theme-manager.test.js +151 -0
- package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
- package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
- package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/commandUtils.test.js +294 -0
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
- package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/displayUtils.test.js +42 -0
- package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
- package/dist/src/ui/utils/formatters.test.d.ts +6 -0
- package/dist/src/ui/utils/formatters.test.js +56 -0
- package/dist/src/ui/utils/formatters.test.js.map +1 -0
- package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
- package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
- package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
- package/dist/src/ui/utils/responsive.test.d.ts +6 -0
- package/dist/src/ui/utils/responsive.test.js +107 -0
- package/dist/src/ui/utils/responsive.test.js.map +1 -0
- package/dist/src/ui/utils/secureInputHandler.test.d.ts +6 -0
- package/dist/src/ui/utils/secureInputHandler.test.js +274 -0
- package/dist/src/ui/utils/secureInputHandler.test.js.map +1 -0
- package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
- package/dist/src/ui/utils/updateCheck.test.js +202 -0
- package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
- package/dist/src/utils/ConversationContext.test.d.ts +6 -0
- package/dist/src/utils/ConversationContext.test.js +64 -0
- package/dist/src/utils/ConversationContext.test.js.map +1 -0
- package/dist/src/utils/gitUtils.test.d.ts +6 -0
- package/dist/src/utils/gitUtils.test.js +113 -0
- package/dist/src/utils/gitUtils.test.js.map +1 -0
- package/dist/src/utils/installationInfo.test.d.ts +6 -0
- package/dist/src/utils/installationInfo.test.js +242 -0
- package/dist/src/utils/installationInfo.test.js.map +1 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.d.ts +6 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.js +463 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.js.map +1 -0
- package/dist/src/utils/readStdin.js +10 -0
- package/dist/src/utils/readStdin.js.map +1 -1
- package/dist/src/utils/sandbox.js +2 -2
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.d.ts +6 -0
- package/dist/src/utils/settingsUtils.test.js +514 -0
- package/dist/src/utils/settingsUtils.test.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.js +2 -2
- package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
- package/dist/src/utils/userStartupWarnings.test.js +67 -0
- package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
@@ -0,0 +1,555 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
/**
|
3
|
+
* @license
|
4
|
+
* Copyright 2025 Google LLC
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
6
|
+
*/
|
7
|
+
/**
|
8
|
+
*
|
9
|
+
*
|
10
|
+
* This test suite covers:
|
11
|
+
* - Initial rendering and display state
|
12
|
+
* - Keyboard navigation (arrows, vim keys, Tab)
|
13
|
+
* - Settings toggling (Enter, Space)
|
14
|
+
* - Focus section switching between settings and scope selector
|
15
|
+
* - Scope selection and settings persistence across scopes
|
16
|
+
* - Restart-required vs immediate settings behavior
|
17
|
+
* - VimModeContext integration
|
18
|
+
* - Complex user interaction workflows
|
19
|
+
* - Error handling and edge cases
|
20
|
+
* - Display values for inherited and overridden settings
|
21
|
+
*
|
22
|
+
*/
|
23
|
+
import { render } from 'ink-testing-library';
|
24
|
+
import { waitFor } from '@testing-library/react';
|
25
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
26
|
+
import { SettingsDialog } from './SettingsDialog.js';
|
27
|
+
import { LoadedSettings, SettingScope } from '../../config/settings.js';
|
28
|
+
import { VimModeProvider } from '../contexts/VimModeContext.js';
|
29
|
+
// Mock the VimModeContext
|
30
|
+
const mockToggleVimEnabled = vi.fn();
|
31
|
+
const mockSetVimMode = vi.fn();
|
32
|
+
vi.mock('../contexts/VimModeContext.js', async () => {
|
33
|
+
const actual = await vi.importActual('../contexts/VimModeContext.js');
|
34
|
+
return {
|
35
|
+
...actual,
|
36
|
+
useVimMode: () => ({
|
37
|
+
vimEnabled: false,
|
38
|
+
vimMode: 'INSERT',
|
39
|
+
toggleVimEnabled: mockToggleVimEnabled,
|
40
|
+
setVimMode: mockSetVimMode,
|
41
|
+
}),
|
42
|
+
};
|
43
|
+
});
|
44
|
+
vi.mock('../../utils/settingsUtils.js', async () => {
|
45
|
+
const actual = await vi.importActual('../../utils/settingsUtils.js');
|
46
|
+
return {
|
47
|
+
...actual,
|
48
|
+
saveModifiedSettings: vi.fn(),
|
49
|
+
};
|
50
|
+
});
|
51
|
+
// Mock console.log to avoid noise in tests
|
52
|
+
const originalConsoleLog = console.log;
|
53
|
+
const originalConsoleError = console.error;
|
54
|
+
describe('SettingsDialog', () => {
|
55
|
+
const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
|
56
|
+
beforeEach(() => {
|
57
|
+
vi.clearAllMocks();
|
58
|
+
console.log = vi.fn();
|
59
|
+
console.error = vi.fn();
|
60
|
+
mockToggleVimEnabled.mockResolvedValue(true);
|
61
|
+
});
|
62
|
+
afterEach(() => {
|
63
|
+
console.log = originalConsoleLog;
|
64
|
+
console.error = originalConsoleError;
|
65
|
+
});
|
66
|
+
const createMockSettings = (userSettings = {}, systemSettings = {}, workspaceSettings = {}) => new LoadedSettings({
|
67
|
+
settings: { customThemes: {}, mcpServers: {}, ...systemSettings },
|
68
|
+
path: '/system/settings.json',
|
69
|
+
}, {
|
70
|
+
settings: {
|
71
|
+
customThemes: {},
|
72
|
+
mcpServers: {},
|
73
|
+
...userSettings,
|
74
|
+
},
|
75
|
+
path: '/user/settings.json',
|
76
|
+
}, {
|
77
|
+
settings: { customThemes: {}, mcpServers: {}, ...workspaceSettings },
|
78
|
+
path: '/workspace/settings.json',
|
79
|
+
}, []);
|
80
|
+
describe('Initial Rendering', () => {
|
81
|
+
it('should render the settings dialog with default state', () => {
|
82
|
+
const settings = createMockSettings();
|
83
|
+
const onSelect = vi.fn();
|
84
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
85
|
+
const output = lastFrame();
|
86
|
+
expect(output).toContain('Settings');
|
87
|
+
expect(output).toContain('Apply To');
|
88
|
+
expect(output).toContain('Use Enter to select, Tab to change focus');
|
89
|
+
});
|
90
|
+
it('should show settings list with default values', () => {
|
91
|
+
const settings = createMockSettings();
|
92
|
+
const onSelect = vi.fn();
|
93
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
94
|
+
const output = lastFrame();
|
95
|
+
// Should show some default settings
|
96
|
+
expect(output).toContain('●'); // Active indicator
|
97
|
+
});
|
98
|
+
it('should highlight first setting by default', () => {
|
99
|
+
const settings = createMockSettings();
|
100
|
+
const onSelect = vi.fn();
|
101
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
102
|
+
const output = lastFrame();
|
103
|
+
// First item should be highlighted with green color and active indicator
|
104
|
+
expect(output).toContain('●');
|
105
|
+
});
|
106
|
+
});
|
107
|
+
describe('Settings Navigation', () => {
|
108
|
+
it('should navigate down with arrow key', async () => {
|
109
|
+
const settings = createMockSettings();
|
110
|
+
const onSelect = vi.fn();
|
111
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
112
|
+
// Press down arrow
|
113
|
+
stdin.write('\u001B[B'); // Down arrow
|
114
|
+
await wait();
|
115
|
+
// The active index should have changed (tested indirectly through behavior)
|
116
|
+
unmount();
|
117
|
+
});
|
118
|
+
it('should navigate up with arrow key', async () => {
|
119
|
+
const settings = createMockSettings();
|
120
|
+
const onSelect = vi.fn();
|
121
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
122
|
+
// First go down, then up
|
123
|
+
stdin.write('\u001B[B'); // Down arrow
|
124
|
+
await wait();
|
125
|
+
stdin.write('\u001B[A'); // Up arrow
|
126
|
+
await wait();
|
127
|
+
unmount();
|
128
|
+
});
|
129
|
+
it('should navigate with vim keys (j/k)', async () => {
|
130
|
+
const settings = createMockSettings();
|
131
|
+
const onSelect = vi.fn();
|
132
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
133
|
+
// Navigate with vim keys
|
134
|
+
stdin.write('j'); // Down
|
135
|
+
await wait();
|
136
|
+
stdin.write('k'); // Up
|
137
|
+
await wait();
|
138
|
+
unmount();
|
139
|
+
});
|
140
|
+
it('should not navigate beyond bounds', async () => {
|
141
|
+
const settings = createMockSettings();
|
142
|
+
const onSelect = vi.fn();
|
143
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
144
|
+
// Try to go up from first item
|
145
|
+
stdin.write('\u001B[A'); // Up arrow
|
146
|
+
await wait();
|
147
|
+
// Should still be on first item
|
148
|
+
unmount();
|
149
|
+
});
|
150
|
+
});
|
151
|
+
describe('Settings Toggling', () => {
|
152
|
+
it('should toggle setting with Enter key', async () => {
|
153
|
+
const settings = createMockSettings();
|
154
|
+
const onSelect = vi.fn();
|
155
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
156
|
+
// Press Enter to toggle current setting
|
157
|
+
stdin.write('\u000D'); // Enter key
|
158
|
+
await wait();
|
159
|
+
unmount();
|
160
|
+
});
|
161
|
+
it('should toggle setting with Space key', async () => {
|
162
|
+
const settings = createMockSettings();
|
163
|
+
const onSelect = vi.fn();
|
164
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
165
|
+
// Press Space to toggle current setting
|
166
|
+
stdin.write(' '); // Space key
|
167
|
+
await wait();
|
168
|
+
unmount();
|
169
|
+
});
|
170
|
+
it('should handle vim mode setting specially', async () => {
|
171
|
+
const settings = createMockSettings();
|
172
|
+
const onSelect = vi.fn();
|
173
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
174
|
+
// Navigate to vim mode setting and toggle it
|
175
|
+
// This would require knowing the exact position, so we'll just test that the mock is called
|
176
|
+
stdin.write('\u000D'); // Enter key
|
177
|
+
await wait();
|
178
|
+
// The mock should potentially be called if vim mode was toggled
|
179
|
+
unmount();
|
180
|
+
});
|
181
|
+
});
|
182
|
+
describe('Scope Selection', () => {
|
183
|
+
it('should switch between scopes', async () => {
|
184
|
+
const settings = createMockSettings();
|
185
|
+
const onSelect = vi.fn();
|
186
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
187
|
+
// Switch to scope focus
|
188
|
+
stdin.write('\t'); // Tab key
|
189
|
+
await wait();
|
190
|
+
// Select different scope (numbers 1-3 typically available)
|
191
|
+
stdin.write('2'); // Select second scope option
|
192
|
+
await wait();
|
193
|
+
unmount();
|
194
|
+
});
|
195
|
+
it('should reset to settings focus when scope is selected', async () => {
|
196
|
+
const settings = createMockSettings();
|
197
|
+
const onSelect = vi.fn();
|
198
|
+
const { lastFrame, stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
199
|
+
// Switch to scope focus
|
200
|
+
stdin.write('\t'); // Tab key
|
201
|
+
await waitFor(() => {
|
202
|
+
expect(lastFrame()).toContain('> Apply To');
|
203
|
+
});
|
204
|
+
// Select a scope
|
205
|
+
stdin.write('1'); // Select first scope option
|
206
|
+
await waitFor(() => {
|
207
|
+
expect(lastFrame()).toContain(' Apply To');
|
208
|
+
});
|
209
|
+
// Should be back to settings focus
|
210
|
+
expect(lastFrame()).toContain(' Apply To');
|
211
|
+
unmount();
|
212
|
+
});
|
213
|
+
});
|
214
|
+
describe('Restart Prompt', () => {
|
215
|
+
it('should show restart prompt for restart-required settings', async () => {
|
216
|
+
const settings = createMockSettings();
|
217
|
+
const onRestartRequest = vi.fn();
|
218
|
+
const { unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
|
219
|
+
// This test would need to trigger a restart-required setting change
|
220
|
+
// The exact steps depend on which settings require restart
|
221
|
+
await wait();
|
222
|
+
unmount();
|
223
|
+
});
|
224
|
+
it('should handle restart request when r is pressed', async () => {
|
225
|
+
const settings = createMockSettings();
|
226
|
+
const onRestartRequest = vi.fn();
|
227
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
|
228
|
+
// Press 'r' key (this would only work if restart prompt is showing)
|
229
|
+
stdin.write('r');
|
230
|
+
await wait();
|
231
|
+
// If restart prompt was showing, onRestartRequest should be called
|
232
|
+
unmount();
|
233
|
+
});
|
234
|
+
});
|
235
|
+
describe('Escape Key Behavior', () => {
|
236
|
+
it('should call onSelect with undefined when Escape is pressed', async () => {
|
237
|
+
const settings = createMockSettings();
|
238
|
+
const onSelect = vi.fn();
|
239
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
240
|
+
// Press Escape key
|
241
|
+
stdin.write('\u001B'); // ESC key
|
242
|
+
await waitFor(() => {
|
243
|
+
expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User);
|
244
|
+
});
|
245
|
+
unmount();
|
246
|
+
});
|
247
|
+
});
|
248
|
+
describe('Settings Persistence', () => {
|
249
|
+
it('should persist settings across scope changes', async () => {
|
250
|
+
const settings = createMockSettings({ vimMode: true });
|
251
|
+
const onSelect = vi.fn();
|
252
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
253
|
+
// Switch to scope selector
|
254
|
+
stdin.write('\t'); // Tab
|
255
|
+
await wait();
|
256
|
+
// Change scope
|
257
|
+
stdin.write('2'); // Select workspace scope
|
258
|
+
await wait();
|
259
|
+
// Settings should be reloaded for new scope
|
260
|
+
unmount();
|
261
|
+
});
|
262
|
+
it('should show different values for different scopes', () => {
|
263
|
+
const settings = createMockSettings({ vimMode: true }, // User settings
|
264
|
+
{ vimMode: false }, // System settings
|
265
|
+
{ autoUpdate: false });
|
266
|
+
const onSelect = vi.fn();
|
267
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
268
|
+
// Should show user scope values initially
|
269
|
+
const output = lastFrame();
|
270
|
+
expect(output).toContain('Settings');
|
271
|
+
});
|
272
|
+
});
|
273
|
+
describe('Error Handling', () => {
|
274
|
+
it('should handle vim mode toggle errors gracefully', async () => {
|
275
|
+
mockToggleVimEnabled.mockRejectedValue(new Error('Toggle failed'));
|
276
|
+
const settings = createMockSettings();
|
277
|
+
const onSelect = vi.fn();
|
278
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
279
|
+
// Try to toggle a setting (this might trigger vim mode toggle)
|
280
|
+
stdin.write('\u000D'); // Enter
|
281
|
+
await wait();
|
282
|
+
// Should not crash
|
283
|
+
unmount();
|
284
|
+
});
|
285
|
+
});
|
286
|
+
describe('Complex State Management', () => {
|
287
|
+
it('should track modified settings correctly', async () => {
|
288
|
+
const settings = createMockSettings();
|
289
|
+
const onSelect = vi.fn();
|
290
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
291
|
+
// Toggle a setting
|
292
|
+
stdin.write('\u000D'); // Enter
|
293
|
+
await wait();
|
294
|
+
// Toggle another setting
|
295
|
+
stdin.write('\u001B[B'); // Down
|
296
|
+
await wait();
|
297
|
+
stdin.write('\u000D'); // Enter
|
298
|
+
await wait();
|
299
|
+
// Should track multiple modified settings
|
300
|
+
unmount();
|
301
|
+
});
|
302
|
+
it('should handle scrolling when there are many settings', async () => {
|
303
|
+
const settings = createMockSettings();
|
304
|
+
const onSelect = vi.fn();
|
305
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
306
|
+
// Navigate down many times to test scrolling
|
307
|
+
for (let i = 0; i < 10; i++) {
|
308
|
+
stdin.write('\u001B[B'); // Down arrow
|
309
|
+
await wait(10);
|
310
|
+
}
|
311
|
+
unmount();
|
312
|
+
});
|
313
|
+
});
|
314
|
+
describe('VimMode Integration', () => {
|
315
|
+
it('should sync with VimModeContext when vim mode is toggled', async () => {
|
316
|
+
const settings = createMockSettings();
|
317
|
+
const onSelect = vi.fn();
|
318
|
+
const { stdin, unmount } = render(_jsx(VimModeProvider, { settings: settings, children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
|
319
|
+
// Navigate to and toggle vim mode setting
|
320
|
+
// This would require knowing the exact position of vim mode setting
|
321
|
+
stdin.write('\u000D'); // Enter
|
322
|
+
await wait();
|
323
|
+
unmount();
|
324
|
+
});
|
325
|
+
});
|
326
|
+
describe('Specific Settings Behavior', () => {
|
327
|
+
it('should show correct display values for settings with different states', () => {
|
328
|
+
const settings = createMockSettings({ vimMode: true, hideTips: false }, // User settings
|
329
|
+
{ hideWindowTitle: true }, // System settings
|
330
|
+
{ ideMode: false });
|
331
|
+
const onSelect = vi.fn();
|
332
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
333
|
+
const output = lastFrame();
|
334
|
+
// Should contain settings labels
|
335
|
+
expect(output).toContain('Settings');
|
336
|
+
});
|
337
|
+
it('should handle immediate settings save for non-restart-required settings', async () => {
|
338
|
+
const settings = createMockSettings();
|
339
|
+
const onSelect = vi.fn();
|
340
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
341
|
+
// Toggle a non-restart-required setting (like hideTips)
|
342
|
+
stdin.write('\u000D'); // Enter - toggle current setting
|
343
|
+
await wait();
|
344
|
+
// Should save immediately without showing restart prompt
|
345
|
+
unmount();
|
346
|
+
});
|
347
|
+
it('should show restart prompt for restart-required settings', async () => {
|
348
|
+
const settings = createMockSettings();
|
349
|
+
const onSelect = vi.fn();
|
350
|
+
const { lastFrame, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
351
|
+
// This test would need to navigate to a specific restart-required setting
|
352
|
+
// Since we can't easily target specific settings, we test the general behavior
|
353
|
+
await wait();
|
354
|
+
// Should not show restart prompt initially
|
355
|
+
expect(lastFrame()).not.toContain('To see changes, Gemini CLI must be restarted');
|
356
|
+
unmount();
|
357
|
+
});
|
358
|
+
it('should clear restart prompt when switching scopes', async () => {
|
359
|
+
const settings = createMockSettings();
|
360
|
+
const onSelect = vi.fn();
|
361
|
+
const { unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
362
|
+
// Restart prompt should be cleared when switching scopes
|
363
|
+
unmount();
|
364
|
+
});
|
365
|
+
});
|
366
|
+
describe('Settings Display Values', () => {
|
367
|
+
it('should show correct values for inherited settings', () => {
|
368
|
+
const settings = createMockSettings({}, { vimMode: true, hideWindowTitle: false }, // System settings
|
369
|
+
{});
|
370
|
+
const onSelect = vi.fn();
|
371
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
372
|
+
const output = lastFrame();
|
373
|
+
// Settings should show inherited values
|
374
|
+
expect(output).toContain('Settings');
|
375
|
+
});
|
376
|
+
it('should show override indicator for overridden settings', () => {
|
377
|
+
const settings = createMockSettings({ vimMode: false }, // User overrides
|
378
|
+
{ vimMode: true }, // System default
|
379
|
+
{});
|
380
|
+
const onSelect = vi.fn();
|
381
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
382
|
+
const output = lastFrame();
|
383
|
+
// Should show settings with override indicators
|
384
|
+
expect(output).toContain('Settings');
|
385
|
+
});
|
386
|
+
});
|
387
|
+
describe('Keyboard Shortcuts Edge Cases', () => {
|
388
|
+
it('should handle rapid key presses gracefully', async () => {
|
389
|
+
const settings = createMockSettings();
|
390
|
+
const onSelect = vi.fn();
|
391
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
392
|
+
// Rapid navigation
|
393
|
+
for (let i = 0; i < 5; i++) {
|
394
|
+
stdin.write('\u001B[B'); // Down arrow
|
395
|
+
stdin.write('\u001B[A'); // Up arrow
|
396
|
+
}
|
397
|
+
await wait(100);
|
398
|
+
// Should not crash
|
399
|
+
unmount();
|
400
|
+
});
|
401
|
+
it('should handle Ctrl+C to reset current setting to default', async () => {
|
402
|
+
const settings = createMockSettings({ vimMode: true }); // Start with vimMode enabled
|
403
|
+
const onSelect = vi.fn();
|
404
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
405
|
+
// Press Ctrl+C to reset current setting to default
|
406
|
+
stdin.write('\u0003'); // Ctrl+C
|
407
|
+
await wait();
|
408
|
+
// Should reset the current setting to its default value
|
409
|
+
unmount();
|
410
|
+
});
|
411
|
+
it('should handle Ctrl+L to reset current setting to default', async () => {
|
412
|
+
const settings = createMockSettings({ vimMode: true }); // Start with vimMode enabled
|
413
|
+
const onSelect = vi.fn();
|
414
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
415
|
+
// Press Ctrl+L to reset current setting to default
|
416
|
+
stdin.write('\u000C'); // Ctrl+L
|
417
|
+
await wait();
|
418
|
+
// Should reset the current setting to its default value
|
419
|
+
unmount();
|
420
|
+
});
|
421
|
+
it('should handle navigation when only one setting exists', async () => {
|
422
|
+
const settings = createMockSettings();
|
423
|
+
const onSelect = vi.fn();
|
424
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
425
|
+
// Try to navigate when potentially at bounds
|
426
|
+
stdin.write('\u001B[B'); // Down
|
427
|
+
await wait();
|
428
|
+
stdin.write('\u001B[A'); // Up
|
429
|
+
await wait();
|
430
|
+
unmount();
|
431
|
+
});
|
432
|
+
it('should properly handle Tab navigation between sections', async () => {
|
433
|
+
const settings = createMockSettings();
|
434
|
+
const onSelect = vi.fn();
|
435
|
+
const { lastFrame, stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
436
|
+
// Start in settings section
|
437
|
+
expect(lastFrame()).toContain(' Apply To');
|
438
|
+
// Tab to scope section
|
439
|
+
stdin.write('\t');
|
440
|
+
await waitFor(() => {
|
441
|
+
expect(lastFrame()).toContain('> Apply To');
|
442
|
+
});
|
443
|
+
// Tab back to settings section
|
444
|
+
stdin.write('\t');
|
445
|
+
await waitFor(() => {
|
446
|
+
expect(lastFrame()).toContain(' Apply To');
|
447
|
+
});
|
448
|
+
unmount();
|
449
|
+
});
|
450
|
+
});
|
451
|
+
describe('Error Recovery', () => {
|
452
|
+
it('should handle malformed settings gracefully', () => {
|
453
|
+
// Create settings with potentially problematic values
|
454
|
+
const settings = createMockSettings({ vimMode: null }, // Invalid value
|
455
|
+
{}, {});
|
456
|
+
const onSelect = vi.fn();
|
457
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
458
|
+
// Should still render without crashing
|
459
|
+
expect(lastFrame()).toContain('Settings');
|
460
|
+
});
|
461
|
+
it('should handle missing setting definitions gracefully', () => {
|
462
|
+
const settings = createMockSettings();
|
463
|
+
const onSelect = vi.fn();
|
464
|
+
// Should not crash even if some settings are missing definitions
|
465
|
+
const { lastFrame } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
466
|
+
expect(lastFrame()).toContain('Settings');
|
467
|
+
});
|
468
|
+
});
|
469
|
+
describe('Complex User Interactions', () => {
|
470
|
+
it('should handle complete user workflow: navigate, toggle, change scope, exit', async () => {
|
471
|
+
const settings = createMockSettings();
|
472
|
+
const onSelect = vi.fn();
|
473
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
474
|
+
// Navigate down a few settings
|
475
|
+
stdin.write('\u001B[B'); // Down
|
476
|
+
await wait();
|
477
|
+
stdin.write('\u001B[B'); // Down
|
478
|
+
await wait();
|
479
|
+
// Toggle a setting
|
480
|
+
stdin.write('\u000D'); // Enter
|
481
|
+
await wait();
|
482
|
+
// Switch to scope selector
|
483
|
+
stdin.write('\t'); // Tab
|
484
|
+
await wait();
|
485
|
+
// Change scope
|
486
|
+
stdin.write('2'); // Select workspace
|
487
|
+
await wait();
|
488
|
+
// Go back to settings
|
489
|
+
stdin.write('\t'); // Tab
|
490
|
+
await wait();
|
491
|
+
// Navigate and toggle another setting
|
492
|
+
stdin.write('\u001B[B'); // Down
|
493
|
+
await wait();
|
494
|
+
stdin.write(' '); // Space to toggle
|
495
|
+
await wait();
|
496
|
+
// Exit
|
497
|
+
stdin.write('\u001B'); // Escape
|
498
|
+
await waitFor(() => {
|
499
|
+
expect(onSelect).toHaveBeenCalledWith(undefined, expect.any(String));
|
500
|
+
});
|
501
|
+
unmount();
|
502
|
+
});
|
503
|
+
it('should allow changing multiple settings without losing pending changes', async () => {
|
504
|
+
const settings = createMockSettings();
|
505
|
+
const onSelect = vi.fn();
|
506
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
507
|
+
// Toggle first setting (should require restart)
|
508
|
+
stdin.write('\u000D'); // Enter
|
509
|
+
await wait();
|
510
|
+
// Navigate to next setting and toggle it (should not require restart - e.g., vimMode)
|
511
|
+
stdin.write('\u001B[B'); // Down
|
512
|
+
await wait();
|
513
|
+
stdin.write('\u000D'); // Enter
|
514
|
+
await wait();
|
515
|
+
// Navigate to another setting and toggle it (should also require restart)
|
516
|
+
stdin.write('\u001B[B'); // Down
|
517
|
+
await wait();
|
518
|
+
stdin.write('\u000D'); // Enter
|
519
|
+
await wait();
|
520
|
+
// The test verifies that all changes are preserved and the dialog still works
|
521
|
+
// This tests the fix for the bug where changing one setting would reset all pending changes
|
522
|
+
unmount();
|
523
|
+
});
|
524
|
+
it('should maintain state consistency during complex interactions', async () => {
|
525
|
+
const settings = createMockSettings({ vimMode: true });
|
526
|
+
const onSelect = vi.fn();
|
527
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: onSelect }));
|
528
|
+
// Multiple scope changes
|
529
|
+
stdin.write('\t'); // Tab to scope
|
530
|
+
await wait();
|
531
|
+
stdin.write('2'); // Workspace
|
532
|
+
await wait();
|
533
|
+
stdin.write('\t'); // Tab to settings
|
534
|
+
await wait();
|
535
|
+
stdin.write('\t'); // Tab to scope
|
536
|
+
await wait();
|
537
|
+
stdin.write('1'); // User
|
538
|
+
await wait();
|
539
|
+
// Should maintain consistent state
|
540
|
+
unmount();
|
541
|
+
});
|
542
|
+
it('should handle restart workflow correctly', async () => {
|
543
|
+
const settings = createMockSettings();
|
544
|
+
const onRestartRequest = vi.fn();
|
545
|
+
const { stdin, unmount } = render(_jsx(SettingsDialog, { settings: settings, onSelect: vi.fn(), onRestartRequest: onRestartRequest }));
|
546
|
+
// This would test the restart workflow if we could trigger it
|
547
|
+
stdin.write('r'); // Try restart key
|
548
|
+
await wait();
|
549
|
+
// Without restart prompt showing, this should have no effect
|
550
|
+
expect(onRestartRequest).not.toHaveBeenCalled();
|
551
|
+
unmount();
|
552
|
+
});
|
553
|
+
});
|
554
|
+
});
|
555
|
+
//# sourceMappingURL=SettingsDialog.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SettingsDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/SettingsDialog.test.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
/**
|
3
|
+
* @license
|
4
|
+
* Copyright 2025 Google LLC
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
6
|
+
*/
|
7
|
+
import { render } from 'ink-testing-library';
|
8
|
+
import { describe, it, expect, vi } from 'vitest';
|
9
|
+
import { ShellConfirmationDialog } from './ShellConfirmationDialog.js';
|
10
|
+
describe('ShellConfirmationDialog', () => {
|
11
|
+
const onConfirm = vi.fn();
|
12
|
+
const request = {
|
13
|
+
commands: ['ls -la', 'echo "hello"'],
|
14
|
+
onConfirm,
|
15
|
+
};
|
16
|
+
it('renders correctly', () => {
|
17
|
+
const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
|
18
|
+
expect(lastFrame()).toMatchSnapshot();
|
19
|
+
});
|
20
|
+
it('calls onConfirm with ProceedOnce when "Yes, allow once" is selected', () => {
|
21
|
+
const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
|
22
|
+
const select = lastFrame().toString();
|
23
|
+
// Simulate selecting the first option
|
24
|
+
// This is a simplified way to test the selection
|
25
|
+
expect(select).toContain('Yes, allow once');
|
26
|
+
});
|
27
|
+
it('calls onConfirm with ProceedAlways when "Yes, allow always for this session" is selected', () => {
|
28
|
+
const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
|
29
|
+
const select = lastFrame().toString();
|
30
|
+
// Simulate selecting the second option
|
31
|
+
expect(select).toContain('Yes, allow always for this session');
|
32
|
+
});
|
33
|
+
it('calls onConfirm with Cancel when "No (esc)" is selected', () => {
|
34
|
+
const { lastFrame } = render(_jsx(ShellConfirmationDialog, { request: request }));
|
35
|
+
const select = lastFrame().toString();
|
36
|
+
// Simulate selecting the third option
|
37
|
+
expect(select).toContain('No (esc)');
|
38
|
+
});
|
39
|
+
});
|
40
|
+
//# sourceMappingURL=ShellConfirmationDialog.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ShellConfirmationDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ShellConfirmationDialog.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG;QACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;QACpC,SAAS;KACV,CAAC;IAEF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,sCAAsC;QACtC,iDAAiD;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,uBAAuB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,sCAAsC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|