Files
sori.studio/tests/markdown-editor-preview-blocks.test.js

122 lines
3.7 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
createPreviewAppendParagraphValue,
createPreviewDeleteLineValue,
createPreviewExtractGalleryImageValue,
createPreviewGalleryReorderValue,
createPreviewImagesMergeValue,
createPreviewInsertAfterLineResult,
createPreviewInsertImageToGalleryValue,
createPreviewMergeWithPreviousLineValue,
createPreviewRemoveGalleryImageResult,
parseEditorImageLine,
replacePreviewLineRangeValue
} from '../lib/markdown-editor-preview-blocks.js'
test('단독 이미지 URL도 에디터 이미지 줄로 해석한다', () => {
assert.deepEqual(parseEditorImageLine('/uploads/posts/sample.png'), {
url: '/uploads/posts/sample.png',
width: 'regular',
pixelWidth: null,
caption: '',
useAlt: false
})
assert.equal(parseEditorImageLine('일반 텍스트'), null)
})
test('줄 범위 교체와 갤러리 순서 변경 값을 만든다', () => {
assert.equal(replacePreviewLineRangeValue({
value: 'a\nb\nc',
startLine: 1,
endLine: 1,
replacementLines: ['B', 'BB']
}), 'a\nB\nBB\nc')
assert.equal(createPreviewGalleryReorderValue({
value: '위\n:::gallery\n![](/a.png)\n![](/b.png "둘")\n:::\n아래',
startLine: 1,
endLine: 4,
images: [
{ url: '/b.png', caption: '둘' },
{ url: '/a.png' }
]
}), '위\n:::gallery\n![](/b.png "둘")\n![](/a.png)\n:::\n아래')
})
test('두 단일 이미지 줄을 드래그 원본 우선 순서로 갤러리 병합한다', () => {
assert.equal(createPreviewImagesMergeValue({
value: '앞\n![](/a.png)\n중간\n![](/b.png "둘")\n뒤',
sourceLine: 3,
targetLine: 1
}), '앞\n:::gallery\n![](/b.png "둘")\n![](/a.png)\n:::\n뒤')
})
test('단일 이미지 줄을 기존 갤러리에 삽입하고 원본 줄을 제거한다', () => {
assert.equal(createPreviewInsertImageToGalleryValue({
value: '![](/source.png)\n본문\n:::gallery\n![](/a.png)\n![](/b.png)\n:::\n끝',
sourceLine: 0,
startLine: 2,
endLine: 5,
targetIndex: 1
}), '본문\n:::gallery\n![](/a.png)\n![](/source.png)\n![](/b.png)\n:::\n끝')
})
test('갤러리 이미지 삭제는 남은 개수에 따라 갤러리 또는 단일 이미지로 바꾼다', () => {
assert.deepEqual(createPreviewRemoveGalleryImageResult({
value: '위\n:::gallery\n![](/a.png)\n![](/b.png)\n:::\n아래',
startLine: 1,
endLine: 4,
imageIndex: 0
}), {
value: '위\n![](/b.png)\n아래',
focusLine: 1
})
assert.deepEqual(createPreviewRemoveGalleryImageResult({
value: '위\n:::gallery\n![](/a.png)\n![](/b.png)\n![](/c.png)\n:::\n아래',
startLine: 1,
endLine: 5,
imageIndex: 1
}), {
value: '위\n:::gallery\n![](/a.png)\n![](/c.png)\n:::\n아래',
focusLine: 2
})
})
test('갤러리 이미지를 블록 사이로 분리한다', () => {
assert.equal(createPreviewExtractGalleryImageValue({
value: '위\n:::gallery\n![](/a.png)\n![](/b.png)\n![](/c.png)\n:::\n아래',
startLine: 1,
endLine: 5,
imageIndex: 1,
insertBeforeLine: 6
}), '위\n:::gallery\n![](/a.png)\n![](/c.png)\n:::\n아래\n![](/b.png)')
})
test('문단 추가·지정 줄 삽입·삭제·이전 줄 병합 값을 만든다', () => {
assert.equal(createPreviewAppendParagraphValue('a\n\n'), 'a\n\n')
assert.equal(createPreviewAppendParagraphValue(''), '')
assert.deepEqual(createPreviewInsertAfterLineResult({
value: 'a\nb',
afterLine: 0,
lines: ['x', 'y']
}), {
value: 'a\nx\ny\nb',
focusLine: 1
})
assert.equal(createPreviewDeleteLineValue({
value: 'a\nb\nc',
lineIndex: 1
}), 'a\nc')
assert.equal(createPreviewMergeWithPreviousLineValue({
value: 'a\nb\nc',
lineIndex: 1,
mergedLine: 'ab'
}), 'ab\nc')
})