Files
sori.studio/tests/markdown-slash-menu-position.test.js

77 lines
1.6 KiB
JavaScript

import assert from 'node:assert/strict'
import test from 'node:test'
import { calculateSlashMenuPosition } from '../lib/markdown-slash-menu-position.js'
test('슬래시 메뉴가 뷰포트 안에 있으면 후보 좌표를 유지한다', () => {
assert.deepEqual(calculateSlashMenuPosition({
top: 120,
left: 40,
anchorTop: 90,
menuHeight: 200,
menuWidth: 240,
viewportHeight: 800,
viewportWidth: 1000
}), {
top: 120,
left: 40
})
})
test('슬래시 메뉴가 아래로 넘치면 기준 요소 위로 올린다', () => {
assert.deepEqual(calculateSlashMenuPosition({
top: 700,
left: 40,
anchorTop: 660,
menuHeight: 200,
menuWidth: 240,
viewportHeight: 800,
viewportWidth: 1000
}), {
top: 456,
left: 40
})
})
test('위쪽 공간도 부족하면 뷰포트 하단 기준으로 보정한다', () => {
assert.deepEqual(calculateSlashMenuPosition({
top: 240,
left: 40,
anchorTop: 120,
menuHeight: 700,
menuWidth: 240,
viewportHeight: 800,
viewportWidth: 1000
}), {
top: 92,
left: 40
})
})
test('슬래시 메뉴가 좌우로 넘치면 안쪽 여백 안으로 보정한다', () => {
assert.deepEqual(calculateSlashMenuPosition({
top: 120,
left: 900,
anchorTop: 90,
menuHeight: 200,
menuWidth: 240,
viewportHeight: 800,
viewportWidth: 1000
}), {
top: 120,
left: 752
})
assert.deepEqual(calculateSlashMenuPosition({
top: 120,
left: -20,
anchorTop: 90,
menuHeight: 200,
menuWidth: 240,
viewportHeight: 800,
viewportWidth: 1000
}), {
top: 120,
left: 8
})
})