import test from 'node:test'; import assert from 'node:assert/strict'; import { DEFAULT_SETTINGS as defaults } from '../lib/defaults.js'; const actions = await import('../lib/actions.js').catch(() => ({})); test('context prioritizes selection over link and excludes unrelated targets', () => { assert.equal(typeof actions.getContext, 'function'); assert.deepEqual(actions.getContext({selectionText:'code',linkUrl:'https://example.com',contexts:['selection','link']}), {kind:'selection',source:'code'}); assert.deepEqual(actions.getContext({selectionText:' ',linkUrl:'https://example.com'}), {kind:'link',source:'https://example.com'}); assert.equal(actions.getContext({mediaType:'image',pageUrl:'https://example.com'}), null); assert.equal(actions.getContext({editable:true,pageUrl:'https://example.com'}), null); assert.equal(actions.getContext({selectionText:'secret',inputType:'password'}), null); assert.equal(actions.getContext({pageUrl:'https://example.com'}).kind, 'page'); }); test('selection actions and optional translation reflect settings', () => { assert.equal(typeof actions.getActions, 'function'); assert.deepEqual(actions.getActions({kind:'selection'}, defaults).map(a=>a.id), ['ask','explain','summarize','debug']); const list = actions.getActions({kind:'selection'}, {...defaults,showTranslate:true,translationMode:'preferred',translationLanguage:'A & B'}); assert.equal(list.at(-1).title,'Translate to A && B'); }); test('dedicated prompts ignore personal template and preserve literal source', () => { assert.equal(typeof actions.renderPrompt, 'function'); const request = {actionId:'ask',source:'$& $$ `code` 😀',settings:{...defaults,promptTemplate:'French: {query}'}}; assert.equal(actions.renderPrompt(request), 'French: $& $$ `code` 😀'); assert.equal(actions.renderPrompt({...request,source:''}), ''); for (const actionId of ['explain','summarize','debug']) { const prompt = actions.renderPrompt({...request,actionId}); assert.ok(prompt.includes(request.source)); assert.ok(!prompt.includes('French:')); } assert.match(actions.renderPrompt({...request,actionId:'translate',language:'Spanish'}), /Spanish/); assert.match(actions.renderPrompt({...request,actionId:'review-link'}), /uncertainty/); });