feat: add paste without formatting command
This commit is contained in:
95
src/utils/plainTextPaste.test.ts
Normal file
95
src/utils/plainTextPaste.test.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import {
|
||||
activatePlainTextPasteTarget,
|
||||
insertPlainTextFromClipboardText,
|
||||
registerPlainTextPasteTarget,
|
||||
} from './plainTextPaste'
|
||||
|
||||
const { trackEvent } = vi.hoisted(() => ({
|
||||
trackEvent: vi.fn(),
|
||||
}))
|
||||
|
||||
vi.mock('../lib/telemetry', () => ({
|
||||
trackEvent,
|
||||
}))
|
||||
|
||||
describe('plainTextPaste', () => {
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks()
|
||||
document.body.innerHTML = ''
|
||||
})
|
||||
|
||||
it('replaces the selected text in a focused textarea', () => {
|
||||
const input = document.createElement('textarea')
|
||||
input.value = 'Alpha Beta'
|
||||
document.body.appendChild(input)
|
||||
input.focus()
|
||||
input.setSelectionRange(6, 10)
|
||||
|
||||
expect(insertPlainTextFromClipboardText('Plain\nText')).toBe(true)
|
||||
|
||||
expect(input.value).toBe('Alpha Plain\nText')
|
||||
expect(input.selectionStart).toBe(16)
|
||||
expect(trackEvent).toHaveBeenCalledWith('plain_text_paste_used', {
|
||||
surface: 'focused_input',
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps command palette focus from swallowing the paste target', () => {
|
||||
const palette = document.createElement('div')
|
||||
palette.setAttribute('data-command-palette', 'true')
|
||||
const input = document.createElement('input')
|
||||
palette.appendChild(input)
|
||||
document.body.appendChild(palette)
|
||||
|
||||
const target = {
|
||||
contains: () => false,
|
||||
insert: vi.fn(() => true),
|
||||
isConnected: () => true,
|
||||
surface: 'raw_editor',
|
||||
}
|
||||
|
||||
const unregister = registerPlainTextPasteTarget(target)
|
||||
activatePlainTextPasteTarget(target)
|
||||
input.focus()
|
||||
|
||||
expect(insertPlainTextFromClipboardText('Plain')).toBe(true)
|
||||
expect(target.insert).toHaveBeenCalledWith('Plain')
|
||||
expect(input.value).toBe('')
|
||||
expect(trackEvent).toHaveBeenCalledWith('plain_text_paste_used', {
|
||||
surface: 'raw_editor',
|
||||
})
|
||||
|
||||
unregister()
|
||||
})
|
||||
|
||||
it('uses the latest registered editor target when focus is outside text controls', () => {
|
||||
const target = {
|
||||
contains: () => false,
|
||||
insert: vi.fn(() => true),
|
||||
isConnected: () => true,
|
||||
surface: 'rich_editor',
|
||||
}
|
||||
|
||||
const unregister = registerPlainTextPasteTarget(target)
|
||||
document.body.focus()
|
||||
|
||||
expect(insertPlainTextFromClipboardText('Plain')).toBe(true)
|
||||
expect(target.insert).toHaveBeenCalledWith('Plain')
|
||||
expect(trackEvent).toHaveBeenCalledWith('plain_text_paste_used', {
|
||||
surface: 'rich_editor',
|
||||
})
|
||||
|
||||
unregister()
|
||||
})
|
||||
|
||||
it('does not treat non-text inputs as editable paste surfaces', () => {
|
||||
const input = document.createElement('input')
|
||||
input.type = 'checkbox'
|
||||
document.body.appendChild(input)
|
||||
input.focus()
|
||||
|
||||
expect(insertPlainTextFromClipboardText('Plain')).toBe(false)
|
||||
expect(trackEvent).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user