Files
sori.studio/tests/useContentMarkdownParagraphs.test.js

92 lines
3.1 KiB
JavaScript

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<number|null>, pendingFocusPosition: import('vue').Ref<string>, 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',
'',
'',
':::'
])
})