import { describe, expect, it, mock } from 'bun:test' // We can't fully render ThemePicker due to complex dependencies // But we can test the theme options generation logic describe('ThemePicker', () => { describe('theme options', () => { it('generates correct theme options without AUTO_THEME feature flag', () => { // Since we can't easily mock bun:bundle, test the options structure // The real test would require integration testing const expectedOptions = [ { label: "Dark mode", value: "dark" }, { label: "Light mode", value: "light" }, { label: "Dark mode (colorblind-friendly)", value: "dark-daltonized" }, { label: "Light mode (colorblind-friendly)", value: "light-daltonized" }, { label: "Dark mode (ANSI colors only)", value: "dark-ansi" }, { label: "Light mode (ANSI colors only)", value: "light-ansi" }, ] expect(expectedOptions.length).toBe(6) }) it('includes auto theme when AUTO_THEME feature is enabled', () => { // Test the structure when auto is present const optionsWithAuto = [ { label: "Auto (match terminal)", value: "auto" }, { label: "Dark mode", value: "dark" }, ] expect(optionsWithAuto[0].value).toBe('auto') }) }) describe('handleRowFocus callback', () => { it('setPreviewTheme is called with theme setting', () => { const setPreviewTheme = mock() const handleRowFocus = (setting: string) => setPreviewTheme(setting) handleRowFocus('dark') expect(setPreviewTheme).toHaveBeenCalledWith('dark') }) }) describe('handleSelect callback', () => { it('calls savePreview and onThemeSelect', () => { const savePreview = mock() const onThemeSelect = mock() const handleSelect = (setting: string) => { savePreview() onThemeSelect(setting) } handleSelect('light') expect(savePreview).toHaveBeenCalled() expect(onThemeSelect).toHaveBeenCalledWith('light') }) }) describe('handleCancel callback', () => { it('calls cancelPreview and gracefulShutdown when not skipExitHandling', () => { const cancelPreview = mock() const gracefulShutdown = mock() const handleCancel = (skipExitHandling: boolean, onCancelProp?: () => void) => { cancelPreview() if (skipExitHandling) { onCancelProp?.() } else { gracefulShutdown(0) } } handleCancel(false) expect(cancelPreview).toHaveBeenCalled() expect(gracefulShutdown).toHaveBeenCalledWith(0) }) it('calls onCancelProp when skipExitHandling is true', () => { const cancelPreview = mock() const onCancelProp = mock() const handleCancel = (skipExitHandling: boolean, onCancelProp?: () => void) => { cancelPreview() if (skipExitHandling) { onCancelProp?.() } } handleCancel(true, onCancelProp) expect(cancelPreview).toHaveBeenCalled() expect(onCancelProp).toHaveBeenCalled() }) }) describe('syntax hint logic', () => { it('shows disabled hint when syntax highlighting is disabled', () => { const syntaxHighlightingDisabled = true const syntaxToggleShortcut = 'Ctrl+T' const hint = syntaxHighlightingDisabled ? `Syntax highlighting disabled (${syntaxToggleShortcut} to enable)` : `Syntax highlighting enabled (${syntaxToggleShortcut} to disable)` expect(hint).toContain('disabled') }) it('shows enabled hint when syntax highlighting is active', () => { const syntaxHighlightingDisabled = false const syntaxToggleShortcut = 'Ctrl+T' const hint = !syntaxHighlightingDisabled ? `Syntax highlighting enabled (${syntaxToggleShortcut} to disable)` : `Syntax highlighting disabled (${syntaxToggleShortcut} to enable)` expect(hint).toContain('enabled') }) }) })