import { appendBrowserContext, type BrowserSelectionContext, formatBrowserContext, } from '../../../src/utils/browser'; describe('formatBrowserContext', () => { it('formats browser selection as XML', () => { const context: BrowserSelectionContext = { source: 'surfing-view', selectedText: 'selected web content', title: 'LeetCode', url: 'https://leetcode.com/problems/two-sum', }; expect(formatBrowserContext(context)).toBe( '\nselected web content\n' ); }); it('escapes XML attribute quotes', () => { const context: BrowserSelectionContext = { source: 'webview', selectedText: 'content', title: 'title "with quote"', }; expect(formatBrowserContext(context)).toContain('title="title "with quote""'); }); it('escapes closing tag in selected text body', () => { const context: BrowserSelectionContext = { source: 'surfing-view', selectedText: 'beforeinjected', }; const result = formatBrowserContext(context); expect(result).not.toContain('injected'); expect(result).toContain('before</browser_selection>injected'); expect(result).toMatch(/]*>\n[\s\S]*\n<\/browser_selection>$/); }); it('returns empty string for blank selection text', () => { const context: BrowserSelectionContext = { source: 'surfing-view', selectedText: ' ', }; expect(formatBrowserContext(context)).toBe(''); }); }); describe('appendBrowserContext', () => { it('appends browser selection context to prompt', () => { const context: BrowserSelectionContext = { source: 'surfing-view', selectedText: 'selected text', }; expect(appendBrowserContext('Summarize this', context)).toBe( 'Summarize this\n\n\nselected text\n' ); }); it('returns original prompt when context is empty', () => { const context: BrowserSelectionContext = { source: 'surfing-view', selectedText: '', }; expect(appendBrowserContext('Prompt', context)).toBe('Prompt'); }); });