openpencil/packages/core/tests/editor/guides.test.ts
Danila Poyarkov 87bff8620c
test(core): move the editor suite into the package (#792)
The 54 editor engine tests move to packages/core/tests/editor with their helpers, importing Core's public subpaths or source modules relatively. The package gains test and typecheck scripts; the first type check fixed nullable lookups, stale imports, and renderer doubles, and graph events now declare the GraphEventRenderer surface they invalidate. The engine baseline drops to 534 files.
2026-09-30 10:22:42 +04:00

59 lines
2.1 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { createEditor } from '@open-pencil/core/editor'
import { expectDefined } from '../helpers/assert'
function setup() {
const editor = createEditor()
const pageId = editor.state.currentPageId
const frame = editor.graph.createNode('FRAME', pageId, {
x: 100,
y: 100,
width: 300,
height: 200
})
return { editor, pageId, frameId: frame.id }
}
describe('guide editor actions', () => {
test('adds, moves, removes, and undoes a page guide', () => {
const { editor, pageId } = setup()
const id = expectDefined(editor.addGuide(pageId, 'x', 42), 'guide id')
expect(id).not.toBeNull()
expect(editor.graph.getNode(pageId)?.guides).toEqual([{ id, axis: 'x', position: 42 }])
expect(editor.moveGuide(pageId, id, 84)).toBe(true)
expect(editor.graph.getNode(pageId)?.guides[0]?.position).toBe(84)
editor.undoAction()
expect(editor.graph.getNode(pageId)?.guides[0]?.position).toBe(42)
expect(editor.removeGuide(pageId, id)).toBe(true)
expect(editor.graph.getNode(pageId)?.guides).toEqual([])
editor.undoAction()
expect(editor.graph.getNode(pageId)?.guides[0]?.position).toBe(42)
})
test('transfers a guide between page and frame in one undo step', () => {
const { editor, pageId, frameId } = setup()
const id = expectDefined(editor.addGuide(pageId, 'y', 120), 'guide id')
editor.undo.clear()
expect(editor.transferGuide(pageId, frameId, id, 20)).toBe(true)
expect(editor.graph.getNode(pageId)?.guides).toEqual([])
expect(editor.graph.getNode(frameId)?.guides).toEqual([{ id, axis: 'y', position: 20 }])
editor.undoAction()
expect(editor.graph.getNode(pageId)?.guides).toEqual([{ id, axis: 'y', position: 120 }])
expect(editor.graph.getNode(frameId)?.guides).toEqual([])
})
test('rejects unsupported owners and no-op movement', () => {
const { editor, pageId } = setup()
const rect = editor.graph.createNode('RECTANGLE', pageId)
expect(editor.addGuide(rect.id, 'x', 10)).toBeNull()
const id = expectDefined(editor.addGuide(pageId, 'x', 10), 'guide id')
expect(editor.moveGuide(pageId, id, 10)).toBe(false)
})
})