openpencil/tests/engine/figma/api/flatten-renderer.test.ts
2026-05-17 20:23:55 +03:00

55 lines
1.7 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { initCanvasKit } from '#cli/headless'
import { SkiaRenderer } from '#core/canvas'
import { createAPI } from './helpers'
async function createRenderer() {
const ck = await initCanvasKit()
const surface = ck.MakeSurface(200, 200)
if (!surface) throw new Error('Could not create CanvasKit surface')
return { renderer: new SkiaRenderer(ck, surface), surface }
}
describe('FigmaAPI renderer-backed flatten', () => {
test('keeps headless flatten as a compatibility placeholder without geometry', () => {
const api = createAPI()
const rect = api.createRectangle()
rect.resize(50, 40)
const vector = api.flatten([rect], api.currentPage)
const raw = api.graph.getNode(vector.id)
expect(raw?.type).toBe('VECTOR')
expect(raw?.width).toBe(50)
expect(raw?.height).toBe(40)
expect(raw?.vectorNetwork).toBeNull()
expect(api.getNodeById(rect.id)).toBeNull()
})
test('creates vector geometry when a renderer is attached', async () => {
const api = createAPI()
const { renderer, surface } = await createRenderer()
api.setRenderer(renderer)
const first = api.createRectangle()
const second = api.createEllipse()
first.resize(50, 40)
second.resize(50, 40)
second.x = 30
second.y = 10
const vector = api.flatten([first, second], api.currentPage)
const raw = api.graph.getNode(vector.id)
expect(raw?.type).toBe('VECTOR')
expect(raw?.x).toBe(0)
expect(raw?.y).toBe(0)
expect(raw?.width).toBe(80)
expect(raw?.height).toBe(50)
expect(raw?.vectorNetwork?.vertices.length).toBeGreaterThan(0)
expect(api.getNodeById(first.id)).toBeNull()
surface.delete()
})
})