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 }) })