// src/editor/__tests__/inline-semantic-ops.test.ts import { describe, it, expect } from 'vitest' import type { ChangeSpec } from '@codemirror/state' import { inlineSemanticTextChangeFromChangeSpec } from '../inline-semantic-ops' describe('inlineSemanticTextChangeFromChangeSpec', () => { it('extracts a text change from a matching change spec', () => { expect(inlineSemanticTextChangeFromChangeSpec({ from: 2, to: 5, insert: 'abc' })) .toEqual({ from: 2, to: 5, insert: 'abc' }) }) it('returns undefined for non-object specs', () => { expect(inlineSemanticTextChangeFromChangeSpec('plain text' as unknown as ChangeSpec)).toBeUndefined() expect(inlineSemanticTextChangeFromChangeSpec([{ from: 0, insert: 'x' }] as unknown as ChangeSpec)).toBeUndefined() expect(inlineSemanticTextChangeFromChangeSpec(null as unknown as ChangeSpec)).toBeUndefined() }) it('returns undefined for objects missing the required fields', () => { expect(inlineSemanticTextChangeFromChangeSpec({ from: 0, to: 1 } as unknown as ChangeSpec)).toBeUndefined() expect(inlineSemanticTextChangeFromChangeSpec({ from: 0, insert: 'x' } as unknown as ChangeSpec)).toBeUndefined() expect(inlineSemanticTextChangeFromChangeSpec({ to: 1, insert: 'x' } as unknown as ChangeSpec)).toBeUndefined() }) it('returns undefined when the insert value is not a string', () => { expect(inlineSemanticTextChangeFromChangeSpec({ from: 0, to: 1, insert: 42 } as unknown as ChangeSpec)).toBeUndefined() }) })