import assert from 'node:assert/strict' import test from 'node:test' import { ref } from 'vue' import { useContentMarkdownParagraphs } from '../composables/useContentMarkdownParagraphs.js' /** * 테스트용 문단 편집 상태를 만든다. * @returns {{ calls: Object, pendingFocusLine: import('vue').Ref, pendingFocusPosition: import('vue').Ref, state: Object }} */ const createParagraphState = () => { const calls = { commits: [] } const pendingFocusLine = ref(null) const pendingFocusPosition = ref('auto') const state = useContentMarkdownParagraphs({ pendingFocusLine, pendingFocusPosition, commitInlineBlockLines: (block, replacementLines) => { calls.commits.push({ block, replacementLines }) } }) return { calls, pendingFocusLine, pendingFocusPosition, state } } test('문단 인라인 커밋은 여러 줄 입력을 빈 줄 없이 마크다운 줄로 반영한다', () => { const block = { type: 'paragraph', meta: { startLine: 2 } } const { calls, state } = createParagraphState() state.onParagraphInlineCommit(block, '첫 줄 \n\n둘째 줄') assert.deepEqual(calls.commits[0], { block, replacementLines: ['첫 줄', '둘째 줄'] }) }) test('문단 입력 중 > 단독 입력은 인용 마커 줄로 변환한다', () => { const block = { type: 'paragraph', meta: { startLine: 4 } } const { calls, pendingFocusLine, pendingFocusPosition, state } = createParagraphState() state.onParagraphLiveInput(block, '>') assert.equal(pendingFocusLine.value, 4) assert.equal(pendingFocusPosition.value, 'start') assert.deepEqual(calls.commits[0].replacementLines, ['> ']) }) test('문단 Enter 분리는 커서 앞뒤 텍스트를 두 문단 줄로 나눈다', () => { const block = { type: 'paragraph', meta: { startLine: 10 } } const { calls, pendingFocusLine, pendingFocusPosition, state } = createParagraphState() state.onParagraphSplit(block, { before: '앞', after: '뒤' }) assert.equal(pendingFocusLine.value, 11) assert.equal(pendingFocusPosition.value, 'start') assert.deepEqual(calls.commits[0].replacementLines, ['앞', '뒤']) }) test('문단 코드 펜스 단축 입력은 코드 블록 줄로 변환한다', () => { const block = { type: 'paragraph', meta: { startLine: 3 } } const { calls, pendingFocusLine, pendingFocusPosition, state } = createParagraphState() state.onParagraphSplit(block, { before: '```javascript', after: '' }) assert.equal(pendingFocusLine.value, 4) assert.equal(pendingFocusPosition.value, 'start') assert.deepEqual(calls.commits[0].replacementLines, ['```javascript', '', '```']) }) test('문단 콜아웃 단축 입력은 콜아웃 블록 줄로 변환한다', () => { const block = { type: 'paragraph', meta: { startLine: 7 } } const { calls, pendingFocusLine, pendingFocusPosition, state } = createParagraphState() state.onParagraphSplit(block, { before: '!!!', after: '' }) assert.equal(pendingFocusLine.value, 8) assert.equal(pendingFocusPosition.value, 'start') assert.deepEqual(calls.commits[0].replacementLines, [ ':::callout emoji=none bg=blue', '', '', ':::' ]) })